解决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也不会出错(或不需要得到主键)

转载于:https://www.cnblogs.com/meitangdekafei/p/4277783.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值