前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MyBatis动态SQL-条件判断

MyBatis动态SQL-条件判断

原创
作者头像
堕落飞鸟
发布2023-05-15 13:55:51
发布2023-05-15 13:55:51
1.3K00
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

条件判断

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

if元素

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

代码语言:javascript
代码运行次数:0
运行
复制
<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
代码运行次数:0
运行
复制
<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
代码运行次数:0
运行
复制
<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语句来按照年龄降序排列查询结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件判断
    • if元素
    • choose元素
    • when元素和otherwise元素
    • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档