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