国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

MyBatis 動(dòng)態(tài)拼接Sql字符串的問題

2019-11-26 13:58:11
字體:
供稿:網(wǎng)友

MyBatis 的一個(gè)強(qiáng)大的特性之一通常是它的動(dòng)態(tài) SQL 能力。如果你有使用 JDBC 或其他 相似框架的經(jīng)驗(yàn),你就明白條件地串聯(lián) SQL 字符串在一起是多么的痛苦,確保不能忘了空格或在列表的最后省略逗號(hào)。動(dòng)態(tài) SQL 可以徹底處理這種痛苦。

動(dòng)態(tài)SQL

MyBatis的動(dòng)態(tài)SQL,解決了SQL字符串拼接的痛苦。

1.if

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

這條一句會(huì)提供一個(gè)可選的文本查找功能。如果沒有傳遞title,那么所有激活的博客都會(huì)被返回。
如果傳遞了title,那么就會(huì)查找相近的title。

2.choose,when,otherwise

<select id="findActiveBlogLike"parameterType="BLOG" resultType="BLOG">SELECT * FROM BLOGWHERE<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>

注:如果上述條件都沒有匹配,則會(huì)變成SELECT * FROM BLOG WHERE
如果僅有第二個(gè)匹配,則會(huì)變成SELECT * FROM BLOG WHERE AND title LIKE somelike
顯然這樣會(huì)查詢失敗。要解決這個(gè)問題,mybatis提供了解決方法。

<select id="findActiveBlogLike"parameterType="BLOG" resultType="BLOG">SELECT * FROM BLOGWHERE<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屬性采用管道文本分隔符來覆蓋,這里的空白是重要的。它的結(jié)果就是移除在InnerText中overrides中指定的內(nèi)容。

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>

同上的問題,優(yōu)化后:

<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 動(dòng)態(tài)拼接Sql字符串的問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渑池县| 佳木斯市| 政和县| 新源县| 临夏县| 新龙县| 锦州市| 历史| 黄平县| 德化县| 武宁县| 奇台县| 凌海市| 秦皇岛市| 中宁县| 张掖市| 禄丰县| 崇文区| 鸡西市| 买车| 汉阴县| 潢川县| 塔河县| 仪陇县| 兰溪市| 台东县| 贵溪市| 滨州市| 塘沽区| 满洲里市| 永顺县| 马尔康县| 平江县| 襄城县| 长岛县| 休宁县| 滦平县| 田东县| 清流县| 湘潭县| 任丘市|