189 8069 5689

java中ORM框架JOOQ的示例分析

这篇文章主要介绍java中ORM框架JOOQ的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

成都创新互联公司长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为正蓝企业提供专业的成都网站设计、成都网站制作,正蓝网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

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依赖包,如下:


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

因为JOOQ对Spring Boot有很好的支持,所以我们只需要引入相应的starter依赖即可,而具体的版本则是与Spring Boot的版本关联的,这里并不需要我们去指定。

其次,我们需要在项目中配置JOOQ的代码生成插件,这样JOOQ就可以自动在项目编译的时候为我们生成所需要的数据库以来对象了,在项目的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目录下根据数据库中的表结构生成相应的数据库操作对象,而这个过程则完成对开发人员透明,我们并不需要做额外的事情。

而在具体的业务逻辑中,需要操作数据库时我们就可以很方便的使用这些自动生成的代码来进行操作,例如,我们需要在业务代码中执行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 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的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享题目:java中ORM框架JOOQ的示例分析
文章链接:http://cdxtjz.com/article/pddjde.html

其他资讯