日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

还在从零开始搭建项目?手撸了款快速开发脚手架!

發布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 还在从零开始搭建项目?手撸了款快速开发脚手架! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

mall-tiny是一款基于SpringBoot+MyBatis-Plus的快速開發腳手架,擁有完整的權限管理功能,可對接Vue前端,開箱即用。

?

項目演示

mall-tiny項目可無縫對接mall-admin-web前端項目,秒變權限管理系統。前端項目地址:https://github.com/macrozheng/mall-admin-web


技術選型


數據庫表結構

化繁為簡,僅保留了權限管理功能相關的9張表,方便自由定制;


使用流程

環境搭建

簡化依賴服務,只需安裝最常用的MySql和Redis服務即可,數據庫中需要導入mall_tiny.sql腳本。

開發規約

項目包結構

src ├──?common?--?用于存放通用代碼 |???├──?api?--?通用結果集封裝類 |???├──?config?--?通用配置類 |???├──?domain?--?通用封裝對象 |???├──?exception?--?全局異常處理相關類 |???└──?service?--?通用業務類 ├──?config?--?SpringBoot中的Java配置 ├──?domain?--?共用封裝對象 ├──?generator?--?MyBatis-Plus代碼生成器 ├──?modules?--?存放業務代碼的基礎包 |???└──?ums?--?權限管理模塊業務代碼 |???????├──?controller?--?該模塊相關接口 |???????├──?dto?--?該模塊數據傳輸封裝對象 |???????├──?mapper?--?該模塊相關Mapper接口 |???????├──?model?--?該模塊相關實體類 |???????└──?service?--?該模塊相關業務處理類 └──?security?--?SpringSecurity認證授權相關代碼├──?annotation?--?相關注解├──?aspect?--?相關切面├──?component?--?認證授權相關組件├──?config?--?相關配置└──?util?--?相關工具類

資源文件說明

resources ├──?mapper?--?MyBatis中mapper.xml存放位置 ├──?application.yml?--?SpringBoot通用配置文件 ├──?application-dev.yml?--?SpringBoot開發環境配置文件 ├──?application-prod.yml?--?SpringBoot生產環境配置文件 └──?generator.properties?--?MyBatis-Plus代碼生成器配置

接口定義規則

  • 創建表記錄:POST /{控制器路由名稱}/create

  • 修改表記錄:POST /{控制器路由名稱}/update/{id}

  • 刪除指定表記錄:POST /{控制器路由名稱}/delete/{id}

  • 分頁查詢表記錄:GET /{控制器路由名稱}/list

  • 獲取指定記錄詳情:GET /{控制器路由名稱}/{id}

  • 具體參數及返回結果定義可以運行代碼查看Swagger-UI的Api文檔:http://localhost:8080/swagger-ui.html

項目運行

直接運行啟動類MallTinyApplication的main函數即可。

業務代碼開發流程

創建業務表

創建好pms模塊的所有表,需要注意的是一定要寫好表字段的注釋,這樣實體類和接口文檔中就會自動生成字段說明了。

使用代碼生成器

運行MyBatisPlusGenerator類的main方法來生成代碼,可直接生成controller、service、mapper、model、mapper.xml的代碼,無需手動創建。

  • 代碼生成器支持兩種模式,一種生成單表的代碼,比如只生成pms_brand表代碼可以先輸入pms,后輸入pms_brand;

  • 生成代碼結構一覽;

  • 另一種直接生成整個模塊的代碼,比如生成pms模塊代碼可以先輸入pms,后輸入pms_*。

編寫業務代碼

單表查詢

由于MyBatis-Plus提供的增強功能相當強大,單表查詢幾乎不用手寫SQL,直接使用ServiceImpl和BaseMapper中提供的方法即可。

比如我們的菜單管理業務實現類UmsMenuServiceImpl中的方法都直接使用了這些方法。

/***?后臺菜單管理Service實現類*?Created?by?macro?on?2020/2/2.*/ @Service public?class?UmsMenuServiceImpl?extends?ServiceImpl<UmsMenuMapper,UmsMenu>implements?UmsMenuService?{@Overridepublic?boolean?create(UmsMenu?umsMenu)?{umsMenu.setCreateTime(new?Date());updateLevel(umsMenu);return?save(umsMenu);}@Overridepublic?boolean?update(Long?id,?UmsMenu?umsMenu)?{umsMenu.setId(id);updateLevel(umsMenu);return?updateById(umsMenu);}@Overridepublic?Page<UmsMenu>?list(Long?parentId,?Integer?pageSize,?Integer?pageNum)?{Page<UmsMenu>?page?=?new?Page<>(pageNum,pageSize);QueryWrapper<UmsMenu>?wrapper?=?new?QueryWrapper<>();wrapper.lambda().eq(UmsMenu::getParentId,parentId).orderByDesc(UmsMenu::getSort);return?page(page,wrapper);}@Overridepublic?List<UmsMenuNode>?treeList()?{List<UmsMenu>?menuList?=?list();List<UmsMenuNode>?result?=?menuList.stream().filter(menu?->?menu.getParentId().equals(0L)).map(menu?->?covertMenuNode(menu,?menuList)).collect(Collectors.toList());return?result;}@Overridepublic?boolean?updateHidden(Long?id,?Integer?hidden)?{UmsMenu?umsMenu?=?new?UmsMenu();umsMenu.setId(id);umsMenu.setHidden(hidden);return?updateById(umsMenu);} }
分頁查詢

對于分頁查詢MyBatis-Plus原生支持,不需要再整合其他插件,直接構造Page對象,然后調用ServiceImpl中的page方法即可。

/***?后臺菜單管理Service實現類*?Created?by?macro?on?2020/2/2.*/ @Service public?class?UmsMenuServiceImpl?extends?ServiceImpl<UmsMenuMapper,UmsMenu>implements?UmsMenuService?{@Overridepublic?Page<UmsMenu>?list(Long?parentId,?Integer?pageSize,?Integer?pageNum)?{Page<UmsMenu>?page?=?new?Page<>(pageNum,pageSize);QueryWrapper<UmsMenu>?wrapper?=?new?QueryWrapper<>();wrapper.lambda().eq(UmsMenu::getParentId,parentId).orderByDesc(UmsMenu::getSort);return?page(page,wrapper);} }
多表查詢

對于多表查詢,我們需要手寫mapper.xml中的SQL實現,由于之前我們已經生成了mapper.xml文件,所以我們直接在Mapper接口中定義好方法,然后在mapper.xml寫好SQL實現即可。

  • 比如說我們需要寫一個根據用戶ID獲取其分配的菜單的方法,首先我們在UmsMenuMapper接口中添加好getMenuList方法;

/***?<p>*?后臺菜單表?Mapper?接口*?</p>**?@author?macro*?@since?2020-08-21*/ public?interface?UmsMenuMapper?extends?BaseMapper<UmsMenu>?{/***?根據后臺用戶ID獲取菜單*/List<UmsMenu>?getMenuList(@Param("adminId")?Long?adminId);}
  • 然后在UmsMenuMapper.xml添加該方法的對應SQL實現即可。

<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?mapper?PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"?"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper?namespace="com.macro.mall.tiny.modules.ums.mapper.UmsMenuMapper"><select?id="getMenuList"?resultType="com.macro.mall.tiny.modules.ums.model.UmsMenu">SELECTm.id?id,m.parent_id?parentId,m.create_time?createTime,m.title?title,m.level?level,m.sort?sort,m.name?name,m.icon?icon,m.hidden?hiddenFROMums_admin_role_relation?arrLEFT?JOIN?ums_role?r?ON?arr.role_id?=?r.idLEFT?JOIN?ums_role_menu_relation?rmr?ON?r.id?=?rmr.role_idLEFT?JOIN?ums_menu?m?ON?rmr.menu_id?=?m.idWHEREarr.admin_id?=?#{adminId}AND?m.id?IS?NOT?NULLGROUP?BYm.id</select></mapper>

項目部署

mall-tiny已經集成了Docker插件,可以打包成Docker鏡像來部署

其他說明

SpringSecurity相關

由于使用了SpringSecurity來實現認證和授權,部分接口需要token才可以訪問,訪問需要認證授權接口流程如下。

  • 訪問Swagger-UI接口文檔:http://localhost:8080/swagger-ui.html

  • 調用登錄接口獲取token;

  • 點擊右上角Authorize按鈕輸入token,然后訪問相關接口即可。

請求參數校驗

默認集成了Jakarta Bean Validation參數校驗框架,只需在參數對象屬性中添加javax.validation.constraints包中的注解注解即可實現校驗功能,這里以登錄參數校驗為例。

  • 首先在登錄請求參數中添加@NotEmpty注解;

/***?用戶登錄參數*?Created?by?macro?on?2018/4/26.*/ @Data @EqualsAndHashCode(callSuper?=?false) public?class?UmsAdminLoginParam?{@NotEmpty@ApiModelProperty(value?=?"用戶名",required?=?true)private?String?username;@NotEmpty@ApiModelProperty(value?=?"密碼",required?=?true)private?String?password; }
  • 然后在登錄接口中添加@Validated注解開啟參數校驗功能即可。

/***?后臺用戶管理*?Created?by?macro?on?2018/4/26.*/ @Controller @Api(tags?=?"UmsAdminController",?description?=?"后臺用戶管理") @RequestMapping("/admin") public?class?UmsAdminController?{@ApiOperation(value?=?"登錄以后返回token")@RequestMapping(value?=?"/login",?method?=?RequestMethod.POST)@ResponseBodypublic?CommonResult?login(@Validated?@RequestBody?UmsAdminLoginParam?umsAdminLoginParam)?{String?token?=?adminService.login(umsAdminLoginParam.getUsername(),?umsAdminLoginParam.getPassword());if?(token?==?null)?{return?CommonResult.validateFailed("用戶名或密碼錯誤");}Map<String,?String>?tokenMap?=?new?HashMap<>();tokenMap.put("token",?token);tokenMap.put("tokenHead",?tokenHead);return?CommonResult.success(tokenMap);} }

項目地址:https://github.com/macrozheng/mall-tiny

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的还在从零开始搭建项目?手撸了款快速开发脚手架!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。