欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解MyBatis直接執(zhí)行SQL查詢及數(shù)據(jù)批量插入

 更新時(shí)間:2016年01月23日 11:37:12   作者:izumi  
這篇文章主要介紹了MyBatis直接執(zhí)行SQL查詢及數(shù)據(jù)批量插入的相關(guān)知識(shí),需要的朋友一起學(xué)習(xí)吧

一、直接執(zhí)行SQL查詢:

1、mappers文件節(jié)選

<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類節(jié)選

public interface SomeDAO{
List<InstanceModel> getInstanceModel(@Param("paramSQL")String sql);
} 

3、注意事項(xiàng)

3.1:傳入方法的參數(shù)sql必須遵循以下規(guī)范"select XXX as instanceid, XXX as instancename ....." ,否則MyBatis無(wú)法自動(dòng)將查詢結(jié)果變成Java對(duì)象。

3.2: mappers文件中的#{}語(yǔ)法與${}語(yǔ)法的區(qū)別:

默認(rèn)情況下, #{}語(yǔ)法會(huì)促使MyBatis生成PreparedStatement屬性并且使用PreparedStatement的參數(shù)(=?)來(lái)設(shè)置值。如果你想直接將未更改的字符串代入到sql中,可以使用${}。

也就是說(shuō),MyBatis看到 #{}會(huì)認(rèn)為你在給sql中的變量賦值,就像JDBC編程中給問號(hào)賦值一樣(比如MyBatis會(huì)判斷它的類型,并自動(dòng)在前后加單引號(hào))。而當(dāng)MyBatis看到${}的時(shí)候會(huì)直接將之替換成變量的值而不做任何處理。

所以在使用${}的時(shí)候,不需要像#{}一樣寫"jdbcType=VARCHAR"之類的屬性。

3.3:resultType和resultMap

按照1中的寫法, < resultMap > 部分可以刪除不用了,因?yàn)樵诮酉聛?lái)的<select >中沒用使用定義的resultMap,而是使用了resultType。

所以我們可以看出,關(guān)于<select >返回值的定義有兩種寫法,一種是定義一個(gè)resultMap然后引用這個(gè)resultMap,還有一種就是直接使用resultType指定一個(gè)類的路徑。

二、批量插入數(shù)據(jù)

1、經(jīng)驗(yàn)告訴我們,使用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文件節(jié)選

<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類節(jié)選

public interface SomeDAO{
public void insertBatch(@Param("list")List<Student> students); 
}

詳解mybatis批量插入數(shù)據(jù)

首先看看批處理的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>

在批處理中,我發(fā)現(xiàn)有幾個(gè)需要注意的問題

1、主鍵的自動(dòng)獲取,在insert中添加useGeneratedKeys=”true” keyProperty=”id”這兩個(gè)屬性無(wú)效,并且或中斷數(shù)據(jù)插入,如果id是數(shù)據(jù)庫(kù)自增的話,可以什么都不寫,在插入的語(yǔ)句中去除主鍵屬性,還有就是利用

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

注意 :<selectKey > 標(biāo)簽在insert下只能存在一個(gè);批處理的時(shí)候不適合使用<selectKey >,主鍵自增最好,或者指定
2,插入時(shí)間的獲取如上面所示,我用的是mysql,只要是mysql函數(shù)都可以拿來(lái)使用,插入時(shí)間和主鍵都是mysql函數(shù)中的一個(gè)。。。

相關(guān)文章

  • Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    樹是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹中稱為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹那樣。樹結(jié)構(gòu)在客觀世界中廣泛存在,如人類社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-05-05
  • springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題

    springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題

    這篇文章主要介紹了springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot前后端分離項(xiàng)目之打包、部署到服務(wù)器詳細(xì)圖文流程

    SpringBoot前后端分離項(xiàng)目之打包、部署到服務(wù)器詳細(xì)圖文流程

    作為后臺(tái)開發(fā),項(xiàng)目打包部署是經(jīng)常性的操作,下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端分離項(xiàng)目之打包、部署到服務(wù)器的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java實(shí)現(xiàn)Web應(yīng)用中的定時(shí)任務(wù)(實(shí)例講解)

    Java實(shí)現(xiàn)Web應(yīng)用中的定時(shí)任務(wù)(實(shí)例講解)

    下面小編就為大家分享一篇Java實(shí)現(xiàn)Web 應(yīng)用中的定時(shí)任務(wù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Spring中的@Repository注解源碼詳解

    Spring中的@Repository注解源碼詳解

    這篇文章主要介紹了Spring中的@Repository注解詳解,@Repository注解修飾哪個(gè)類,則表明這個(gè)類具有對(duì)對(duì)象進(jìn)行增刪改查的功能,而且@Repository是@Component注解的一個(gè)派生品,所以被@Repository注解的類可以自動(dòng)的被@ComponentScan通過(guò)路徑掃描給找到,需要的朋友可以參考下
    2023-10-10
  • Java最全文件操作實(shí)例匯總

    Java最全文件操作實(shí)例匯總

    這篇文章主要介紹了Java最全文件操作,總結(jié)分析了大量實(shí)例,詳細(xì)匯總了Java針對(duì)文件的各種常用操作,需要的朋友可以參考下
    2015-11-11
  • java?緩沖流的概念使用方法以及實(shí)例詳解

    java?緩沖流的概念使用方法以及實(shí)例詳解

    這篇文章主要為大家介紹了java?緩沖流的概念使用方法以及實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 通過(guò)Java實(shí)現(xiàn)在Word中創(chuàng)建可填充表單

    通過(guò)Java實(shí)現(xiàn)在Word中創(chuàng)建可填充表單

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java代碼,以編程方式在Word中創(chuàng)建可填充表單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • Java中Mybatis分頁(yè)查詢的四種傳參方式

    Java中Mybatis分頁(yè)查詢的四種傳參方式

    這篇文章主要介紹了Java中Mybatis分頁(yè)查詢的四種傳參方式:順序傳參,@param傳參,自定義POJO類傳參,Map傳參,想詳細(xì)了解傳參方式的小伙伴可以詳細(xì)閱讀本文,有一定的而參考價(jià)值
    2023-03-03
  • SpringBoot策略模式的實(shí)踐使用

    SpringBoot策略模式的實(shí)踐使用

    這篇文章主要介紹了SpringBoot 策略模式的實(shí)踐使用,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論