软件编程
位置:首页>> 软件编程>> java编程>> MyBatis 动态拼接Sql字符串的问题

MyBatis 动态拼接Sql字符串的问题

作者:mrr  发布时间:2021-08-09 05:23:46 

标签:mybatis,动态,拼接,sql

MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态 SQL 可以彻底处理这种痛苦。

动态SQL

MyBatis的动态SQL,解决了SQL字符串拼接的痛苦。

1.if


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

这条一句会提供一个可选的文本查找功能。如果没有传递title,那么所有激活的博客都会被返回。
如果传递了title,那么就会查找相近的title。

2.choose,when,otherwise


<select id="findActiveBlogLike"
parameterType="BLOG" resultType="BLOG">
SELECT * FROM BLOG
WHERE
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND title like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>

注:如果上述条件都没有匹配,则会变成SELECT * FROM BLOG WHERE
如果仅有第二个匹配,则会变成SELECT * FROM BLOG WHERE AND title LIKE somelike
显然这样会查询失败。要解决这个问题,mybatis提供了解决方法。


<select id="findActiveBlogLike"
parameterType="BLOG" resultType="BLOG">
SELECT * FROM BLOG
WHERE
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND title like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</trim>
</select>

overrides属性采用管道文本分隔符来覆盖,这里的空白是重要的。它的结果就是移除在InnerText中overrides中指定的内容。

3.set


<update id="updateAuthorIfNecessary"
parameterType="Author">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email}</if>
</set>
where id=#{id}
</update>

同上的问题,优化后:


<update id="updateAuthorIfNecessary"
parameterType="Author">
update Author
<trim prefix="where" prefixOverrides=",">
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email}</if>
</set>
where id=#{id}
</trim>
</update>

以上所述是小编给大家介绍的MyBatis 动态拼接Sql字符串的问题网站的支持!

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com