mybatis-plus条件构造器的优雅写法

1.QueryWrapper基础使用

天真朴素的写法
        QueryWrapper 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()
    .eq(User::getNick, nick)
    .or(qw -> qw.like(User::getNick, nick)
        .eq(User::getState, state)
    )
);

而且可以轻松的做判断条件

return userMapper.selectList(new LambdaQueryWrapper()
    .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()));

你可能感兴趣的:(mybatis-plus条件构造器的优雅写法)