日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

160613、MyBatis insert操作返回主键

發(fā)布時間:2025/7/14 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 160613、MyBatis insert操作返回主键 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在使用MyBatis做持久層時,insert語句默認是不返回記錄的主鍵值,而是返回插入的記錄條數(shù);如果業(yè)務(wù)層需要得到記錄的主鍵時,可以通過配置的方式來完成這個功能,針對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ù)庫表的主鍵不是自增的類型,那么就需要應(yīng)用層生成主鍵的方式··········這個就不多說了,需要的朋友,可以留言交流··

?

-----------------------------------------

?

?

下面是針對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>

轉(zhuǎn)載于:https://www.cnblogs.com/zrbfree/p/5571137.html

總結(jié)

以上是生活随笔為你收集整理的160613、MyBatis insert操作返回主键的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。