Spring Mybatis Mapper模糊查询的几种方法

 更新时间:2024年03月04日 11:55:15   作者:Mega Qi  
在Spring结合Mybatis进行开发时,实现模糊查询是一个常见需求,在Mybatis中,LIKE查询可以通过多种方式实现,本文给大家介绍了Spring Mybatis Mapper模糊查询的几种方法,需要的朋友可以参考下

在Spring结合Mybatis进行开发时,实现模糊查询是一个常见需求。在Mybatis中,LIKE查询可以通过多种方式实现,这取决于你的查询参数如何传递给Mybatis的SQL映射器。以下是实现模糊查询的几种常见方法:

1. 在Mapper接口中直接使用#{}进行拼接

这种方法直接在Mapper的XML文件中使用LIKE关键字,然后通过#{}传递参数,你可以在传递参数之前,在Java代码中拼接好模糊查询所需的百分比符号(%)。

Mapper接口XML示例:

<select id="findByName" resultType="com.example.YourModel">
  SELECT * FROM your_table
  WHERE name LIKE #{name}
</select>

Java代码中调用:

// 假设有一个Mapper接口方法叫findByName
List<YourModel> results = yourMapper.findByName("%" + name + "%");

2. 在XML中使用CONCAT函数

如果你不想在Java代码中拼接字符串,你可以在XML映射文件中使用SQL的CONCAT函数来拼接百分比符号和参数。

Mapper接口XML示例:

<select id="findByName" resultType="com.example.YourModel">
  SELECT * FROM your_table
  WHERE name LIKE CONCAT('%', #{name}, '%')
</select>

3. 使用<bind>标签

Mybatis提供了<bind>标签,允许你在XML文件中创建一个变量,用于拼接字符串或执行其他逻辑操作。这样可以在不修改Java代码的情况下实现字符串的拼接。

Mapper接口XML示例:

<select id="findByName" resultType="com.example.YourModel">
  <bind name="pattern" value="'%' + name + '%'" />
  SELECT * FROM your_table
  WHERE name LIKE #{pattern}
</select>

4. 使用${}进行拼接(不推荐)

虽然可以使用${}进行字符串拼接以实现LIKE查询,但这种方法容易导致SQL注入攻击,因此不推荐使用。

Mapper接口XML示例(不推荐):

<select id="findByName" resultType="com.example.YourModel">
  SELECT * FROM your_table
  WHERE name LIKE '%${name}%'
</select>

5. 使用MyBatis的动态SQL choose、when、otherwise

虽然不是专门用于LIKE查询,但choosewhenotherwise标签可以用于构建复杂的查询逻辑,包括根据条件选择是否执行模糊查询。

Mapper接口XML示例:

<select id="findByNameOrEmail" resultType="com.example.YourModel">
  SELECT * FROM your_table
  <where>
    <choose>
      <when test="name != null">
        name LIKE CONCAT('%', #{name}, '%')
      </when>
      <when test="email != null">
        email LIKE CONCAT('%', #{email}, '%')
      </when>
      <otherwise>
        1=1
      </otherwise>
    </choose>
  </where>
</select>

另外还有在调用层代码一些处理方式

6. 在Java代码中拼接模糊查询的条件

你也可以在调用Mapper接口的方法之前,就已经将参数值处理成模糊查询所需的格式。

public interface YourMapper {
    List<YourModel> findByName(@Param("name") String name);
}

// 调用Mapper的地方
String searchName = "%" + name + "%";
List<YourModel> result = yourMapper.findByName(searchName);

7. 使用@Select注解进行模糊查询

在使用Mybatis Spring时,可以直接在Mapper接口的方法上使用@Select注解来定义SQL语句,从而实现模糊查询。

public interface YourMapper {
    @Select("SELECT * FROM your_table WHERE name LIKE CONCAT('%', #{name}, '%')")
    List<YourModel> findByName(@Param("name") String name);
}

以上是实现Mybatis中LIKE模糊查询的一些常见方法。选择合适的方法取决于具体的应用场景和个人偏好。在实际使用中,要注意防止SQL注入的风险,尤其是在直接拼接字符串构造查询条件时。

到此这篇关于Spring Mybatis Mapper模糊查询的几种方法的文章就介绍到这了,更多相关Spring Mybatis Mapper模糊查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot拦截器Filter的使用方法详解

    SpringBoot拦截器Filter的使用方法详解

    这篇文章主要介绍了SpringBoot拦截器Filter的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring Boot 实现配置文件加解密原理

    Spring Boot 实现配置文件加解密原理

    这篇文章主要介绍了Spring Boot 实现配置文件加解密原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java实现动态数组

    java实现动态数组

    这篇文章主要为大家详细介绍了java实现动态数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot实现热部署详解

    SpringBoot实现热部署详解

    SpringBoot热部署是一种开发时极为有用的功能,它能够让开发人员在代码修改后无需手动重启应用程序就能立即看到变化的效果,所以我本文就给打击介绍一下为什么要使用热部署以及实现热部署的方式,需要的朋友可以参考下
    2023-07-07
  • SpringBoot使用Maven打包异常-引入外部jar的问题及解决方案

    SpringBoot使用Maven打包异常-引入外部jar的问题及解决方案

    这篇文章主要介绍了SpringBoot使用Maven打包异常-引入外部jar,需要的朋友可以参考下
    2020-06-06
  • SpringBoot+Redis实现布隆过滤器的示例代码

    SpringBoot+Redis实现布隆过滤器的示例代码

    本文主要介绍了SpringBoot+Redis实现布隆过滤器的示例代码,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • java 优雅关闭线程池的方案

    java 优雅关闭线程池的方案

    这篇文章主要介绍了java 优雅关闭线程池的方案,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • 配置java.library.path加载库文件问题

    配置java.library.path加载库文件问题

    这篇文章主要介绍了配置java.library.path加载库文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 原理分析SonarQube中IdentityProvider账户互斥现象

    原理分析SonarQube中IdentityProvider账户互斥现象

    这篇文章主要为大家介绍分析SonarQube中IdentityProvider账户互斥现象原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • java文件操作之java写文件简单示例

    java文件操作之java写文件简单示例

    这篇文章主要介绍了java文件操作中的java写文件示例,需要的朋友可以参考下
    2014-03-03

最新评论