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--------簡單支付渠道實現,支付寶,微信
目錄約定:
示例: tyboot-api-privilege----------------以下目錄為項目約定目錄結構 org.typroject.api.privilege. controller-------介面目錄 face.------------業務層 model--------vo orm.---------數據操作 dao------mapper介面目錄 entity---po目錄 service------業務實現類
orm
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,才會在其中寫代碼。
service
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); }
controller
1.統一返回值,所有介面統一使用ResponseModel封裝返回值。 2.自定義註解@TycloudOperation用來定義介面的訪問級別ApiLevel,鑒權控制needAuth
關於緩存
1.單表單對象緩存,單表列表緩存都已經集成到baseService的方法中,可以隨著對象的更新刷新或刪除緩存,可以查看方法備註以選擇是使用。 2.其他緩存場景建議直接使用rediTemplate進行操作 3.tyboot-component-cache模塊提供了基於redis Zset分頁查詢;地理位置計算和查詢;redis管道的使用
代碼生成器的使用
1.使用mybatisplus提供的代碼生成器,詳見示例項目。
1.將tyboot-core和tyboot-component中的組件包打包發布到maven私服nexus中統一管理, 然後各個實例項目引用後進行業務項目的開發,這樣實例項目的業務代碼會更加清晰,打包速度更快,可以隨時升級所引用的tyboot版本。
1.完善基礎模塊 3.完善通用業務模型 4.集成web端
[admin
]