這篇文章主要介紹java中ORM框架JOOQ的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為正藍企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,正藍網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
JOOQ簡介
JOOQ是基于Java訪問關(guān)系型數(shù)據(jù)庫的工具包,它具有輕量、簡單、并且足夠靈活的特點,通過JOOQ我們可以輕松的使用Java面向?qū)ο蟮恼Z法來實現(xiàn)各種復雜的SQL。相比于傳統(tǒng)ORM框架,如Hibernate、Mybatis來說,JOOQ汲取了即汲取了它們操作數(shù)據(jù)的簡單性和安全性、同時也保留了原生SQL的靈活性,從某種程度上說JOOQ更像是介于ORM和JDBC的中間層。
JOOQ目前在國內(nèi)相對來說還比較小眾,對于大部分從SSH或者SSM成長起來的碼農(nóng)朋友們來說,心里估計會質(zhì)疑“這玩意用的這么少,到底靠不靠譜?”。在這里碼農(nóng)哥可以很負責任的說JOOQ是靠譜的!因為碼農(nóng)哥已經(jīng)在好幾個生產(chǎn)項目上實踐過了,而且是在比較核心的支付系統(tǒng)上完全使用了JOOQ來替代Mybatis作為持久層框架,并且這個支付系統(tǒng)的并發(fā)量也是非常高的,所以JOOQ框架本身是能夠經(jīng)受住真實業(yè)務(wù)場景的考驗的!
SpringBoot項目集成JOOQ
接下來我們就來一起看看,如何在SpringBoot的項目中集成和使用JOOQ吧!首先,我們在項目中引入JOOQ的stater依賴包,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency>
因為JOOQ對Spring Boot有很好的支持,所以我們只需要引入相應(yīng)的starter依賴即可,而具體的版本則是與Spring Boot的版本關(guān)聯(lián)的,這里并不需要我們?nèi)ブ付ā?/p>
其次,我們需要在項目中配置JOOQ的代碼生成插件,這樣JOOQ就可以自動在項目編譯的時候為我們生成所需要的數(shù)據(jù)庫以來對象了,在項目的pom.xml中配置Maven插件,如下:
<plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <executions> <execution> <id>default</id> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> <configuration> <jdbc> <driver>com.MySQL.jdbc.Driver</driver> <url>jdbc:mysql://127.0.0.1:3306</url> <user>root</user> <password><![CDATA[123456]]></password> </jdbc> <generator> <name>org.jooq.util.DefaultGenerator</name> <generate> <instanceFields>true</instanceFields> <pojos>true</pojos> <daos>true</daos> </generate> <database> <inputSchema>jets</inputSchema> <name>org.jooq.util.mysql.MySQLDatabase</name> <includes>.*</includes> <excludes>schema_version</excludes> </database> <target> <packageName>${app.package}</packageName> <directory>target/generated-sources/jooq</directory> </target> </generator> </configuration> </execution> </executions> </plugin>
配置完成這個Maven插件后,基本上JOOQ就算差不多與SpringBoot集成完成了,如果此時編譯項目JOOQ代碼插件就會在target/generated-sources/jooq目錄下根據(jù)數(shù)據(jù)庫中的表結(jié)構(gòu)生成相應(yīng)的數(shù)據(jù)庫操作對象,而這個過程則完成對開發(fā)人員透明,我們并不需要做額外的事情。
而在具體的業(yè)務(wù)邏輯中,需要操作數(shù)據(jù)庫時我們就可以很方便的使用這些自動生成的代碼來進行操作,例如,我們需要在業(yè)務(wù)代碼中執(zhí)行insert操作,代碼如下:
@Slf4j @Service public class OpenServiceImpl implements OpenService { @Autowired protected DSLContext dslContext; @Override public BalanceChargeTradeResVo balanceChargeTrade(BalanceChargeTradeReqVo balanceChargeTradeReqVo) throws VerifyDataException, BalanceCreateOrderException { BalanceChargeTradeResVo balanceChargeTradeResVo; try { WalletUserBalanceOrderRecord walletUserBalanceOrderRecord = createBalanceChargeOrder( balanceChargeTradeReqVo); dslContext.executeInsert(walletUserBalanceOrderRecord); balanceChargeTradeResVo = BalanceChargeTradeResVo.builder().userId(balanceChargeTradeReqVo.getUserId()) .amount(balanceChargeTradeReqVo.getAmount()).currency(balanceChargeTradeReqVo.getCurrency()) .orderId(walletUserBalanceOrderRecord.getOrderId()).businessType(BusinessType.TOP_UP.getCode()) .build(); return balanceChargeTradeResVo; } catch (Exception e) { throw new BalanceCreateOrderException(ErrorCode.BALANCE_CHARGE_ORDER_ERROR.getCode(), ErrorCode.BALANCE_CHARGE_ORDER_ERROR.getDesc()); } }
在以上代碼中,我們只需要在service業(yè)務(wù)類中注入DSLContext對象,并在組裝完自動生成的數(shù)據(jù)庫類的對象后執(zhí)行executeInsert方法就可以完成insert操作了。而如果我們要完成查詢操作,也可以很簡單的實現(xiàn),代碼如下:
@Slf4j @Service public class OpenServiceImpl implements OpenService { @Autowired protected DSLContext dslContext; @Override public BalanceQueryResVo balanceQuery(long userId) throws AccountNoExistException { List<WalletUserBalanceRecord> walletUserBalanceRecordList = dslContext .selectFrom(WalletUserBalance.WALLET_USER_BALANCE) .where(WalletUserBalance.WALLET_USER_BALANCE.USER_ID .eq(String.valueOf(userId))).fetchInto(WalletUserBalanceRecord.class); if (walletUserBalanceRecordList == null || walletUserBalanceRecordList.size() <= 0) { throw new AccountNoExistException(ErrorCode.ACCOUNT_NO_EXIST_ERROR.getCode(), ErrorCode.ACCOUNT_NO_EXIST_ERROR.getDesc()); } Optional<WalletUserBalanceRecord> walletUserBalanceRecord = walletUserBalanceRecordList.stream() .filter(o -> o.getAccType().equals(String.valueOf(AccType.CASH_ACCOUNT.getCode()))).findFirst(); BalanceQueryResVo balanceQueryResVo = BalanceQueryResVo.builder().userId(userId) .balance(walletUserBalanceRecordList.stream().mapToInt(o -> o.getBalance().intValue()).sum()) .currency(walletUserBalanceRecord.get().getCurrency()).build(); return balanceQueryResVo; }
以上是“java中ORM框架JOOQ的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標題:java中ORM框架JOOQ的示例分析
分享鏈接:http://vcdvsql.cn/article14/pddjde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、、小程序開發(fā)、App開發(fā)、微信公眾號、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)