Mybatis 动态 SQL - if

MyBatis的一个最强大的特性一直都是其动态SQL能力。如果你有使用JDBC或任何类似框架的经验,你就会明白在条件下连接SQL字符串是多么痛苦,需要确保不忘记添加空格或在列名列表的末尾遗漏逗号。动态SQL处理起来非常痛苦。

尽管使用动态SQL可能不会很轻松,但是MyBatis通过一种强大的动态SQL语言改善了这种情况,该语言可以在任何映射的SQL语句中使用。

对于使用JSTL或类似基于XML的文本处理器的人来说,动态SQL元素应该很熟悉。在MyBatis的早期版本中,需要了解和理解的元素非常多。MyBatis 3对此进行了极大改进,现在要使用的元素少于一半。MyBatis使用强大的OGNL表达式来消除了大部分其他元素:

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
if 

在动态SQL中最常见的操作是根据条件选择性地包含where子句的一部分。例如:

<select id="findActiveBlogWithTitleLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
</select>

 这个语句将提供一种可选的文本搜索功能。如果你不传入标题,那么将返回所有处于活动状态的博客。但是如果你传入了一个标题,它将查找类似于该标题的博客(对于敏锐的眼睛来说,在这种情况下,你的参数值需要包含任何掩码或通配符字符)。

如果我们想要选择性地按标题和作者进行搜索怎么办?首先,我会更改语句的名称以使其更有意义。然后只需添加另一个条件即可。

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值