mybatis-動態SQL語句
一、CONCAT字串拼接
1. sql中字串拼接
SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');
2. 使用 ${...} 代替 #{...}
SELECT * FROM tableName WHERE name LIKE '%${text}%';
${}解析過來的引數值不帶單引號,#{}解析傳過來引數帶單引號。
二、eq相等 ne、neq不相等, gt大於, lt小於 gte、ge大於等於 lte、le 小於等於 not非 mod求模 等
eq 對應 ==
neq 對應 !=
gt 對應 >
gte 對應 >=
lt 對應 <(會報錯 相關聯的 "test" 屬性值不能包含 '<' 字元)
lte 對應 <=(會報錯 相關聯的 "test" 屬性值不能包含 '<' 字元)
三、官網:choose, when, otherwise,if,trim, where, set,foreach,bind
四、<![CDATA[ sql 語句 ]]> 不用解析
在mapper檔案中寫sql語句時,遇到特殊字元時,如:< 等,建議使用<![CDATA[ sql 語句 ]]>標記,將sql語句包裹住,不被解析器解析
在使用mybatis 時我們sql是寫在xml 對映檔案中,如果寫的sql中有一些特殊的字元的話,在解析xml檔案的時候會被轉義,但我們不希望他被轉義,所以我們要使用<![CDATA[ ]]>來解決。
<![CDATA[ ]]> 是什麼,這是XML語法。在CDATA內部的所有內容都會被解析器忽略。
如果文字包含了很多的"<"字元 <=和"&"字元——就象程式程式碼一樣,那麼最好把他們都放到CDATA部件中。
但是有個問題那就是 <if test=""> </if> <where> </where> <choose> </choose> <trim> </trim> 等這些標籤都不會被解析,所以我們只把有特殊字元的語句放在 <![CDATA[ ]]> 儘量縮小 <![CDATA[ ]]> 的範圍。
例項如下:
<select id="allUserInfo" parameterType="java.util.HashMap" resultMap="userInfo1">
<![CDATA[
SELECT newsEdit,newsId, newstitle FROM shoppingGuide WHERE 1=1 AND newsday > #{startTime} AND newsday <= #{endTime}
]]>
<if test="etidName!=''">
AND newsEdit=#{etidName}
</if>
</select>
因為這裡有 ">" "<=" 特殊字元所以要使用 <![CDATA[ ]]> 來註釋,但是有<if> 標籤,所以把<if>等 放外面