tyboot基于 Spring Boot 的快速開發(fā)腳手架
tyboot
介紹
tyboot是一個基于springboot的服務(wù)端腳手架,面向單體服務(wù)快速開發(fā),需要微服務(wù)方案的可以看另一個項目tycloud(還在完善中)
特點
1.簡化基礎(chǔ)業(yè)務(wù)開發(fā)過程
a.針對單表查詢,不用寫sql。列表,分頁,都不用寫。
b.dao層的mapper只是一個空的接口,大部分業(yè)務(wù)不需要在mapper中寫任何代碼(除非復(fù)雜報表查詢),也不需要mapper的xml文件。
c.baseService中有大量的泛型方法以供使用,單表單對象增刪改查在service層也不需要寫代碼,列表和分頁查詢也只需要一行代碼。
d.提倡單表操作。不提倡使用復(fù)雜sql解決復(fù)雜的業(yè)務(wù)問題。
2.降低學(xué)習(xí)成本。新人快速上手,基礎(chǔ)知識過關(guān)的新人,可以快速進入業(yè)務(wù)開發(fā)狀態(tài)。
3.常用組件集成。redis,mq,事件,mongodb等等
4.通用業(yè)務(wù)模型的實現(xiàn)。開箱即用的業(yè)務(wù)模型,可以大大的縮減項目開發(fā)周期。計劃實現(xiàn)的通用業(yè)務(wù)模型有
訂單系統(tǒng),虛擬賬戶系統(tǒng),支付網(wǎng)關(guān),動態(tài)表單,報表系統(tǒng),通用預(yù)約系統(tǒng),優(yōu)惠策略定制,
基礎(chǔ)數(shù)據(jù)(驗證碼,字典,內(nèi)部消息,地理位置信息,通用文件信息存儲,操作記錄與計數(shù),)
5.集成常用第三方系統(tǒng)。短信(阿里大魚),存儲(七牛,阿里OSS),支付(微信公眾平臺,支付寶)
技術(shù)棧
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
項目結(jié)構(gòu)
tyboot
├─tyboot-api
│ ├─tyboot-api-boot 示例項目,實現(xiàn)了數(shù)據(jù)字典,權(quán)限管理,其他項目通用的基礎(chǔ)功能
├─tyboot-component------組件
│ ├─tyboot-component-activemq------集成activemq
│ ├─tyboot-component-amqp----------對spring的amqp簡單集成
│ ├─tyboot-component-cache---------緩存,對redis的進一步實現(xiàn)和封裝,地理位置,管道,zset實現(xiàn)分頁查詢,分布式鎖
│ ├─tyboot-component-emq-----------集成mqtt服務(wù) EMQ
│ ├─tyboot-component-event---------利用spring的事件機制實現(xiàn)基于rest接口的事件處理機制
│ ├─tyboot-component-mongo---------集成mongo
│ ├─tyboot-component-opendata------集成常用第三方開放接口,七牛,阿里大魚,騰訊im,極光推送
│ └─tyboot-component-validation----參數(shù)校驗
├─tyboot-core-----------核心包,一般情況下實例項目都會引用到
│ ├─tyboot-core-auth---------------用戶認證,session共享
│ ├─tyboot-core-foundation---------常用工具類庫,線程內(nèi)上下文封裝;Bean、File,列表轉(zhuǎn)樹結(jié)構(gòu),加密解密等等。。。。。
│ ├─tyboot-core-rdbms--------------集成mybatis,mybatisplus,簡化orm和封裝servic通用操作
│ └─tyboot-core-restful------------對restful風(fēng)格的接口封裝,集成接口文檔,統(tǒng)一異常處理,請求攔截處理,返回數(shù)據(jù)封裝,上下文封裝
└─tyboot-prototype------通用業(yè)務(wù)模型,針對特定業(yè)務(wù)場景進行封裝實現(xiàn)
├─tyboot-prototype-account------虛擬賬戶系統(tǒng)
├─tyboot-prototype-order--------通用訂單系統(tǒng)
└─tyboot-prototype-trade--------簡單支付渠道實現(xiàn),支付寶,微信
目錄約定:
示例: tyboot-api-privilege----------------以下目錄為項目約定目錄結(jié)構(gòu) org.typroject.api.privilege. controller-------接口目錄 face.------------業(yè)務(wù)層 model--------vo orm.---------數(shù)據(jù)操作 dao------mapper接口目錄 entity---po目錄 service------業(yè)務(wù)實現(xiàn)類
約定
orm
1.entity需要繼承BaseEntity
對應(yīng)的數(shù)據(jù)表不能缺少通用字段
SEQUENCE_NBR bigint 20 物理主鍵
REC_USER_ID varchar 32 最后更新者的id
REC_DATE datetime 最后更新時間
2.使用了mybatisplus,所以實例項目中不需要引入mapper.xml,baseMapper的方法足夠使用。
除非要進行復(fù)雜查詢,可自行引入xml文件
3.通常情況下dao層的mapper子接口只是一個空接口,除非要自己寫sql,或引入了xml,才會在其中寫代碼。
service
1.繼承baseService
public class LocationInfoService extends BaseService<LocationInfoModel,LocationInfo,LocationInfoMapper>
{}
2.service中的方法不要重載,因為會只根據(jù)方法名通過反射獲取方法實例。 3.service層只有實現(xiàn)類,拋棄了以前接口,覺得麻煩。 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);
}
作為查詢條件的參數(shù)名稱需要和對應(yīng)model中的屬性名稱一致。
傳入baseService.queryForPage中的params參數(shù)列表需要和前置方法(queryDictPage)的參數(shù)順序一致,
底層會自動解析前置方法參數(shù)名稱并對值判空,然后轉(zhuǎn)換為數(shù)據(jù)庫字段名,用于構(gòu)建條件組裝器。
注解@Condition用于定義條件操作符,已實現(xiàn)的條件操作符詳見Operator,所有查詢條件的邏輯關(guān)系都是與關(guān)系
目前還沒打算實現(xiàn)或關(guān)系。
-
列表:(參數(shù)約定與分頁方法相同)
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.統(tǒng)一返回值,所有接口統(tǒng)一使用ResponseModel封裝返回值。 2.自定義注解@TycloudOperation用來定義接口的訪問級別ApiLevel,鑒權(quán)控制needAuth
關(guān)于緩存
1.單表單對象緩存,單表列表緩存都已經(jīng)集成到baseService的方法中,可以隨著對象的更新刷新或刪除緩存,可以查看方法備注以選擇是使用。 2.其他緩存場景建議直接使用rediTemplate進行操作 3.tyboot-component-cache模塊提供了基于redis Zset分頁查詢;地理位置計算和查詢;redis管道的使用
代碼生成器的使用
1.使用mybatisplus提供的代碼生成器,詳見示例項目。
最佳實踐
1.將tyboot-core和tyboot-component中的組件包打包發(fā)布到maven私服nexus中統(tǒng)一管理, 然后各個實例項目引用后進行業(yè)務(wù)項目的開發(fā),這樣實例項目的業(yè)務(wù)代碼會更加清晰,打包速度更快,可以隨時升級所引用的tyboot版本。
后續(xù)計劃
1.完善基礎(chǔ)模塊 3.完善通用業(yè)務(wù)模型 4.集成web端
評論
圖片
表情
