mysql selectkey 设置_iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)

selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。

Oracle设置

MS SQL Server配置

上述MS SQL Server配置随是官网提供的配置,但实际上却恰恰隐患重重!按下述配置,确保获得有效主键。

SELECT SCOPE_IDENTITY() AS ID ]]>

MySQL配置

通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2008-07-16 22:10

浏览 9673

论坛回复 / 浏览 (5 / 15479)

评论

5 楼

snowolf

2009-07-15

xnxqs 写道

Xml代码

SELECT SCOPE_IDENTITY() AS ID ]]>

这个你试过吗?如果直接在selectKey里面写插入语句是会报错的:

by: com.microsoft.sqlserver.jdbc.SQLServerException: 未能准备语句。

我现在也是被这个问题所困扰,用 @@IDENTITY 如果在同一事务内插入二个表,得到的结果不一定是你想要的,但用SCOPE_IDENTITY() 又没法用。不知道其它人是怎么解决。其实网上很多例子是这样写的。

insert into PRODUCT (PRD_DESCRIPTION) values(#description#)

但实际这样就把它当二条语句执行了。依旧得不到ID。按你的方法又会报错。怎么办???请楼下的给出解答。我这边IE有问题,没法用UBB。还请见谅

我写出来,当然是我测试过的!环境是 sql server 2005 绝对没有问题

4 楼

xnxqs

2009-07-15

Xml代码

SELECT SCOPE_IDENTITY() AS ID ]]>

这个你试过吗?如果直接在selectKey里面写插入语句是会报错的:

by: com.microsoft.sqlserver.jdbc.SQLServerException: 未能准备语句。

我现在也是被这个问题所困扰,用 @@IDENTITY 如果在同一事务内插入二个表,得到的结果不一定是你想要的,但用SCOPE_IDENTITY() 又没法用。不知道其它人是怎么解决。其实网上很多例子是这样写的。

insert into PRODUCT (PRD_DESCRIPTION) values(#description#)

但实际这样就把它当二条语句执行了。依旧得不到ID。按你的方法又会报错。怎么办???请楼下的给出解答。我这边IE有问题,没法用UBB。还请见谅

3 楼

penghao122

2008-07-23

单独写一个主键生成器啦。没有配置那么麻烦

2 楼

snowolf

2008-07-20

tibetjungle 写道

snowolf 写道

iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成还是后生成。

通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。

mysql中不是可以用auto_increment吗?为什么要这样在ibatis中用?ms sql中也有identity可以用啊,干吗用这么麻烦的方法?如果是为了兼容其他数据库,还是可以考虑。

可能我没有说清楚,我要在插入表的时候获得的当前的主键,自增是有的。如果你要再插入动作的时候获得,一般都怎么做呢?

1 楼

tibetjungle

2008-07-19

snowolf 写道

iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成还是后生成。

通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。

mysql中不是可以用auto_increment吗?为什么要这样在ibatis中用?ms sql中也有identity可以用啊,干吗用这么麻烦的方法?如果是为了兼容其他数据库,还是可以考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值