程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解MyBatis直接履行SQL查詢及數據批量拔出

詳解MyBatis直接履行SQL查詢及數據批量拔出

編輯:關於JAVA

詳解MyBatis直接履行SQL查詢及數據批量拔出。本站提示廣大學習愛好者:(詳解MyBatis直接履行SQL查詢及數據批量拔出)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解MyBatis直接履行SQL查詢及數據批量拔出正文


1、直接履行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指定一個類的途徑。

2、批量拔出數據

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); 
}

詳解mybatis批量拔出數據

起首看看批處置的mapper.xml文件

<insert id="insertbatch" parameterType="java.util.List">
<selectKey keyProperty="fetchTime" order="BEFORE"
resultType="java.lang.String">
SELECT CURRENT_TIMESTAMP()
</selectKey>
insert into kangaiduoyaodian ( depart1, depart2, product_name,
generic_name, img, product_specification, unit,
approval_certificate, manufacturer, marketPrice, vipPrice,
website, fetch_time, productdesc ) values
<foreach collection="list" item="item" index="index"
separator=",">
( #{item.depart1}, #{item.depart2}, #{item.productName},
#{item.genericName}, #{item.img},
#{item.productSpecification}, #{item.unit},
#{item.approvalCertificate}, #{item.manufacturer},
#{item.marketprice}, #{item.vipprice}, #{item.website},
#{fetchTime}, #{item.productdesc} )
</foreach>
</insert>

在批處置中,我發明有幾個須要留意的成績

1、主鍵的主動獲得,在insert中添加useGeneratedKeys=”true” keyProperty=”id”這兩個屬性有效,而且或中止數據拔出,假如id是數據庫自增的話,可以甚麼都不寫,在拔出的語句中去除主鍵屬性,還有就是應用

<selectKey keyProperty="id" order="BEFORE"
resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>

留意 :<selectKey > 標簽在insert下只能存在一個;批處置的時刻不合適應用<selectKey >,主鍵自增最好,或許指定
2,拔出時光的獲得如下面所示,我用的是mysql,只需是mysql函數都可以拿來應用,拔出時光和主鍵都是mysql函數中的一個。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved