MyBatis动态SQL-条件判断

2023-05-15 13:55:51 浏览数 (1)

条件判断

在MyBatis中,我们可以使用<if><choose><when><otherwise>等元素来进行条件判断。这些元素都可以嵌套使用,以构建复杂的条件判断语句。

if元素

<if>元素用于根据条件来生成SQL语句的一部分。在if元素中,我们可以使用OGNL表达式来判断条件是否成立,如果条件成立,则将if元素中的SQL语句包含到生成的SQL语句中。例如,下面的代码中,如果username不为空,则会在SQL语句中包含where语句。

代码语言:javascript复制
<select id="selectUserByUsername" parameterType="String" resultType="User">
  SELECT id, username, password
  FROM user
  <where>
    <if test="username != null and username != ''">
      username = #{username}
    </if>
  </where>
</select>

choose元素

<choose>元素用于根据多个条件来生成SQL语句的一部分。<choose>元素包含多个<when>元素和一个<otherwise>元素。当<when>元素中的条件成立时,会将其中的SQL语句包含到生成的SQL语句中;如果所有的<when>元素都不成立,则会将<otherwise>元素中的SQL语句包含到生成的SQL语句中。例如,下面的代码中,如果gender为1,则生成SQL语句中包含"AND gender = '男'",否则生成SQL语句中包含"AND gender = '女'"。

代码语言:javascript复制
<select id="selectUserByGender" parameterType="int" resultType="User">
  SELECT id, username, password
  FROM user
  WHERE 1=1
  <choose>
    <when test="gender == 1">
      AND gender = '男'
    </when>
    <otherwise>
      AND gender = '女'
    </otherwise>
  </choose>
</select>

when元素和otherwise元素

<when>元素用于定义<choose>元素中的条件分支。<when>元素中的test属性用于指定OGNL表达式,如果该表达式成立,则会将<when>元素中的SQL语句包含到生成的SQL语句中。<otherwise>元素用于定义<choose>元素的默认分支,当所有的<when>元素都不成立时,会将<otherwise>元素中的SQL语句包含到生成的SQL语句中。

示例

下面给出一个根据用户的姓名和性别来查询用户的示例代码。

代码语言:javascript复制
<select id="selectUser" parameterType="Map" resultType="User">
  SELECT id, username, password, gender, age
  FROM user
  WHERE 1=1
  <if test="name != null and name != ''">
    AND username LIKE CONCAT('%', #{name}, '%')
  </if>
  <choose>
    <when test="gender == 1">
      AND gender = '男'
    </when>
    <when test="gender == 2">
      AND gender = '女'
    </when>
    <otherwise>
      AND gender IS NOT NULL
    </otherwise>
  </choose>
  ORDER BY age DESC
</select>

在这个示例中,我们通过Map类型的参数来传递查询条件。如果name不为空,则会生成一个LIKE语句来查询包含name关键字的用户;如果gender等于1,则会生成一个AND gender = '男'的语句;如果gender等于2,则会生成一个AND gender = '女'的语句;否则会生成一个AND gender IS NOT NULL的语句。最后,我们使用ORDER BY语句来按照年龄降序排列查询结果。

0 人点赞