一、直接執行SQL查詢:
1、mappers文件節選
< result column =" instanceid" property ="instanceID" jdbcType ="VARCHAR" />
< result column =" instancename" property ="instanceName" jdbcType ="VARCHAR" />
</ resultMap >
< select id ="getInstanceModel" resultType ="com.izumi.InstanceModel" >
${paramSQL}
</select>
2、DAO類節選
List<InstanceModel> getInstanceModel(@Param("paramSQL")String sql);
}
3、注意事項
3.1:傳入方法的參數sql必須遵循以下規范"select XXX as instanceid, XXX as instancename ....." ,否則MyBatis無法自動將查詢結果變成Java對象。
3.2: mappers文件中的#{}語法與${}語法的區別:
默認情況下, #{}語法會促使MyBatis生成PreparedStatement屬性並且使用PreparedStatement的參數(=?)來設置值。如果你想直接將未更改的字符串代入到sql中,可以使用${}。
也就是說,MyBatis看到 #{}會認為你在給sql中的變量賦值,就像JDBC編程中給問號賦值一樣(比如MyBatis會判斷它的類型,並自動在前后加單引號)。而當MyBatis看到${}的時候會直接將之替換成變量的值而不做任何處理。
所以在使用${}的時候,不需要像#{}一樣寫"jdbcType=VARCHAR"之類的屬性。
3.3:resultType和resultMap
按照1中的寫法, < resultMap > 部分可以刪除不用了,因為在接下來的<select >中沒用使用定義的resultMap,而是使用了resultType。
所以我們可以看出,關於<select >返回值的定義有兩種寫法,一種是定義一個resultMap然后引用這個resultMap,還有一種就是直接使用resultType指定一個類的路徑。
二、批量插入數據
1、經驗告訴我們,使用insert into XXX values(XX)(XXX)(XXX),比使用insert into XXX values(XX),insert into XXX values(XXX),insert into XXX values(XXX)效率要高。
2、在MyBatis中的用法
2.1、mappers文件節選
< insert id ="insertBatch" >insert into student ( < include refid ="Base_Column_List" /> )
values
< foreach collection ="list" item ="item" index ="index" separator ="," >
(null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#{item.tId})
</ foreach >
</insert>
2.2、DAO類節選
public interface SomeDAO{
public void insertBatch(@Param("list")List<Student> students);
}
參考:
1、《MyBatis用戶指南中文版》 譯者:曾令祝
2、http://winhack.iteye.com/blog/1522181