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 标签将参数小写化成一个新的变量 lowercaseName。
<select id="selectUsernameLowercase" resultType="com.imooc.mybatis.model.User">
<bind name="lowercaseName" value="username.toLowercase"/>
SELECT * FROM imooc_user
WHERE username = #{lowercaseName}
</select>
原文:https://www.cnblogs.com/qiuwenli/p/13413284.html