mybatis查询条件复用
时间: 2023-08-29 13:12:44 浏览: 108
mybatis条件查询
在MyBatis中,可以使用动态SQL语句来实现查询条件的复用。这里介绍两种常见的方式。
1. 使用`<where>`标签
使用`<where>`标签可以使查询条件的拼接更加灵活。例如,我们可以定义一个`selectByUserIdAndName`方法来根据用户ID和姓名查询用户信息:
```xml
<select id="selectByUserIdAndName" resultType="User">
SELECT * FROM user
<where>
<if test="userId != null">
AND user_id = #{userId}
</if>
<if test="name != null and name != ''">
AND name = #{name}
</if>
</where>
</select>
```
在这个例子中,使用`<where>`标签将查询条件拼接在了SQL语句的`WHERE`子句中。当`userId`和`name`都不为`null`时,会根据这两个条件进行查询;当其中一个条件为`null`时,会忽略该条件。
在其他查询方法中也可以使用这种方式来复用查询条件。
2. 使用`@Param`注解
使用`@Param`注解可以将多个参数传递给Mapper方法。例如,我们可以定义一个`selectByCondition`方法来根据不同的查询条件查询用户信息:
```java
public interface UserMapper {
List<User> selectByCondition(@Param("userId") Integer userId,
@Param("name") String name,
@Param("age") Integer age);
}
```
在这个例子中,使用`@Param`注解将多个参数传递给Mapper方法。在Mapper.xml文件中,可以使用`${}`占位符来引用这些参数:
```xml
<select id="selectByCondition" resultMap="userMap">
SELECT * FROM user
WHERE 1 = 1
<if test="userId != null">
AND user_id = #{userId}
</if>
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
```
在这个例子中,使用`<if>`标签来判断参数是否为`null`,如果不为`null`则使用占位符将参数传递给SQL语句。
这种方式还可以在其他查询方法中使用,只需要在Mapper方法中定义相应的参数和`@Param`注解即可。
阅读全文