解决mybatis3添加数据返回主键

最近项目用到插入记录后,根据生成的主键,再做其他操作,但是mybatis返回的是影响的行书,网上搜,大部分是如下形式

<insert id="add" parameterType="..." useGeneratedKeys="true" keyProperty="id">

...

</insert>

此种用法仅限于像mysql,sqlserver这样主键有自增功能的数据库,但是oracle不行.

咱也不讨论为什么oracle不弄简单的主键自增,而要用序列来做主键,也许是让用户更自由些?但是我始终认为,主键不应该能让用户决定,应该强制由数据库来管理,能避免些错误,例如,插入时..嘿嘿.

网上搜到能用的反会主键的方法如下:

<insert id="add" parameterType="...">

<selectKey resultType="java.lang.Short" order="BEFORE" keyProperty="id">

SELECT SEQ.NEXTVAL FROM DUAL

</selectKey>

...

</insert>

这种方法确实能得到主键,但是还是那一点,我认为主键不应该是开发人员需要关心的,而是由数据库强制的,自定义的,所以,我始终坚持自增要用序列加触发器来实现

所以我放弃了这种<selectKey>的使用方法

 

想起了用sqlserver时怎么返回主键呢,

insert into XX表 values(aa,bb,c);select @@IDENTITY
那么我们用mybatis时,selectKey可以在插入前得到序列,是不是可以插入后,再得到刚刚序列的值呢,是不是那个before可以改成after呢,于是尝试了如下写法,成功了...

<insert id="add" parameterType="...">

<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">

SELECT SEQ.CURRVAL FROM DUAL

</selectKey>

...

</insert>

 

如此,id是数据库的触发器自动生成,又可以得到插入后实体的主键,即使开发人员忘记写selectKey也不会出错(或不需要得到主键)

posted on 2015-02-06 18:24  没糖的咖啡  阅读(1507)  评论(0编辑  收藏  举报

导航