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

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

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

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

針對Sequence主鍵而言,在執(zhí)行insert sql前必須指定一個主鍵值給要插入的記錄,如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>

針對自增主鍵的表,在插入時不需要主鍵,而是在插入過程自動獲取一個自增的主鍵,比如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ù)庫表的主鍵不是自增的類型,那么就需要應用層生成主鍵的方式··········這個就不多說了,需要的朋友,可以留言交流··

下面是針對Oracle的寫法,Oracle沒有autoincrement,而是用觸發(fā)器實現(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>
<!-- 下面是針對MySQL的寫法 -->
<!--
<selectKey resultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS id
</selectKey>
-->

其他參考代碼:

持久化某個實體對象(如保存一個對象)時,如果我們不用selectKey,那么我們不會立刻得到實體對象的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>

像上面這樣書寫,與selectKey的位置聯(lián)系得太緊密了,iBatis的sqlMap配置文件的selectKey元素有個type屬性,可以指定pre或者post表示前生成還是后生成。
對于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操作返回主鍵的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JDBC使用小結(jié)

    JDBC使用小結(jié)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    JDK13的新特性之AppCDS詳解

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

    MybatisPlus使用idworker解決雪花算法重復

    本文主要介紹了MybatisPlus使用idworker解決雪花算法重復,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論