Mybatis mysql模糊查询方式(CONCAT多个字段)及bug

 更新时间:2022年01月21日 09:40:32   作者:男人要霸气  
这篇文章主要介绍了Mybatis mysql模糊查询方式(CONCAT多个字段)及bug,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mybatis mysql模糊查询及bug

先看下如下xml

 SELECT
    t.id,
    t.mobile,
    t.account_name
  FROM
    t_account t
    WHERE
  	 1=1
    <if test="keyWord !=null and keyWord !=''">
        and CONCAT(t.id,t.mobile,t.account_name) like CONCAT('%',#{keyWord},'%')
    </if>

正常来说这样写没问题的但是如果你CONCAT的字段中有一个字段为null时,那这条数据将查询不到,说白了,只要有一个字段为null,就查不到数据了。

先看下以下数据。 

在这里插入图片描述

从上图可以发现,id为7的mobile为null的,接下来咱们测试下结果。

根据account_name模糊查询:查询柳岩是能查到数据的,如下图

在这里插入图片描述

查询张三是查询不到数据的,如下图

在这里插入图片描述

根据Id查id为7的也是查不到的,如下图

在这里插入图片描述

结论:CONCAT的字段中有任意一个字段为null时,那这条数据将查询不到

解决方案:一

改成用or连接

 SELECT
    t.id,
    t.mobile,
    t.account_name
  FROM
    t_account t
    WHERE
  	 1=1
    <if test="keyWord !=null and keyWord !=''">
        and CONCAT(t.id) like CONCAT('%',#{keyWord},'%')
        or CONCAT(t.mobile) like CONCAT('%',#{keyWord},'%')
        or CONCAT(t.account_name) like CONCAT('%',#{keyWord},'%')
    </if>

看下运行结果:查到张三这条数据了

在这里插入图片描述

解决方案:二

判null处理

 SELECT
    t.id,
    t.mobile,
    t.account_name
  FROM
    t_account t
    WHERE
  	 1=1
        and CONCAT( IFNULL(t.id,''),IFNULL(t.mobile,''),IFNULL(t.account_name,'') ) like CONCAT('%',#{keyWord},'%')

在这里插入图片描述

mybatis多个字段如何模糊查询一个值

使用oracle concat 函数拼接字符 再进行like 操作

<if test="searchContent!=null and searchContent!=''">
CONCAT(CONCAT(CONCAT(CONCAT(venderDesc,purcher),demandOrg),contactInfo),materialDesc) like#{searchContent}
</if>

mybatis 多个字段如何模糊查询一个值

注:venderDesc,purcher,demandOrg,contactInfo,materialDesc为表的字段,想要拼接哪个字段就拼哪个字段

有些作者说 CONCAT(venderDesc,purcherdemandOrg,demandOrg,contactInfo,materialDesc) 这样也能实现,但本人经测试这个是不行的,会报参数错误,可能是跟数据库的版本有关。

mybatis 多个字段如何模糊查询一个值

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

相关文章

  • java 打印一字符串,并在main()方法内调用它

    java 打印一字符串,并在main()方法内调用它

    编写一个方法(名字自定,但要符合Java编码规范),方法内打印一字符串,并在main()方法内调用它。
    2017-02-02
  • Java设计模式之依赖倒转原则精解

    Java设计模式之依赖倒转原则精解

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。本篇介绍设计模式七大原则之一的依赖倒转原则
    2022-02-02
  • Java中的转换流、压缩流、序列化流、打印流及应用场景

    Java中的转换流、压缩流、序列化流、打印流及应用场景

    这篇文章主要介绍了Java中的转换流、压缩流、序列化流、打印流及应用场景,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java 实战项目基于遗传算法学校排课系统的实现流程

    Java 实战项目基于遗传算法学校排课系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+Springboot+Maven+mybatis+Vue+Mysql实现一个基于遗传算法的学校排课系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 使用mtrace追踪JVM堆外内存泄露的方法

    使用mtrace追踪JVM堆外内存泄露的方法

    这篇文章主要给大家介绍了如何使用mtrace追踪JVM堆外内存泄露,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • idea 安装 Mybatis 开发帮助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    idea 安装 Mybatis 开发帮助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    MyBatisCodeHelper-Pro 插件可以帮助我们快速的开发 mybatis,这篇文章给大家介绍idea 安装 Mybatis 开发帮助插件 MyBatisCodeHelper-Pro 插件破解版的相关知识,感兴趣的朋友跟随小编一起看看吧
    2020-09-09
  • Java应用CPU使用率过高排查方式

    Java应用CPU使用率过高排查方式

    这篇文章主要介绍了Java应用CPU使用率过高排查方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Maven中的dependencyManagement 实例详解

    Maven中的dependencyManagement 实例详解

    dependencyManagement的中文意思就是依赖关系管理,它就是为了能通更好统一管理项目的版本号和各种jar版本号,可以更加方便升级,解决包冲突问题,这篇文章主要介绍了Maven中的dependencyManagement 实例详解,需要的朋友可以参考下
    2024-02-02
  • SpringBoot自定义启动器Starter流程详解

    SpringBoot自定义启动器Starter流程详解

    SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰
    2022-11-11
  • Java静态代理和动态代理详解

    Java静态代理和动态代理详解

    这篇文章主要介绍了Java静态代理和动态代理,本文通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-11-11

最新评论