MyBatis直接執行SQL查詢及批量插入數據


一、直接執行SQL查詢:

 1、mappers文件節選

< resultMap  id ="AcModelResultMap"  type ="com.izumi.InstanceModel" >
   < 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類節選

public  interface SomeDAO{
  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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM