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查询,但choose、when、otherwise标签可以用于构建复杂的查询逻辑,包括根据条件选择是否执行模糊查询。
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+URule实现可视化规则引擎的方法示例
规则引擎其实是一种组件,它可以嵌入到程序当中,将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断,本文给大家介绍了SpringBoot+URule实现可视化规则引擎的方法示例,需要的朋友可以参考下2024-12-12
Spring Boot 3.2.5集成mysql的详细步骤记录
作为一名Java开发者,我们经常需要在我们的应用程序中使用数据库,在Spring Boot中集成数据库是非常容易的,下面这篇文章主要给大家介绍了关于Spring Boot 3.2.5集成mysql的详细步骤,需要的朋友可以参考下2024-04-04
SpringBoot中@Configuration和@Bean和@Component相同点详解
这篇文章主要介绍了SpringBoot中@Configuration和@Bean和@Component相同点详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
浅谈Java之Map 按值排序 (Map sort by value)
下面小编就为大家带来一篇浅谈Java之Map 按值排序 (Map sort by value)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-08-08
Spring Data Redis中Hash结构操作技巧与最佳实践
本文全面掌握Spring Data Redis中Hash结构的操作技巧与最佳实践,包括节省内存、支持单字段更新和查询、原子性操作等,通过SpringDataRedis的opsForHash(),可以方便地进行Hash结构的操作,感兴趣的朋友跟随小编一起看看吧2026-01-01


最新评论