1.QueryWrapper基础使用
天真朴素的写法
QueryWrapper<InvoiceInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(InvoiceInfo.TRANSFER_TRANS_STATUS,TransferTransStatusEnums.SUCCESS_TRANSFER.getCode());
queryWrapper.eq(InvoiceInfo.CORE_ID,coreEnterprise.getCoreId());
queryWrapper.select(InvoiceInfo.PAY_AMT);
其中
public static final String TRANSFER_TRANS_STATUS = "transfer_status";
这样写,从语法讲是ok的,但是从内存角度考虑,每个entity有大量的String字段,造成了资源的浪费,而且无法在编译阶段就发现错误。不建议使用
2.LambdaQueryWrapper的使用
融入java8的方法引用和Lambda表达式,可以轻松的完成复杂条件拼接;
于是
return userMapper.selectList(new LambdaQueryWrapper<User>()
.eq(User::getNick, nick)
.or(qw -> qw.like(User::getNick, nick)
.eq(User::getState, state)
)
);
而且可以轻松的做判断条件
return userMapper.selectList(new LambdaQueryWrapper<User>()
.like(StringUtils.isNotBlank(nick), User::getNick, nick)
.eq(state != null, User::getState, state)
);
3.高级复杂sql的拼写
如果是关联查询,建议使用xml的形式,但是只是针对一张表的复杂逻辑查询,举例
针对一个and条件的查询,使用and查询,如果是或的条件使用or
queryWrapper.lambda().and(wrapper->wrapper.ge(ApplyCredit::getStatus,ApplyCreditStatusEnum.SUPPLIER_UN_COMMIT.getCode()).eq(ApplyCredit::getSourceType,CreditAppSrcTypeEnums.SUPP.getCode()).or().eq(ApplyCredit::getSourceType, CreditAppSrcTypeEnums.BANK.getCode()).eq(ApplyCredit::getStatus,ApplyCreditStatusEnum.IN_FORCE.getCode()));