MyBatis 是 JAVA 中一個非常好用的數據庫框架,這兒記錄一下在使用過程中遇到的坑。
官方中文文檔地址:
http://www.mybatis.org/mybatis-3/zh/getting-started.html
1、在Mybatis mApping.xml映射配置文件中使用大于>號小于號<
由于Mybatis的映射文件遵循xml文件的格式,所以不能使用像大于號或者小于號這樣的xml文件特殊字符,需要使用轉義字符代替。整理了一份272頁MybatisPDF文檔
< |
< |
小于號 |
> |
> |
大于號 |
& |
& |
和 |
' |
’ |
單引號 |
" |
“ |
雙引號 |
可以使用:
SELECT * FROM test
WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE
<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>
復制
2、Mybatis中使用OGNL表達式test比較字符串
在Mybatis映射配置文件中,使用OGNL表達式test的時候,比較字符串時,需要調用 toString()方法保證 == 兩邊的值都是 String 類型。
<!-- 以下為錯誤寫法,會拋NumberFormatException異常 -->
<if test="username == 'U'">
<!-- 正確寫法如下兩種 -->
<if test="username == 'U'.toString()">
<if test='username == "U"'>
復制
3、Mybatis實現WHERE IN查詢
WHERE IN查詢中,IN的參數是一個列表,需要傳送一個列表參數,使用 foreach 實現。
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT * FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
復制
當使用可迭代對象或者數組時,index是當前迭代的次數,item的值是本次迭代獲取的元素。當使用字典(或者Map.Entry對象的集合)時,index是鍵,item是值。
你可以將任何可迭代對象(如列表、集合等)和任何的字典或者數組對象傳遞給foreach作為集合參數。
4、Mybatis插入數據的時候返回插入記錄的主鍵id
在進行輸入庫插入的時候,如果我們需要使用已經插入的記錄的主鍵,則需要返回剛才插入的數據的主鍵id。
通過設置 insert 標簽的 useGeneratedKeys 屬性為 true 可以返回插入的記錄的主鍵的id。整理了一份272頁MybatisPDF文檔
<insert id="User" useGeneratedKeys="true" keyProperty="id"> </insert>