tyboot -基於 Spring Boot 的快速開發腳手架

tyboot

源碼:java

https://gitee.com/magintursh/tybootgit

https://github.com/magintursh/tybootgithub

若是喜歡,能夠給個 star 讓更多人看到。web

介紹

tyboot是一個基於springboot的服務端腳手架,面向單體服務快速開發,須要微服務方案的能夠看另外一個項目tycloud(還在完善中)

特色

1.簡化基礎業務開發過程
    a.針對單表查詢,不用寫sql。列表,分頁,都不用寫。
    b.dao層的mapper只是一個空的接口,大部分業務不須要在mapper中寫任何代碼(除非複雜報表查詢),也不須要mapper的xml文件。
    c.baseService中有大量的泛型方法以供使用,單表單對象增刪改查在service層也不須要寫代碼,列表和分頁查詢也只須要一行代碼。
    d.提倡單表操做。不提倡使用複雜sql解決複雜的業務問題。
2.下降學習成本。新人快速上手,基礎知識過關的新人,能夠快速進入業務開發狀態。
3.經常使用組件集成。redis,mq,事件,mongodb等等
4.通用業務模型的實現。開箱即用的業務模型,能夠大大的縮減項目開發週期。計劃實現的通用業務模型有
  訂單系統,虛擬帳戶系統,支付網關,動態表單,報表系統,通用預定系統,優惠策略定製,
  基礎數據(驗證碼,字典,內部消息,地理位置信息,通用文件信息存儲,操做記錄與計數,)
5.集成經常使用第三方系統。短信(阿里大魚),存儲(七牛,阿里OSS),支付(微信公衆平臺,支付寶)

技術棧

1. SpringBoot 2.1.6.RELEASE
 2. MyBatis-Plus 3.x
 3. mybatis-spring-boot-starter 1.2.0
 5. Kaptcha 2.3.2
 6. jackson-databind 2.9.7
 7. springfox-swagger2 2.2.2
 8. HikariCP 2.7.9

項目結構

tyboot 
  ├─tyboot-api
  │  ├─tyboot-api-boot                示例項目,實現了數據字典,權限管理,其餘項目通用的基礎功能
  ├─tyboot-component------組件
  │  ├─tyboot-component-activemq------集成activemq
  │  ├─tyboot-component-amqp----------對spring的amqp簡單集成
  │  ├─tyboot-component-cache---------緩存,對redis的進一步實現和封裝,地理位置,管道,zset實現分頁查詢,分佈式鎖
  │  ├─tyboot-component-emq-----------集成mqtt服務 EMQ
  │  ├─tyboot-component-event---------利用spring的事件機制實現基於rest接口的事件處理機制
  │  ├─tyboot-component-mongo---------集成mongo
  │  ├─tyboot-component-opendata------集成經常使用第三方開放接口,七牛,阿里大魚,騰訊im,極光推送
  │  └─tyboot-component-validation----參數校驗
  ├─tyboot-core-----------核心包,通常狀況下實例項目都會引用到
  │  ├─tyboot-core-auth---------------用戶認證,session共享
  │  ├─tyboot-core-foundation---------經常使用工具類庫,線程內上下文封裝;Bean、File,列表轉樹結構,加密解密等等。。。。。
  │  ├─tyboot-core-rdbms--------------集成mybatis,mybatisplus,簡化orm和封裝servic通用操做
  │  └─tyboot-core-restful------------對restful風格的接口封裝,集成接口文檔,統一異常處理,請求攔截處理,返回數據封裝,上下文封裝
  └─tyboot-prototype------通用業務模型,針對特定業務場景進行封裝實現
      ├─tyboot-prototype-account------虛擬帳戶系統
      ├─tyboot-prototype-order--------通用訂單系統
      └─tyboot-prototype-trade--------簡單支付渠道實現,支付寶,微信

目錄約定:redis

示例:
tyboot-api-privilege----------------如下目錄爲項目約定目錄結構
  	    org.typroject.api.privilege.
  	                            controller-------接口目錄 
  	                            face.------------業務層
  	                                model--------vo
  	                                orm.---------數據操做
  	                                    dao------mapper接口目錄
  	                                    entity---po目錄
  	                                service------業務實現類

約定

ormspring

1.entity須要繼承BaseEntity
    對應的數據表不能缺乏通用字段
 
     SEQUENCE_NBR    bigint	20    物理主鍵
     REC_USER_ID    varchar	32    最後更新者的id
     REC_DATE    datetime        最後更新時間
     
2.使用了mybatisplus,因此實例項目中不須要引入mapper.xml,baseMapper的方法足夠使用。
  除非要進行復雜查詢,可自行引入xml文件 
3.一般狀況下dao層的mapper子接口只是一個空接口,除非要本身寫sql,或引入了xml,纔會在其中寫代碼。

servicesql

1.繼承baseService
public class LocationInfoService extends BaseService<LocationInfoModel,LocationInfo,LocationInfoMapper> 
  {}
2.service中的方法不要重載,由於會只根據方法名經過反射獲取方法實例。
3.service層只有實現類,拋棄了之前接口,以爲麻煩。
4.單表單對象的操做能夠不須要在service中寫方法,也不須要引入mapper,泛型方法足夠用,
  分頁查詢和列表查詢也只須要一行代碼,示例以下:
  • 分頁:
public Page<DictionarieModel> queryDictPage(Page page, String agencyCode ,
                                                       String buType,
                                                       String dictAlias,
                                                       @Condition(Operator.like) String dictName,
                                                       String dictCode) throws Exception
            {
                return this.queryForPage(page,"排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);
            }
做爲查詢條件的參數名稱須要和對應model中的屬性名稱一致。
      傳入baseService.queryForPage中的params參數列表須要和前置方法(queryDictPage)的參數順序一致,
      底層會自動解析前置方法參數名稱並對值判空,而後轉換爲數據庫字段名,用於構建條件組裝器。
      註解@Condition用於定義條件操做符,已實現的條件操做符詳見Operator,全部查詢條件的邏輯關係都是與關係
      目前還沒打算實現或關係。
  • 列表:(參數約定與分頁方法相同)
public List<DictionarieModel> queryDictList(String agencyCode ,
                                                     String buType,
                                                     String dictAlias,
                                                      @Condition(Operator.like)String dictName,
                                                     String dictCode) throws Exception
          {
              return this.queryForList("排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);
          }

controllermongodb

1.統一返回值,全部接口統一使用ResponseModel封裝返回值。
2.自定義註解@TycloudOperation用來定義接口的訪問級別ApiLevel,鑑權控制needAuth

關於緩存數據庫

1.單表單對象緩存,單表列表緩存都已經集成到baseService的方法中,能夠隨着對象的更新刷新或刪除緩存,能夠查看方法備註以選擇是使用。
2.其餘緩存場景建議直接使用rediTemplate進行操做
3.tyboot-component-cache模塊提供了基於redis Zset分頁查詢;地理位置計算和查詢;redis管道的使用

代碼生成器的使用api

1.使用mybatisplus提供的代碼生成器,詳見示例項目。

最佳實踐

1.將tyboot-core和tyboot-component中的組件包打包發佈到maven私服nexus中統一管理,
  而後各個實例項目引用後進行業務項目的開發,這樣實例項目的業務代碼會更加清晰,打包速度更快,能夠隨時升級所引用的tyboot版本。

後續計劃

1.完善基礎模塊
3.完善通用業務模型
4.集成web端
相關文章
相關標籤/搜索