码迷,mamicode.com
首页 > 其他好文 > 详细

解决mybatis3添加数据返回主键

时间:2015-02-06 20:20:11      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

最近项目用到插入记录后,根据生成的主键,再做其他操作,但是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也不会出错(或不需要得到主键)

解决mybatis3添加数据返回主键

标签:

原文地址:http://www.cnblogs.com/meitangdekafei/p/4277783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!