mybatis plus in使用时传数组、集合的注意点说明

 更新时间:2023年11月20日 16:19:22   作者:勤快的小蚂蚁  
这篇文章主要介绍了mybatis plus in使用时传数组、集合的注意点说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

大家用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

执行结果

==>  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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IDEA怎么设置maven配置

    IDEA怎么设置maven配置

    这篇文章主要介绍了IDEA怎么设置maven配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Spring Boot Admin实践详解

    Spring Boot Admin实践详解

    在本篇文章里小编给大家整理了关于Spring Boot Admin实践的相关知识点,有需要的朋友们可以学习下。
    2019-12-12
  • Java 位运算符>>与>>>区别案例详解

    Java 位运算符>>与>>>区别案例详解

    这篇文章主要介绍了Java 位运算符>>与>>>区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java 获取上一个月的月份的正确写法

    Java 获取上一个月的月份的正确写法

    这篇文章主要介绍了java获取上一个月月份,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java如何实现实体类转Map、Map转实体类

    Java如何实现实体类转Map、Map转实体类

    这篇文章主要介绍了Java 实现实体类转Map、Map转实体类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • springboot项目获取请求头当中的token的方法

    springboot项目获取请求头当中的token的方法

    本文主要介绍了springboot项目获取请求头当中的token的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 详解Spring中的@Scope注解

    详解Spring中的@Scope注解

    这篇文章主要介绍了详解Spring中的@Scope注解,@Scope注解是Spring IOC容器中的一个作用域,在Spring IOC容器中,他用来配置Bean实例的作用域对象,需要的朋友可以参考下
    2023-07-07
  • 分析mybatis运行原理

    分析mybatis运行原理

    Mybatis是一个优秀的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注sql本身。我们原来使用JDBC操作数据库,需要手动的写代码去注册驱动、获取connection、获取statement等等,现在Mybaits帮助我们把这些事情做了,我们只需要关注我们的业务sql即可
    2021-06-06
  • Maven Plugins报错的解决方法

    Maven Plugins报错的解决方法

    本文主要介绍了Maven Plugins报错的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Java动态代理分析及理解

    Java动态代理分析及理解

    这篇文章主要介绍了Java动态代理分析及理解的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论