国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 14:39:26
字體:
來源:轉載
供稿:網友

一、直接執行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); }

詳解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函數中的一個。。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特左旗| 日喀则市| 开封县| 富平县| 山阳县| 万荣县| 若羌县| 常山县| 龙南县| 苍南县| 温州市| 宁波市| 寿光市| 宁南县| 正阳县| 藁城市| 阿勒泰市| 兴隆县| 宜丰县| 驻马店市| 彩票| 凭祥市| 施秉县| 宁阳县| 岱山县| 桐柏县| 青海省| 锦州市| 海丰县| 靖州| 体育| 东光县| 吉隆县| 西贡区| 保亭| 青州市| 崇州市| 晋中市| 新蔡县| 桐梓县| 阿合奇县|