====================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
>