http://morning2008.iteye.com/blog/611528

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

Oracle设置

Xml代码  
  1. <!-- Oracle SEQUENCE -->
  2. <insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
  3. <selectKey resultClass="int" keyProperty="id" type="pre">
  4. <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]>
  5. </selectKey>
  6. <![CDATA[insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values(#id#,#description#)]]>
  7. </insert>
<!-- Oracle SEQUENCE -->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product"> <selectKey resultClass="int" keyProperty="id" type="pre"> <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]> </selectKey> <![CDATA[insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values(#id#,#description#)]]>
</insert>

MS SQL Server配置

Xml代码  
  1. <!-- Microsoft SQL Server IDENTITY Column -->
  2. <insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
  3. <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#) ]]>
  4. <selectKey resultClass="int" keyProperty="id" type="post">
  5. <![CDATA[SELECT @@IDENTITY AS ID ]]>
  6. <!-- 该方法不安全 应当用SCOPE_IDENTITY() 但这个函数属于域函数,需要在一个语句块中执行。 -->
  7. </selectKey>
  8. </insert>
<!-- Microsoft SQL Server IDENTITY Column -->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product"> <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#) ]]> <selectKey resultClass="int" keyProperty="id" type="post"> <![CDATA[SELECT @@IDENTITY AS ID ]]><!-- 该方法不安全 应当用SCOPE_IDENTITY() 但这个函数属于域函数,需要在一个语句块中执行。 --></selectKey>
</insert>

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

Xml代码  
  1. <!-- Microsoft SQL Server IDENTITY Column 改进-->
  2. <insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
  3. <selectKey resultClass="int" keyProperty="id">
  4. <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#)
  5. SELECT SCOPE_IDENTITY() AS ID ]]>
  6. </selectKey>
  7. </insert>
<!-- Microsoft SQL Server IDENTITY Column 改进-->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product"> <selectKey resultClass="int" keyProperty="id"> <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#)SELECT SCOPE_IDENTITY() AS ID ]]></selectKey>
</insert>

MySQL配置

Xml代码  
  1. <!-- MySQL Last Insert Id -->
  2. <insert id="insertProduct-Mysql" parameterClass="com.domain.Product">
  3. <![CDATA[insert into PRODUCT(PRD_DESCRIPTION) values(#description#)]]>
  4. <selectKey resultClass="int" keyProperty="id">
  5. <![CDATA[SELECT LAST_INSERT_ID() AS ID ]]>
  6. <!-- 该方法LAST_INSERT_ID()与数据库连接绑定,同属统一会话级别,不会发生上述MS SQL Server的函数问题。 -->
  7. </selectKey>
  8. </insert>
<!-- MySQL Last Insert Id -->
<insert id="insertProduct-Mysql" parameterClass="com.domain.Product"><![CDATA[insert into PRODUCT(PRD_DESCRIPTION) values(#description#)]]> <selectKey resultClass="int" keyProperty="id"><![CDATA[SELECT LAST_INSERT_ID() AS ID ]]> <!-- 该方法LAST_INSERT_ID()与数据库连接绑定,同属统一会话级别,不会发生上述MS SQL Server的函数问题。 --></selectKey>
</insert>

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

ibatis中主键自动增长(Oracle,Ms sql server ,mysql)相关推荐

  1. mysql sql 设置主键自动增长_Mysql、Sql Server、Oracle主键自动增长的设置

    1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id ...

  2. iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】

    iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post). Oracle设置 Xml代码   <!-- O ...

  3. oracle中主键自增长,oracle 数据库主键自动增长方法

    oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能,如要实现可以用触发器. 首先就是建立一个序列,序列有有自动增值的功能,再建立一个触发器. 如: 建立一个序列 CREATE SEQU ...

  4. access中主键自动增长_ACCESS与EXCEL融合应用系列(一) :把数据导入Access

    Excel无疑是我们手头最便利的报表汇总及数据分析利器,但由于微软对EXCEL定位的问题,当我们遇到大容量数据需要存储.处理和分析的时候,excel就显得力不从心了.这种情况下我们有两种选择:①加装P ...

  5. Mysql,SqlServer,Oracle主键自动增长的设置

    Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...

  6. oracle主键自动增长

    oracle的主键没有自动怎样功能,小编今天给大家说说怎样设置主键自动增长: 1.创建表: create table tb_user ( id NUMBER(10) not null, createt ...

  7. Oracle中主键自增长

    最近在学习Oracle和MySql,MySql有自动配置主键自增长auto_increment,这样在输入数据的时候可以不考虑主键的添加,方便对数据库的操作. 在Oracle中设置自增长首先用到seq ...

  8. mysql设置主键自动增长

    1.不设置主键的增长起点(默认1开始) create table user(usernc varchar(10) not null,id int not null auto_increment,nam ...

  9. 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

最新文章

  1. lazyload.js详解
  2. 科技领袖技术大亨们被指是现代强盗:不仅赚钱还想垄断
  3. 配送A/B评估体系建设实践
  4. 原来数学才是世界上最浪漫的学科!
  5. python怎样实现多表连接_Python Day45多表连接查询
  6. stimulsoft入门教程:分层报表(下)
  7. VC知识库文章 - NT DDK的安装以及设备驱动程序的编译
  8. 神经网络学习小记录59——Pytorch搭建常见分类网络平台(VGG16、MobileNetV2、ResNet50)
  9. TBSchedule调度平台疑难解答
  10. java实现web ssh客户端
  11. 你所想要了解的美国人工智能专业
  12. 接口获取行政区划代码_调用百度api利用名称查找该名称的省市县以及行政区划代码...
  13. Windows电脑如何开启CPU虚拟化
  14. Sequel pro 连接mysql 报MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded...
  15. ORA-01950: 对表空间 'USERS' 无权限
  16. 09年国内外免费杀毒软件大收罗
  17. java实现光盘摆渡_一种光盘摆渡机的制作方法
  18. 日知录-章0:当我们在谈论大数据时,我们在谈什么?
  19. MQTT服务质量等级及抓包分析
  20. Qt项目升级到Qt6经验总结(别人写的,仅作记录)

热门文章

  1. 【数据结构与算法】之深入解析“水壶问题”的求解思路与算法示例
  2. HarmonyOS之深入解析编译构建的配置和代码混淆
  3. Selenium Xpath元素无法定位 NoSuchElementException: Message: no such element: Unable to locate element
  4. 【机器视觉】 dev_set_window_extents算子
  5. 【MFC】创建第一个应用程序
  6. 【Linux】一步一步学Linux——at命令(133)
  7. 三角网导线平差实例_导线测量平差实例
  8. android传递布局到下个页面,浅入浅出Android(017):当前Activity向下一个Activity切换,并传递数据...
  9. window系统无限试用 JAVA IDEA不限版本
  10. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法