本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
大家用mybatis plus时,肯定会用到in。 in在传多个值的时候,有1个坑。
复现
1、postman 给 传入了
{
"signContractStatus":"0,1"
}
2、代码in传入了一个三目表达式 StringUtils.isNotBlank(signContractStatus)?signContractStatusArray:0
其中的signContractStatusArray的定义如下
String[] signContractStatusArray = new String[3];
3、通过分隔函数把变成字符串数组signContractStatusArray传入in
.in(StringUtils.isNotBlank(signContractStatus), TCustomerSignRecordEntity::getSignContractStatus,StringUtils.isNotBlank(signContractStatus)?signContractStatusArray:0)
执行结果
==> Preparing: SELECT COUNT(*) AS total FROM t_customer_sign_record WHERE (oa_id = ? AND sign_contract_status IN (?))
==> Parameters: lvying(String), [Ljava.lang.String;@3b6b4d6(String[])
<== Columns: total
<== Row: 0
<== Total: 0
可以看到 传入的参数 ,在数据库中是应该有数据返回的,结果没有返回,说明问题出在这里。
纠正
不要传上面的传模棱两可的参数(如三目运算符),这样jvm会给你意想不到的结果,直接传serviceRelationArray即可。
.in(StringUtils.isNotBlank(serviceRelation), TCustomerSignRecordEntity::getServiceRelation, serviceRelationArray)
正确执行结果
==> Preparing: SELECT COUNT(*) AS total FROM t_customer_sign_record WHERE (oa_id = ? AND sign_contract_status IN (?, ?))
==> Parameters: lvying(String), 0(String), 1(String)
<== Columns: total
<== Row: 13
<== Total: 1
这样就能得到我们想要的Parameters了,大功告成!!!
总结in的使用
正确姿势一(List集合):
List ids = Arrays.asList(122L,23L);
new QueryWrapper().lambda().in(Driver::getServiceId,ids);
正确姿势二(数组对象):
Long[] ids={1305679009380433922,1305679009380433922};
LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda().in(Driver::getServiceId,ids);
正确姿势三(离散值):
new QueryWrapper().lambda()
.in(Driver::getServiceId,1305679009380433922,1305679009380433922);
错误姿势一(模棱两可的三目表达式):
.in(StringUtils.isNotBlank(vo.getOrderNumList()),ScbgOrder::getOrderNo,
StringUtils.isNotBlank(vo.getOrderNumList())? vo.getOrderNumList().split(",") : "")
错误姿势二(直接传逗号分隔字符串): 这种也会有出现
.in(StringUtils.isNotBlank(vo.getOrderNumList()),ScbgOrder::getOrderNo,"123,4566");
也会出现意想不到的Parameters。
==> Preparing: SELECT * FROM emax_scbg_order WHERE order_no IN (?)
==> Parameters: 1,3(String)
<== Total: 0
感谢
感谢他们的博客提供的帮助 blog.csdn.net/weixin_3957…