====================mysql====================java
MyBatis 3.2.6插入时候获取自增主键方法mysql
以MySQL5.5为例:sql
方法1:数据库
<insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">
insert into person(name,pswd) values(#{name},#{pswd})
</insert>oracle
方法2:sqlserver
<insert id="insert" parameterType="Person">
<selectKey keyProperty="id" resultType="long">
select LAST_INSERT_ID()
</selectKey>
insert into person(name,pswd) values(#{name},#{pswd})
</insert>spa
插入前实体id属性为0;code
插入后实体id属性为保存后自增的id;server
mysql、sqlserver等数据库自己带有主键自增加像auto_increment的功能能够直接使用three
useGeneratedKeys=”true”来实现,好比下面的配置
<insert id=”add” useGeneratedKeys=”true” keyProperty=”id” parameterType=”Auth”> insert into s_user_auth (id,user_id, user_name) values(#{id},#{userid},#{username}) </insert>
==================oracle==========================
而oracle则不行,oracle主键自增加是经过sequence实现的,因此这种方式就不能够了,须要使用:
1.先经过sequence查出来id,再insert
<insert id=”add” useGeneratedKeys=”false” keyProperty=”id” parameterType=”Auth”> <selectKey resultType=”String” keyProperty=”id” order=”BEFORE”> select yoursequence.nextval as id from dual </selectKey> insert into s_user_auth (id,user_id, user_name) values(#{id},#{userid},#{username}) </insert>
2.直接insertsequence.nextval,以下
<insert id=”add” useGeneratedKeys=”false” keyProperty=”id” parameterType=”Auth”> insert into s_user_auth (id,user_id, user_name) values(yoursequence.nextval,#{userid},#{username}) </insert>
3
<
insert
id
=
"save"
parameterType
="com.threeti.to.ZoneTO"
useGeneratedKeys=”false” >
<
selectKey
resultType
=
"java.lang.Long"
keyProperty
=
"id"
order
=
"AFTER"
>
SELECT SEQ_ZONE.CURRVAL AS id from dual
</
selectKey
>
insert into TBL_ZONE (ID, NAME
)
values (SEQ_ZONE.NEXTVAL, #{name,jdbcType=VARCHAR}
)
</
insert
>