手把手搭建springBoot-Mybatis Plus下的簡單腳手架

閒來無事發現最近公司新來的同事,遠遠只停留在別人的項目中沒法自拔,堅信了一些固定開發方式,對如何搭建項目一無所知,也不曾嘗試,這讓我非常鬱悶。

如今我把本身搭建的一些腳手架貢獻出來給一些初學者參考,仍是那句話,一切從簡。適合本身的纔是最好的。

Spring boot MyBatis Plus

本項目涉及到的東西:

緩存:redis
安全框架:shiro
文檔框架:swagger2
持久層框架:Mybatis plus
開源工具:hutool  ,全部你想要的工具,裏面幾乎都有,包括excel導出導入 https://www.hutool.club/docs/#/

該腳手架具有了以下基本功能:

一、基於MyBatis plus基本的CRUD
    二、RedisUtil已封裝,可以使用
    三、Shiro下的權限認證、角色認證、Session過時認證,異地登陸檢查,單機版、分佈式皆適用
    四、動態多數據源 https://mp.baomidou.com/guide/dynamic-datasource.html
    五、swagger2
    六、統一的報文處理,異常處理、請求日誌打印(AOP)
    七、歸入了很是豐富的工具類 hutool  https://github.com/changyu3590/hutool.git
    八、支持事務
    九、定時任務
    十、基於mybatis-plus的審計(公共字段自動填充)

先瀏覽下項目結構

demo文件下的全部文件夾就是主要的工做目錄了

  • aop:html

    這裏主要用於切面日誌,就是輸出日誌git

  • base:github

    基礎的常量類:redis

    哈哈,就一個Excel模板存放的地址;spring

    父類Controller:跨域

    如今裏面只有個全局異常的處理,全部的Exception會捕捉到這裏,而後集中處理返回自定義報文,方便統一異常報文格式瀏覽器

    父類Service:緩存

    裏面只有個變量。。。用於自動裝配Dao接口的,後面有業務service的話,能夠先直接繼承這個Service,泛型裏直接傳入對應的Dao類就能夠用了:this.dao.xxxxxxx();安全

    ServiceException:這個沒啥可看的就是自定義異常,爲了規範,業務中時常要本身拋出一些業務異常,配合全局異常捕獲,隨時隨地拋出。可千萬不能retrun到controller,再以一個map返回去,這樣很容易出Bug。cookie

    StartupRunner:

    程序啓動後加載,這裏你能夠根據業務須要寫你想要的,沒啥事就打個日誌就能夠了。

    TimeoutException:

    同ServiceException,專門用來返回超時或異地登陸的報文的

  • config:

    WebMvcListener:

    它主要負責跨域配置、控制哪些路由須要進入Interceptor攔截器,哪裏不須要。@Bean那裏用於把Interceptor交給spring管理,生產單例的對象,沒啥可要說的。

    Interceptor:

    preHandler首先會被觸發。一般我這裏主要用於異地登陸檢查,由於結合了shiro,瀏覽器每次請求都會傳遞cookie裏的sessionId,這裏就是結合sessionId,實現了一個異地登陸檢查。若是項目沒有引入shiro的話,這裏可能徹底用於本身設計的token的校驗檢查,看看每次用戶發送的Request裏傳過來的token是否還存在在redis中,不存在就盤他,存在就刷新過時時間,固然key通常是token,value通常是當前用戶信息。

    AutoTableField:

    用的是mybatis plus裏的自動填充註解,@TableField(value = "create_by", fill = FieldFill.INSERT) ,這個註解標註的字段將會在這個類裏面實現,主要用於建立時間、修改時間、建立人、修改人。

    MybatisConfig:

    配置分頁插件,照這樣寫就行了。

    RedisConfig、RedisUtil:沒啥可說的,配置+封裝,而後就能夠用了。

    CustomeRelam:

    shiro中最重要的實現部分,主要實現用戶密碼認證(後續的session過時認證,也會由shiro自動處理)、填裝用戶信息到Subject裏方便後續直接從Subject裏取得在線用戶信息。再一個就是獲取角色權限信息,配合@RequireRoles、@RequirePermissions,這兩個註解會檢查你AuthorizationInfo中加載的當前用戶的角色及權限。

    ShiroConfig:

    shiro的所有配置就在這裏,這裏粘貼了部分代碼,如圖可看到它設定了哪些路由是須要anno即不檢查session的,剩下的都會authc就是檢查session信息,沒登陸就滾一邊去。固然一些靜態資源須要放醒,例如swagger。因爲單機版幾乎在商業中不存在,因此shiro最好配合redis,讓shiro自動將session存儲到redis,用redis管理session。

    ScheduledConfig:

    自帶的定時任務配置類,足夠用了。 具體怎麼用,面向百度,很簡單。

  • Controller

    UserController:本身寫的一個關於用戶的接口,demo而已。

  • dao

    RoleDao、UserDao:持久層接口,繼承了BaseMapper CRUD就一套都有了。下圖展現其中一個dao

  • dto:

    GeneralResponseDto:

    自定義交互報文,要求全部的報文返回統一該改格式返回。

  • entity:實體類

    User:

    實體類,註解都是mybatis plus裏的註解,並繼承了AttributeEntity

  • serviceimp:業務層 沒啥可說的,裏面就是一些demo,夾雜了一個mybatis plus的分頁查詢。

  • resources:

    mapper:mybatis xml都在這裏

    application.yml: 公共配置

    application-dev.yml: 本地配置

    紅框中數據源的配置格式基於mybatis plus中的多數據源配置, 參考官方文檔便可

    banner.txt:個性化的輸出

寫了這麼多,其實項目很精簡,老手都能看出來,幾乎沒啥東西,若有不對的地方,請見諒提出。

主要是爲了透過項目看本質,框架是爲業務模型而生的,每一個人的喜愛都不同,把框架縮到最精簡、可用、讓初學者能更好明白練練手。從而讓搭建項目不是那麼高不可攀的事情對一些人來講。

最後附上該項目的倉庫地址:

https://gitee.com/yuchang1/spring-demo

還有個同款jpa的以下:

https://gitee.com/yuchang1/spring-demo-jpa
相關文章
相關標籤/搜索