天天看點

znew-admin:簡單通用的springboot+vue3管理背景

作者:天天年年天天8

gitee位址: znew-admin: 绠€鍗曢€氱敤鐨剆pringboot+vue3绠$悊鍚庡彴

後端管理頁面

Geeker-Admin, 在此特别感謝大佬! Geeker-Admin: 鉁ㄢ湪鉁� Geeker Admin锛屽熀浜� Vue3.2銆乀ypeScript銆乂ite3銆丳inia銆丒lement-Plus 寮€婧愮殑涓€濂楀悗鍙扮鐞嗘鏋躲€�

接口測試

采用Apifox+ 規範注釋 + IDEA插件,在此特别感謝Apifox團隊! 安裝 | Apifox 使用文檔

一鍵生成接口文檔,簡直不要太好用!

項目簡介

力求簡單,好用,能夠快速開發. 新的一年希望有新氣象,是以項目名就叫znew.

資料庫通路

基于mybatis,封裝了一個通用實體類增删改查的工具類,也是本項目特色.

設計理念: 萬能實體類的增删改查. 不考慮複雜sql,關聯查詢等,推薦用原生mybatis配置檔案的方式.

CommonDao使用

/**
 * CommonDao使用示例
 * @author farkle
 * @date 2023-01-13
 */
@Service
public class CommonDaoDemo {
    @Autowired
    private CommonDao commonDao;

    //主鍵查找
    public SysDemo findByPk(Long id){
        return commonDao.findByPk(SysDemo.class, id);
    }
    //查詢所有資料
    public List<SysDemo> findALl(){
        return commonDao.findALl(SysDemo.class);
    }
    //查詢一條資料,推薦
    public SysDemo findByName(String name){
        return commonDao.findOne(new SysDemo().setName(name));
    }
    //查詢一條資料2
    public SysDemo findByName2(String name){
        return commonDao.findOneCond(Condition.create(SysDemo.class).put(SysDemo::getName, name));
    }
    //清單查詢,推薦
    public List<SysDemo> list(String name){
        return commonDao.list(new SysDemo().setName(name));
    }
    //清單查詢2
    public List<SysDemo> list2(String name){
        return commonDao.listCond(Condition.create(SysDemo.class).put(SysDemo::getName, name));
    }
    /**
     * 分頁查詢,推薦
     * 這裡隻是簡單分頁,面對複雜查詢的分頁推薦使用pagehelper
     * @param name
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public List<SysDemo> listPage(String name, Integer pageNumber, Integer pageSize){
        return commonDao.list((SysDemo)new SysDemo().setName(name).setSortByField("id").setSortByWay(SortByWay.desc), pageNumber,pageSize);
    }
    //分頁查詢2
    public List<SysDemo> listPage2(String name, Integer pageNumber, Integer pageSize){
        return commonDao.listCond(Condition.create(SysDemo.class).put(SysDemo::getName, name), pageNumber,pageSize);
    }
    //統計,推薦
    public Long count(String name){
        return commonDao.count(new SysDemo().setName(name));
    }
    //統計2
    public Long count2(String name){
        return commonDao.countCond(Condition.create(SysDemo.class).put(SysDemo::getName, name));
    }
    //帶統計數量的分頁,推薦
    public PageResult<SysDemo> page(String name, Integer pageNumber, Integer pageSize){
        PageResult<SysDemo> pageResult = commonDao.page((SysDemo) new SysDemo().setName(name).setSortByField("id").setSortByWay(SortByWay.desc), pageNumber, pageSize);
        System.out.println(pageResult.getTotal());
        System.out.println(pageResult.getData());
        return pageResult;
    }
    //帶統計數量的分頁2
    public PageResult<SysDemo> page2(String name, Integer pageNumber, Integer pageSize){
        PageResult<SysDemo> pageResult = commonDao.pageCond(Condition.create(SysDemo.class).put(SysDemo::getName, name), pageNumber,pageSize);
        System.out.println(pageResult.getTotal());
        System.out.println(pageResult.getData());
        return pageResult;
    }
    //新增
    public int insert(){
        SysDemo sysDemo = new SysDemo();
        sysDemo.setName("小明");
        return commonDao.insert(sysDemo);
    }
    //批量新增
    public int insertBatch(){
        List<SysDemo> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            SysDemo sysDemo = new SysDemo();
            sysDemo.setName("小明"+i);
            list.add(sysDemo);
        }
        return commonDao.insertBatch(list);
    }
    //主鍵更新
    public int updateByPk(Long id){
        SysDemo sysDemo = new SysDemo();
        sysDemo.setId(id);
        sysDemo.setName("小明名稱變更");
        return commonDao.updateByPk(sysDemo);
    }
    //updateAllField 根據主鍵根性所有字段

    //條件更新
    public int update(){
        SysDemo update = new SysDemo();
        update.setName("所有男的都叫小明");
        return commonDao.update(update, new SysDemo().setGender(Gender.Male));
    }
    //主鍵删除
    public int deleteByPk(Long id){
        return commonDao.deleteByPk(SysDemo.class, id);
    }
    //主鍵批量删除
    public int deleteBatch(List<Long> ids){
        return commonDao.deleteBatch(SysDemo.class, ids);
    }
    //條件删除
    public int delete(){
        //删除所有男性
        return commonDao.delete(new SysDemo().setGender(Gender.Male));
    }
}           

CommonService:通用增删改服務

/**
 * 通用服務
 * @author farkle
 * @date 2022-12-08
 */
public interface CommonService<T> {
    List<T> list(T t);
    T detail(Class<T> clazz, Long id);
    Long count(T t);
    int save(T t);
    int edit(T t);
    int update(T t, T cond);
    int del(Class<T> clazz, Long id);
    int dels(Class<T> clazz, List<Long> ids);
}

@Service
public class CommonServiceImpl<T> implements CommonService<T> {
    @Autowired
    private CommonDao commonDao;

    public List<T> list(T t){
        return commonDao.list(t);
    }
    public T detail(Class<T> clazz, Long id){
        return commonDao.findByPk(clazz, id);
    }
    public Long count(T t){
        return commonDao.count(t);
    }
    public int save(T t){
        return commonDao.insert(t);
    }
    public int edit(T t){
        return commonDao.updateByPk(t);
    }
    public int update(T t, T cond){
        return  commonDao.update(t,cond);
    }
    public int del(Class<T> clazz, Long id){
        return commonDao.deleteByPk(clazz, id);
    }
    public int dels(Class<T> clazz, List<Long> ids){
        return commonDao.deleteBatch(clazz, ids);
    }
}           

znew多子產品架構

znew
├─ common                 # 通用工具支援
│  ├─ lombok, servlet-api
│  ├─ jackson, FastJson
│  ├─ commons-io, commons-lang3, httpclient
│  ├─ jjwt
├─ model                  # 通用業務實體類
├─ basesystem			  # 背景管理基礎内容以及公共服務
│  ├─ common              
│  ├─ spring-boot-starter, spring-boot-starter-web
│  ├─ redis, validation, mybatis
│  ├─ freemarker(代碼生成器), Retrofit, swagger
├─ admin		          # 背景業務管理
│  ├─ basesystem, model, plugin    
│  ├─ security, pagehelper
├─ api		          	  # app業務接口
│  ├─ basesystem, model, plugin    
│  ├─ Freemarker(文章h5頁面)
├─ plugin		          # 通用第三方插件
│  ├─ common   
│  ├─ 微信授權登入,微信支付
│  ├─ 支付寶支付
│  ├─ 雲存儲 等
└─            

後端管理頁面權限控制

znew-admin:簡單通用的springboot+vue3管理背景

參考增删改demo, 注意:權限編碼和Controlelr是一一對應的,前端被屏蔽了,需要去資料庫檢視.實作方式自行檢視Authorization類.

代碼生成

znew-admin:簡單通用的springboot+vue3管理背景

生成代碼預覽

znew-admin:簡單通用的springboot+vue3管理背景

可拖拽排序的表單配置, 以及常用的表單字段類型

znew-admin:簡單通用的springboot+vue3管理背景

接口規範

請求方法
	送出資料推薦用 POST 方法
	擷取資料用 GET 方法
Response Headers(響應頭設定)
	Content-Type: application/json;charset=utf-8
請求參數
	POST請求 用@RequestBody 接收(json格式,請求頭設定:Content-Type: application/json;charset=UTF-8)
	後端必須做參數校驗
文檔
	請求參數,傳回實體 必須有對應的說明
	特殊code 必須有對應的說明
狀态類型辨別的字段
	推薦用枚舉,見名知意(看見對應的單詞就知道代表的狀态)
		disable(禁用) enable(啟用)
	辨別是否狀态的字段是推薦用1(是)0(否)辨別
接口變動
	方案一:做檔案記錄對應的接口變動
	方案二:接口加版版本區分
	方案三:...
接口日志
	建議做接口日志,友善排查問題

響應
	1.後端不允許直接報錯給前端,必須經過錯誤處理,傳回code=0
	2.傳回的json資料不允許出現 null 類型,如果是空類型請按下列傳回相應的"空資料"
		空數組請傳回: []
		空字元串請傳回: ""
		空數值請傳回:0
		金額格式: 兩位小數傳回,為空傳回 0
		日期格式: 轉成對應的字元格式傳回,為空傳回 ""

	3.不推薦用複雜的資料類型傳回(複雜類型,最多不超過3層)
		列子(不推薦):
			{
				"name": "教師zyh",
				"no": "教師001",
				"student": {
					"name": "學生zyh",
					"no": "學生001"
				}
			}
		錯誤傳回示例:
			{
				"name": "教師zyh",
				"no": "教師001",
				"student": null
			}
		推薦傳回:
			 {
				"name": "教師zyh",
				"no": "教師001",
				"studentName": "學生zyh",
				"studentNo": "學生001"
			}
			{
				"name": "教師zyh",
				"no": "教師001",
				"studentName": "",
				"studentNo": ""
			}

标準成功相應格式
	{
		"code": 1,
		"data":"",
		"message": ""
	}
标準失敗響應格式
	{
		"code": 0,
		"data":"",
		"message": ""		
	}
标準帶資料相應格式
	字元資料
		{
			"code": 1,
			"data": "",
			"message": ""
		}
	對象資料
		{
			"code": 1,
			"data": {},
			"message": ""
		}
	數組資料
		{
			"code": 1,
			"data": [],
			"message": ""
		}
	帶有分頁資訊的資料,前端分頁參數固定接收 pageNumber(第幾頁,預設值1) pageSize(每頁數量,預設值10)
		{
			"code": 1,
			"data": [],
			"message": "",
			"total": 0    //總條數
			"pageNumber":1 //目前頁
			"pageSize":10  //每頁數量
		}           

項目截圖

znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景
znew-admin:簡單通用的springboot+vue3管理背景

TODO

  1. CommonDao 更新多資料源,字段自動填充屬性,更新政策等進階功能
  2. 更新至Springboot3
  3. 背景管理清單通用導入,導出功能
  4. 內建工作流
  5. 推出 spring cloud alibaba 微服務版本

gitee位址: znew-admin: 绠€鍗曢€氱敤鐨剆pringboot+vue3绠$悊鍚庡彴

繼續閱讀