1.QueryWrapper基礎(chǔ)使用
天真樸素的寫法
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的,但是從內(nèi)存角度考慮有鹿,每個entity有大量的String字段旭旭,造成了資源的浪費,而且無法在編譯階段就發(fā)現(xiàn)錯誤葱跋。不建議使用
2.LambdaQueryWrapper的使用
融入java8的方法引用和Lambda表達(dá)式持寄,可以輕松的完成復(fù)雜條件拼接;
于是
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.高級復(fù)雜sql的拼寫
如果是關(guān)聯(lián)查詢年局,建議使用xml的形式际看,但是只是針對一張表的復(fù)雜邏輯查詢,舉例
針對一個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()));