Mybatis 中动态查询 - 面试宝典
【摘要】 在Mybatis中,动态查询是指根据不同的条件来构建SQL查询语句。Mybatis提供了多种方式来实现动态查询,以下是几种常用的方法:使用if元素:使用if元素可以根据条件动态拼接SQL语句。例如:xmlCopy code<select id="getUserList" resultType="User"> SELECT * FROM user WHERE 1=1 <if test="...
在Mybatis中,动态查询是指根据不同的条件来构建SQL查询语句。Mybatis提供了多种方式来实现动态查询,以下是几种常用的方法:
- 使用if元素:使用if元素可以根据条件动态拼接SQL语句。例如:
xmlCopy code<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
- 使用choose、when、otherwise元素:choose元素可以根据条件选择其中的某个分支,when元素用于定义条件,otherwise元素用于定义默认分支。例如:
xmlCopy code<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND status = 1
</otherwise>
</choose>
</select>
- 使用where元素:where元素可以用于动态拼接WHERE子句。例如:
xmlCopy code<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
以下是一个使用Mybatis实现动态查询的示例代码:
javaCopy code// UserMapper.java
public interface UserMapper {
List<User> getUserList(@Param("name") String name, @Param("age") Integer age);
}
xmlCopy code<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
</mapper>
javaCopy code// User.java
public class User {
private Long id;
private String name;
private Integer age;
// 省略getter和setter方法
}
在上述示例中,UserMapper接口定义了一个getUserList方法,用于根据条件查询用户列表。在UserMapper.xml中,使用了where元素来动态拼接WHERE子句,根据传入的name和age参数决定是否添加相应的条件。 使用示例代码时,可以通过传入不同的参数来实现动态查询。例如:
javaCopy codeUserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList("Alice", null);
上述代码会查询name为"Alice"的用户列表,不考虑age条件。如果需要同时考虑name和age条件,可以传入相应的参数:
javaCopy codeUserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList("Alice", 25);
以上示例代码演示了如何使用Mybatis实现动态查询,根据具体需求调整条件参数即可。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)