mysql中的concat()函数模糊查询代替${}问题

 更新时间:2023年08月31日 09:38:22   作者:taiguolaotu  
这篇文章主要介绍了mysql中的concat()函数模糊查询代替${}问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql concat()函数 模糊查询 代替${}

平常在写代码的时候,在写模糊查询的时候,一直都是使用 字段名 like ${}的方式,但是自从换了一家公司之后,发现分页进行模糊查询时使用了 concat函数,

下面我将sql语句复制过来,给大家参考一下 ,希望可以帮助到大家。

 <select id="countDeviceByKeyword" resultType="java.lang.Integer">
  		select count(*) from zz_device where isDel='0'
  		and (Device_Name like concat('%',#{keyword},'%')
  		OR Device_Alias LIKE concat('%',#{keyword},'%'))
  </select>

这里写的是sql语句,

下面把对应的dao层方法展现给大家

 int countDeviceByKeyword(String keyword);

mysql模糊查询的三种方式

Mybatis常用模糊查询方法

  • 直接使用 % 字符串拼接,如 ‘%’#{name}‘%’ 或 “%”#{name}“%”,单引号或双引号都可以。
  • 使用’%${name}%',会有SQL注入危险
  • 使用函数concat拼接concat(“%”,#{name},“%”)

1.使用concat(“%”,#{name},“%”)

UserMapper.xml文件:

 <select id="selectUsersByCondition" resultType="qin.com.entity.Users" parameterType="Users">
        select * from users
        <where>
            <if test="name != null and name != ''">
                <!--
                and name like concat(concat("%",#{name},"%"))
                ==>  Preparing: select * from users WHERE name like concat(concat("%",?,"%")) order by id desc
                -->
                and name like concat("%",#{name},"%")
            </if>
            <if test="sex != null and sex != ''">
                and sex = #{sex}
            </if>
            <if test="birthday != null and birthday != ''">
                and birthday = #{birthday}
            </if>
            <if test="createTime != null and createTime != ''">
                and createTime>=#{createTime}
            </if>
            <if test="updateTime != null and updateTime != ''">
                and updateTime &lt;= #{updateTime}
            </if>
        </where>
        order by id desc
    </select>

Test测试代码

@Test
    public void testSelectUsersByCondition() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UsersService usersService =(UsersService) applicationContext.getBean("usersService");
        Users users = new Users();
        users.setName("小");
        List<Users> list = usersService.selectUsersByCondition(users);
        list.forEach(users1 -> System.out.println("根据条件查询用户信息:"+users1));
    }

输出结果:

查询语句
==> Preparing: select * from users WHERE name like concat(“%”,?,“%”) order by id desc
==> Parameters: 小(String)

2.使用’%${name}%’

UserMapper.xml文件:

 <if test="name != null and name != ''">
	   <!--and name like '%${name}%'-->
	   and name like '%${name}%'
 </if>

输出结果:

==> Preparing: select * from users WHERE name like ‘%小%’ order by id desc
==> Parameters:

3.使用"%“#{name}”%"

<if test="name != null and name != ''">
   and name like "%"#{name}"%"
</if>

输出语句:

==> Preparing: select * from users WHERE name like “%”?“%” order by id desc
==> Parameters: 小(String)

心得

推荐使用第一和第三种方式

总结

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

相关文章

  • Mysql之服务的启动、停止、重启方式

    Mysql之服务的启动、停止、重启方式

    本文介绍了在终端操作命令以及处理隐藏文件夹的两种方法:一种是直接在终端输入命令启动、停止和重启;另一种是通过拖拽文件到终端并添加命令如start或stop,同时,介绍了如何通过命令显示隐藏的usr文件夹并重新启动Finder以访问
    2024-10-10
  • 详解Mysql之mysqlbackup备份与恢复实践

    详解Mysql之mysqlbackup备份与恢复实践

    这篇文章主要介绍了详解Mysql之mysqlbackup备份与恢复实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Linux服务上MySQL启动、重启和关闭的操作方法

    Linux服务上MySQL启动、重启和关闭的操作方法

    MySQL是一种广泛使用的开源关系型数据库管理系统,常用于各种规模的应用程序中,在Linux服务器上管理MySQL服务是一个基本的运维任务,本文将详细介绍如何在Linux系统上启动、重启和关闭MySQL服务,涵盖不同Linux发行版(如Ubuntu和CentOS)的操作方法
    2024-11-11
  • 详解MySQL高可用MMM搭建方案及架构原理

    详解MySQL高可用MMM搭建方案及架构原理

    本篇文章主要介绍搭建MMM方案以及MMM架构的原理。这里不介绍主从、主主的搭建方法,MMM方案不适用对数据一致性要求很高的业务。下面一起来学习学习。
    2016-08-08
  • 一条慢SQL语句引发的改造之路

    一条慢SQL语句引发的改造之路

    这篇文章主要给大家介绍了关于一条慢SQL语句引发的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • mysql中的不等于实例详解

    mysql中的不等于实例详解

    这篇文章主要介绍了mysql中的不等于实例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • linux下安装mysql及mysql.sock问题

    linux下安装mysql及mysql.sock问题

    最近在linux上装mysql时遇到一些棘手的问题,百思不得其解,下面小编给大家带来了linux下安装mysql及mysql.sock问题,感兴趣的朋友一起看看吧
    2018-03-03
  • 一次Mysql死锁排查过程的全纪录

    一次Mysql死锁排查过程的全纪录

    在测试环境测试给用户并发发送卡券时,出现了死锁,通过查找相关的资料解决了这个,所以想着总结出来,所以下面这篇文章主要是关于一次Mysql死锁排查过程的全纪录,需要的朋友可以参考下,希望大家从中能有所帮助。
    2017-02-02
  • MySQL中count(*)深度解析与性能优化实践案例

    MySQL中count(*)深度解析与性能优化实践案例

    这篇文章给大家介绍MySQL中count(*)深度解析与性能优化实践,本文将结合实际测试案例,从原理到实践,带你彻底搞懂count(*),并分享3种高效优化count()性能的方案,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • MySQL 8.0 驱动与阿里druid版本兼容问题解决

    MySQL 8.0 驱动与阿里druid版本兼容问题解决

    MySQL 8.0 驱动与阿里druid版本不兼容会导致有报错问题,本文就详细的介绍一下解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2021-07-07

最新评论