真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中ORM框架JOOQ的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹java中ORM框架JOOQ的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供達州主機托管 四川大帶寬租用 成都機柜租用 成都服務(wù)器租用。

JOOQ簡介

JOOQ是基于Java訪問關(guān)系型數(shù)據(jù)庫的工具包,它具有輕量、簡單、并且足夠靈活的特點,通過JOOQ我們可以輕松的使用Java面向?qū)ο蟮恼Z法來實現(xiàn)各種復(fù)雜的SQL。相比于傳統(tǒng)ORM框架,如Hibernate、Mybatis來說,JOOQ汲取了即汲取了它們操作數(shù)據(jù)的簡單性和安全性、同時也保留了原生SQL的靈活性,從某種程度上說JOOQ更像是介于ORM和JDBC的中間層。

JOOQ目前在國內(nèi)相對來說還比較小眾,對于大部分從SSH或者SSM成長起來的碼農(nóng)朋友們來說,心里估計會質(zhì)疑“這玩意用的這么少,到底靠不靠譜?”。在這里碼農(nóng)哥可以很負責(zé)任的說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依賴包,如下:


  org.springframework.boot
  spring-boot-starter-jooq

因為JOOQ對Spring Boot有很好的支持,所以我們只需要引入相應(yīng)的starter依賴即可,而具體的版本則是與Spring Boot的版本關(guān)聯(lián)的,這里并不需要我們?nèi)ブ付ā?/p>

其次,我們需要在項目中配置JOOQ的代碼生成插件,這樣JOOQ就可以自動在項目編譯的時候為我們生成所需要的數(shù)據(jù)庫以來對象了,在項目的pom.xml中配置Maven插件,如下:


org.jooq
jooq-codegen-maven

  
    default
    generate-sources
    
      generate
    
    
      
        com.mysql.jdbc.Driver
        jdbc:mysql://127.0.0.1:3306
        root
        
      
      
        org.jooq.util.DefaultGenerator
        
          true
          true
          true
        
        
          jets
          org.jooq.util.mysql.MySQLDatabase
          .*
          schema_version
        
        
          ${app.package}
          target/generated-sources/jooq
        
      
    
  

配置完成這個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 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 = 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)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享文章:java中ORM框架JOOQ的示例分析-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/dpeooj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部