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


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