mybatis如何动态模糊查询
时间: 2023-07-18 08:30:06 浏览: 95
MyBatis中可以使用动态SQL语句来构建动态的模糊查询,其中包括使用if、choose、when、otherwise等标签,以及使用OGNL表达式来指定参数值。
以下是一个使用MyBatis实现动态模糊查询的示例代码:
```xml
<select id="selectUserByName" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
</select>
```
在上面的示例中,使用了if标签来判断是否需要进行模糊查询,如果name参数不为空,则会构建一个类似于"AND name LIKE '%value%'"的SQL语句。注意,在SQL语句中使用了CONCAT函数来拼接字符串,这是因为MyBatis中使用#{}语法来表示参数,而在SQL语句中不能直接使用%通配符。
可以根据实际需求,使用不同的标签和表达式来构建更复杂的动态SQL语句。
相关问题
mybatis动态sql模糊查询
MyBatis提供了动态SQL的功能,可以根据不同的条件组装不同的SQL语句,实现灵活的查询操作。下面是一个使用动态SQL实现模糊查询的示例:
```
<select id="findUserByName" parameterType="String" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
</where>
</select>
```
这个示例中,使用了`<where>`和`<if>`标签来实现动态SQL。`<where>`标签会在其中包含的条件成立时,自动添加一个WHERE关键字。`<if>`标签根据条件动态生成SQL语句,这里是根据`name`参数是否为空来判断是否需要添加模糊查询条件。
其中`#{name}`是MyBatis的占位符语法,表示接收一个参数,可以直接在SQL语句中使用。这里使用`concat`函数拼接了模糊查询的通配符,实现了模糊查询的功能。
使用这个示例,可以调用如下代码来查询用户:
```
List<User> userList = sqlSession.selectList("findUserByName", "张三");
```
这样就可以根据姓名模糊查询用户了。
mybatis中模糊查询
在MyBatis中,可以使用两种方式实现模糊查询。第一种方式是使用#{ },这是预编译处理的方式。在处理#{ }时,MyBatis会将其替换为?,然后使用PreparedStatement的set方法来赋值。这种方式可以防止SQL注入的问题。\[2\]第二种方式是使用${ },这是拼接SQL串的方式。使用${ }时,接收到的参数内容会直接拼接在SQL中,可能会引发SQL注入的问题。\[2\]在使用方式一时,需要在调用处手动添加%号通配符。而在使用方式二时,可以在映射配置文件中直接将%号写好。\[3\]这样可以避免在测试类中手动添加%号通配符的麻烦。总的来说,使用#{ }方式可以实现模糊查询并防止SQL注入,而使用${ }方式可以方便地在映射配置文件中写好%号通配符。\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [Mybatis 模糊查询的4种实现方式 【mybatis】](https://blog.csdn.net/liudachu/article/details/106955071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文