choose和bind

choose 标签相当于编程语言 if…else 语句,用于动态 SQL 中的多条件判断,是 if 标签的增强版。
bind 标签可以在动态 SQL 中通过 OGNL 表达式来创建一个新的变量绑定到上下文中,供后续的 SQL 使用。

<select id="selectUserByLikeName" resultType="com.imooc.mybatis.model.User">
  SELECT * FROM imooc_user
  WHERE username LIKE
  <choose>
    <when test="_databaseId == 'mysql'">
      CONCAT('%',#{username},'%')
    </when>
    <when test="_databaseId == 'postgre'">
      '%' || #{username} || '%'
    </when>
    <otherwise>
      <bind name="usernameLike" value="'%' + username + '%'"/>
      #{usernameLike}
    </otherwise>
  </choose>
</select>

通过choose标签来判断当前的数据库厂商,如果是MySQL数据库,则调用CONCAT函数来拼接% 和 username,如果是 PostgreSQL 数据库,则使用操作符||来拼接,如果是其它类型的数据库,则直接通过 OGNL 表达式来绑定一个新的变量 usernameLike。

在这个例子中,choose 是一个条件选择标签,第一个 when 相当于 if 判断,第二个 when 相当于 else if,最后的 otherwise 相当于 else。比起 if 标签,choose 标签无疑更为易用,适用于同一条件的多次判断逻辑。

Bind

使用 bind 标签将参数小写化成一个新的变量 lowercaseName。

<select id="selectUsernameLowercase" resultType="com.imooc.mybatis.model.User">
  <bind name="lowercaseName" value="username.toLowercase"/>
  SELECT * FROM imooc_user
  WHERE username = #{lowercaseName}
</select>
posted @ 2020-08-01 08:58  柒丶月  阅读(121)  评论(0编辑  收藏  举报