91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中ORM框架JOOQ的示例分析

發布時間:2021-07-24 09:44:23 來源:億速云 閱讀:145 作者:小新 欄目:編程語言

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

JOOQ簡介

JOOQ是基于Java訪問關系型數據庫的工具包,它具有輕量、簡單、并且足夠靈活的特點,通過JOOQ我們可以輕松的使用Java面向對象的語法來實現各種復雜的SQL。相比于傳統ORM框架,如Hibernate、Mybatis來說,JOOQ汲取了即汲取了它們操作數據的簡單性和安全性、同時也保留了原生SQL的靈活性,從某種程度上說JOOQ更像是介于ORM和JDBC的中間層。

JOOQ目前在國內相對來說還比較小眾,對于大部分從SSH或者SSM成長起來的碼農朋友們來說,心里估計會質疑“這玩意用的這么少,到底靠不靠譜?”。在這里碼農哥可以很負責任的說JOOQ是靠譜的!因為碼農哥已經在好幾個生產項目上實踐過了,而且是在比較核心的支付系統上完全使用了JOOQ來替代Mybatis作為持久層框架,并且這個支付系統的并發量也是非常高的,所以JOOQ框架本身是能夠經受住真實業務場景的考驗的!

SpringBoot項目集成JOOQ

接下來我們就來一起看看,如何在SpringBoot的項目中集成和使用JOOQ吧!首先,我們在項目中引入JOOQ的stater依賴包,如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>

因為JOOQ對Spring Boot有很好的支持,所以我們只需要引入相應的starter依賴即可,而具體的版本則是與Spring Boot的版本關聯的,這里并不需要我們去指定。

其次,我們需要在項目中配置JOOQ的代碼生成插件,這樣JOOQ就可以自動在項目編譯的時候為我們生成所需要的數據庫以來對象了,在項目的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目錄下根據數據庫中的表結構生成相應的數據庫操作對象,而這個過程則完成對開發人員透明,我們并不需要做額外的事情。

而在具體的業務邏輯中,需要操作數據庫時我們就可以很方便的使用這些自動生成的代碼來進行操作,例如,我們需要在業務代碼中執行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業務類中注入DSLContext對象,并在組裝完自動生成的數據庫類的對象后執行executeInsert方法就可以完成insert操作了。而如果我們要完成查詢操作,也可以很簡單的實現,代碼如下:

@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的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

思茅市| 壤塘县| 昌邑市| 周宁县| 樟树市| 乌拉特后旗| 乌拉特中旗| 平顺县| 衡东县| 大丰市| 河北区| 札达县| 宁国市| 鹤庆县| 唐山市| 姚安县| 任丘市| 阳信县| 陕西省| 抚顺县| 通城县| 会昌县| 闽清县| 怀远县| 七台河市| 开封县| 仪征市| 万年县| 绥化市| 四子王旗| 盱眙县| 磴口县| 高台县| 那曲县| 修武县| 葫芦岛市| 阜康市| 鹤峰县| 九江县| 东乌| 博爱县|