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

MyBatis中insert操作返回主鍵的實(shí)現(xiàn)方法

 更新時(shí)間:2016年09月29日 11:56:49   作者:Truong  
在使用MyBatis做持久層時(shí),insert語(yǔ)句默認(rèn)是不返回記錄的主鍵值,而是返回插入的記錄條數(shù)。這篇文章主要介紹了MyBatis中insert操作返回主鍵的方法,需要的朋友可以參考下

在使用MyBatis做持久層時(shí),insert語(yǔ)句默認(rèn)是不返回記錄的主鍵值,而是返回插入的記錄條數(shù);如果業(yè)務(wù)層需要得到記錄的主鍵時(shí),可以通過(guò)配置的方式來(lái)完成這個(gè)功能

針對(duì)Sequence主鍵而言,在執(zhí)行insert sql前必須指定一個(gè)主鍵值給要插入的記錄,如Oracle、DB2,可以采用如下配置方式:

<insert id="add" parameterType="vo.Category">
<selectKey resultType="Java.lang.Short" order="BEFORE" keyProperty="id">
SELECT SEQ_TEST.NEXTVAL FROM DUAL
</selectKey>
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>

針對(duì)自增主鍵的表,在插入時(shí)不需要主鍵,而是在插入過(guò)程自動(dòng)獲取一個(gè)自增的主鍵,比如MySQL,可以采用如下兩種配置方式:

<insert id="add" parameterType="vo.Category" useGeneratedKeys="true" keyProperty="id">
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>

<insert id="add" parameterType="vo.Category">
<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>

在插入操作完成之后,參數(shù)category的id屬性就已經(jīng)被賦值了

如果數(shù)據(jù)庫(kù)表的主鍵不是自增的類(lèi)型,那么就需要應(yīng)用層生成主鍵的方式··········這個(gè)就不多說(shuō)了,需要的朋友,可以留言交流··

下面是針對(duì)Oracle的寫(xiě)法,Oracle沒(méi)有autoincrement,而是用觸發(fā)器實(shí)現(xiàn)的 CURRVAL是在觸發(fā)器中定義的.

<insert id="insert" parameterClass="ProFeeKindObject">
<![CDATA[
INSERT INTO t_pro_feeKind (KINDID,kindName,kindType,enable)
VALUES (seq_t_pro_feekind_id.nextval,#kindName#,#kindType#,#enable#)
]]>
<selectKey resultClass="java.lang.Integer" keyProperty="kindId" >
SELECT seq_t_pro_feekind_id.CURRVAL AS kindId FROM DUAL
</selectKey> 
</insert>
<!-- 下面是針對(duì)MySQL的寫(xiě)法 -->
<!--
<selectKey resultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS id
</selectKey>
-->

其他參考代碼:

持久化某個(gè)實(shí)體對(duì)象(如保存一個(gè)對(duì)象)時(shí),如果我們不用selectKey,那么我們不會(huì)立刻得到實(shí)體對(duì)象的Id屬性的,也就是數(shù)據(jù)表主鍵

Java代碼

Permission permission = new Permission(); 
permission.set... 
permmisonDao.createPermission(permission); 
assertNull(permission); 
Permission permission = new Permission();
permission.set...
permmisonDao.createPermission(permission);
assertNull(permission);

selectKey元素與其在父元素中的位置有關(guān)

<insert id="addPermission" parameterClass="Permission"> 
<selectKey resultClass="int" keyProperty="permissionId"> 
SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL 
</selectKey> 
INSERT INTO P_PERMISSION ( 
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL 
) VALUES ( 
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
) 
</insert>
<insert id="addPermission" parameterClass="Permission">
<selectKey resultClass="int" keyProperty="permissionId"> 
SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL 
</selectKey> 
INSERT INTO P_PERMISSION (
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL
) VALUES (
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
) 
</insert>

Mysql、SQLServer在后

Xml代碼

<insert id="addPermission" parameterClass="Permission"> 
INSERT INTO P_PERMISSION ( 
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL 
) VALUES ( 
#permissionId#, #permissionInfo#, #permissionName#, #permiss
ionEnName#, #url# 
) 
<selectKey resultClass="int" keyProperty="permissionId"> 
SELECT LAST_INSERT_ID() 
</selectKey> 
</insert>
<insert id="addPermission" parameterClass="Permission"> 
INSERT INTO P_PERMISSION (
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL
) VALUES (
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
)
<selectKey resultClass="int" keyProperty="permissionId"> 
SELECT LAST_INSERT_ID() 
</selectKey>
</insert>

像上面這樣書(shū)寫(xiě),與selectKey的位置聯(lián)系得太緊密了,iBatis的sqlMap配置文件的selectKey元素有個(gè)type屬性,可以指定pre或者post表示前生成還是后生成。
對(duì)于Oracle,表示為

Xml代碼

<insert id="addPermission" parameterClass="Permission"> 
<selectKey resultClass="int" keyProperty="permissionId" type="pre"> 
SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL 
</selectKey> 
INSERT INTO P_PERMISSION ( 
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL 
) VALUES ( 
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
) 
</insert> 
<insert id="addPermission" parameterClass="Permission">
<selectKey resultClass="int" keyProperty="permissionId" type="pre"> 
SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL 
</selectKey> 
INSERT INTO P_PERMISSION (
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL
) VALUES (
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
) 
</insert>

Mysql、SQLServer等表示為:

Xml代碼

<insert id="addPermission" parameterClass="Permission"> 
<selectKey resultClass="int" keyProperty="permissionId" type="post"> 
SELECT LAST_INSERT_ID() 
</selectKey> 
INSERT INTO P_PERMISSION ( 
PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL 
) VALUES ( 
#permissionId#, #permissionInfo#, #permissionName#, #permissionEnName#, #url#
) 
</insert>

以上所述是小編給大家介紹的MyBatis中insert操作返回主鍵的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JDBC使用小結(jié)

    JDBC使用小結(jié)

    JDBC是一個(gè)Java應(yīng)用程序接口,作用是封裝了對(duì)數(shù)據(jù)庫(kù)的各種操作。JDBC由類(lèi)和接口組成,使用Java開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用都需要4個(gè)主要的接口:Driver、Connection、Statement、ResultSet,這些接口定義了使用SQL訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的一般架構(gòu),下面我們來(lái)詳細(xì)探討下jdbc的使用。
    2016-05-05
  • Java小白第一次就能看懂的網(wǎng)絡(luò)編程

    Java小白第一次就能看懂的網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫(xiě)運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過(guò)網(wǎng)絡(luò)連接起來(lái)。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來(lái)實(shí)現(xiàn)TCP和UDP的Socket的編程,來(lái)讓讀者更好的了解其原理
    2021-08-08
  • Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究

    Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究

    這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • java list去重操作實(shí)現(xiàn)方式

    java list去重操作實(shí)現(xiàn)方式

    本文主要介紹了java list 去重的方法,其中有帶類(lèi)型寫(xiě)法和不帶類(lèi)型寫(xiě)法,并舉例測(cè)試,具有一定參考借鑒價(jià)值,希望能對(duì)有需要的小伙伴有所幫助
    2016-07-07
  • Java中實(shí)例初始化和靜態(tài)初始化的過(guò)程詳解

    Java中實(shí)例初始化和靜態(tài)初始化的過(guò)程詳解

    Java代碼初始化塊是Java語(yǔ)言中的一個(gè)非常重要的概念。初始化塊負(fù)責(zé)在創(chuàng)建對(duì)象時(shí)進(jìn)行一些必要的操作,例如設(shè)置對(duì)象的初始狀態(tài)、初始化成員變量等。初始化塊被分為實(shí)例初始化塊和靜態(tài)初始化塊兩種類(lèi)型。本文詳細(xì)介紹了初始化的過(guò)程,需要的朋友可以參考下
    2023-05-05
  • mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程

    mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程

    這篇文章主要為大家詳細(xì)介紹了mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java并發(fā)內(nèi)存模型詳情

    Java并發(fā)內(nèi)存模型詳情

    這篇文章主要介紹了Java并發(fā)內(nèi)存模型,Java是一門(mén)支持多線(xiàn)程執(zhí)行的語(yǔ)言,要編寫(xiě)正確的并發(fā)程序,了解Java內(nèi)存模型是重要前提。而了解硬件內(nèi)存模型有助于理解程序的執(zhí)行,下面文章就來(lái)看看詳細(xì)內(nèi)容吧
    2021-10-10
  • RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解

    RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解

    這篇文章主要為大家介紹了RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JDK13的新特性之AppCDS詳解

    JDK13的新特性之AppCDS詳解

    AppCDS的全稱(chēng)是Application Class-Data Sharing。主要是用來(lái)在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動(dòng)速度。這篇文章主要介紹了JDK13的新特性:AppCDS詳解,需要的朋友可以參考下
    2020-05-05
  • MybatisPlus使用idworker解決雪花算法重復(fù)

    MybatisPlus使用idworker解決雪花算法重復(fù)

    本文主要介紹了MybatisPlus使用idworker解決雪花算法重復(fù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論