mybatis 使用模糊查询
时间: 2024-03-16 22:38:13 浏览: 96
以下是MyBatis使用模糊查询的两种方式:
1. 使用通配符进行模糊查询
```xml
<select id="selectByKeyword" parameterType="String" resultType="YourResultType">
SELECT * FROM your_table WHERE your_column LIKE CONCAT('%', #{keyword}, '%')
</select>
```
在上述示例中,我们使用了`LIKE`关键字和`CONCAT`函数来构建模糊查询语句。`%`是通配符,表示匹配任意字符。
2. 使用正则表达式进行模糊查询
```xml
<select id="selectByRegex" parameterType="String" resultType="YourResultType">
SELECT * FROM your_table WHERE your_column REGEXP #{regex}
</select>
```
在上述示例中,我们使用了`REGEXP`关键字来进行正则表达式匹配。你可以在`#{regex}`中传入你想要的正则表达式。
请注意,以上示例中的`your_table`和`your_column`需要替换为你实际的表名和列名。
相关问题
mybatis使用模糊查询
### MyBatis 实现模糊查询
#### 使用预编译 SQL 的占位符 `#{}` 进行模糊查询
在 MyBatis 中,为了防止 SQL 注入攻击,推荐使用预编译的 SQL 和 `#{}` 占位符来构建模糊查询条件。这种方式不仅安全而且高效。
```xml
<select id="selectUsersByName" parameterType="string" resultType="User">
SELECT * FROM users WHERE username LIKE CONCAT('%', #{name}, '%')
</select>
```
此配置展示了如何利用 `CONCAT` 函数将通配符 `%` 添加到参数两端,从而实现对用户名的部分匹配[^2]。
#### 利用 `${}` 字符串拼接进行模糊查询
虽然不建议用于处理用户输入的数据以防 SQL 注入风险,但在某些特定场景下可以直接使用 `${}` 来完成简单的字符串替换操作:
```xml
<select id="findItemsByTitle" parameterType="String" resultType="Item">
SELECT * FROM items WHERE title like '${title}'
</select>
```
这里假设传入的 `title` 参数已经包含了必要的百分号 `%` 作为通配符[^3]。
#### Java 测试代码示例
对于上述任意一种方式,在应用程序层面可以通过单元测试验证功能是否正常工作。下面是一个基于 JUnit 的例子,它调用了 DAO 接口中的方法来进行带有模式字符的名字搜索[^4]:
```java
@Test
public void testLikeOne(){
try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
StudentDao dao = sqlSession.getMapper(StudentDao.class);
String name = "%李%";
List<Student> students = dao.selectLikeOne(name);
students.forEach(student -> System.out.println(student));
}
}
```
mybatis循环模糊查询
在 MyBatis 中进行循环模糊查询,可以使用 foreach 标签来实现。具体步骤如下:
1. 在 Mapper 文件中添加 foreach 标签:
```
<select id="getUserListByNameList" parameterType="java.util.List" resultMap="userResultMap">
SELECT * FROM user
WHERE 1=1
<foreach collection="nameList" item="name" separator=" OR ">
AND name LIKE CONCAT('%', #{name}, '%')
</foreach>
</select>
```
2. 在 Java 代码中调用 Mapper 方法:
```
List<String> nameList = new ArrayList<>();
nameList.add("John");
nameList.add("Mary");
List<User> userList = userMapper.getUserListByNameList(nameList);
```
其中,nameList 是一个字符串列表,包含了需要查询的用户名。在 Mapper 文件中,使用 foreach 标签遍历 nameList 列表,并将每个字符串添加到 SQL 语句中进行模糊查询。最后返回查询结果。
需要注意的是,使用 foreach 标签时,需要指定 collection 属性为列表对象,item 属性为列表元素变量名,separator 属性为分隔符。同时,在 SQL 语句中可以使用 CONCAT 函数拼接字符串。
阅读全文
相关推荐













