mybatis如何动态模糊查询
时间: 2023-07-18 08:30:06 浏览: 92
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的模糊查询可以使用通配符来实现,通配符有两种:百分号(%)和下划线(_)。
%代表匹配任意长度的任意字符,_代表匹配单个任意字符。
例如,如下SQL语句:
```
SELECT * FROM user WHERE username LIKE '%张%'
```
表示查询用户名中包含“张”的所有用户。
在MyBatis中,可以使用#{parameter}占位符来传递参数,例如:
```
<select id="selectUsersByName" resultType="User">
SELECT * FROM user WHERE username LIKE '%#{name}%'
</select>
```
在Java代码中,调用该查询方法时需要传递一个名为name的参数,例如:
```
List<User> users = sqlSession.selectList("selectUsersByName", "张");
```
这样就会查询出用户名中包含“张”的所有用户。注意,这里不需要在参数中添加通配符,MyBatis会自动添加。
阅读全文