MyBatis에서 insert 작업이 주 키를 되돌리는 방법

myBatis를 지구층으로 사용할 때 insert 문장은 기본적으로 기록된 키 값을 되돌려주지 않고 삽입된 기록 줄의 수를 되돌려줍니다.만약 업무층이 기록된 메인 키를 필요로 할 때, 설정 방식을 통해 이 기능을 완성할 수 있다
Sequence 키의 경우 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>
삽입 작업이 끝난 후, 매개 변수category의 id 속성은 이미 값을 부여합니다
만약 데이터베이스 테이블의 메인 키가 자증하는 유형이 아니라면, 응용층이 메인 키를 생성하는 방식이 필요합니다.
다음은 Oracle에 대한 글쓰기입니다. Oracle은 autoincrement가 아니라 트리거로 이루어진 CURRVAL은 트리거에 정의되어 있습니다.

<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 속성, 즉 데이터 테이블 메인 키를 얻지 못할 것이다
Java 코드

Permission permission = new Permission(); 
permission.set... 
permmisonDao.createPermission(permission); 
assertNull(permission); 
Permission permission = new Permission();
permission.set...
permmisonDao.createPermission(permission);
assertNull(permission);
selectKey 요소는 부모 요소의 위치와 관련이 있습니다.

<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의 위치와 너무 밀접하게 연결되어 있습니다. 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 조작을 메인 키로 되돌리는 방법입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기