而在具体的业务逻辑中 , 需要操作数据库时我们就可以很方便的使用这些自动生成的代码来进行操作 , 例如 , 我们需要在业务代码中执行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;
在如 代码中 , 我们需要通过自动代码生成的类指定表名 , 并以面向对象的语法方式组装查询条件后就可以完成查询操作了!这里只是简单介绍了两种通过JOOQ实现常见数据库操作的方法 , 更多的细节 , 大家可以参考JOOQ用户手册!
这样你会发现操作数据库更加方便快捷了 , 而且因为自动代码生成对开发者是透明的 , 所以整个工程的代码整洁度也提高了!PS:大家可以在自己的项目中试试JOOQ , 相信你一定不会后悔!
- 余承东|Web前端:为什么前端设计需要动画库?
- 项立刚|想让中芯“退市”?反对台积电在国内建厂后,项立刚又正式发声!
- 自媒体|为什么你做自媒体、短视频,做着做着就没有内容拍摄和剪辑了?
- iPhone|为什么苹果iPhone这么多瑕疵还有人去忍耐?四点原因很真实
- 产品经理|项目经理和产品经理哪个更有前途?
- 支付宝|为什么近期总有人说显卡暴跌?618买显卡究竟靠不靠谱?
- vivo x fold|深扒中科院“香山项目”,别被“某些人”骗了
- 华为|华为新机P50e为什么销量遇冷?行内人总结3个原因,包括溢价太高
- CPU|为什么懂行的用户都在等骁龙8 Plus而不是选天玑9000?原因望周知
- 高通骁龙|京东单方面宣布延迟发货之后,为什么网友们的怨气这么大?