Mybatis 中动态查询 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/22 09:51:12 2023/08/22
【摘要】 在Mybatis中,动态查询是指根据不同的条件来构建SQL查询语句。Mybatis提供了多种方式来实现动态查询,以下是几种常用的方法:使用if元素:使用if元素可以根据条件动态拼接SQL语句。例如:xmlCopy code<select id="getUserList" resultType="User"> SELECT * FROM user WHERE 1=1 <if test="...

在Mybatis中,动态查询是指根据不同的条件来构建SQL查询语句。Mybatis提供了多种方式来实现动态查询,以下是几种常用的方法:

  1. 使用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>
  1. 使用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>
  1. 使用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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。