条件判断
在MyBatis中,我们可以使用<if>
、<choose>
、<when>
、<otherwise>
等元素来进行条件判断。这些元素都可以嵌套使用,以构建复杂的条件判断语句。
if元素
<if>
元素用于根据条件来生成SQL语句的一部分。在if元素中,我们可以使用OGNL表达式来判断条件是否成立,如果条件成立,则将if元素中的SQL语句包含到生成的SQL语句中。例如,下面的代码中,如果username不为空,则会在SQL语句中包含where语句。
<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 = '女'"。
<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语句来按照年龄降序排列查询结果。