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>

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>

上述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>

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>

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

转载于:https://www.cnblogs.com/fx2008/p/4114961.html

iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】相关推荐

  1. 五.获得MYSQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  2. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  3. JDBC学习笔记(6)——获取自动生成的主键值处理Blob数据库事务处理

    获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: 1 /** 2 * ...

  4. JDBC中事务、批量操作、大数据类型、获取自动生成的主键、等用法

    1 事务的用法 事务的ACID属性: 通俗的说事务:指一组操作,要么都成功执行,要么都不执行-->原子性在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性事务发生前 ...

  5. mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页

    Mapper接口: public int update(Admin admin); public Admin selectByUserName(String account); public List ...

  6. ibatis中主键自动增长(Oracle,Ms sql server ,mysql)

    http://morning2008.iteye.com/blog/611528 iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pr ...

  7. oracle创建表,序列,触发器,自动生成唯一主键

    数据库oracle和mysql插入数据的区别? mysql数据库主键字段是increament,则插入数据不需要插入主键字段.数据库会自动生成主键 oracle数据库主键字段必须创建序列,则插入数据必 ...

  8. Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新

    一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS    S ...

  9. sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI

    sql创建表主键gui 介绍 ( Introduction ) Oft times we are forced into situations where we clearly need to thi ...

最新文章

  1. Hinton胶囊理论代码开源,上线即受热捧
  2. jQuery的入口函数
  3. OCP读书笔记(16) - 管理资源
  4. 四大技巧轻松搞定云容器
  5. 如何使用python效率_Python的5中提高效率的用法
  6. 前端学习(1598):ref转发
  7. spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目
  8. opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分
  9. HDU 4547 CD操作
  10. quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
  11. AIRSDK 3.7 加载远程的含有代码的swf文件
  12. python pymysql 下载_Python PyMySQL模块下载和安装
  13. NI CompactRIO9035与elmo电机驱动联合仿真系统搭建教程(二)
  14. 手工清除U盘里的恶意病毒
  15. E盾网络验证企业版个人版离线版对接好的自绘界面4加密防破解易语言源码加密
  16. EtherNET/IP协议基础知识(下)
  17. 苹果手机用android,用习惯了苹果手机还能从苹果换到安卓吗?
  18. 大数据风控项目实战 Drools规则引擎
  19. 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程
  20. hbuilder 断点_Hbuilder配置php断点调试

热门文章

  1. 适合win7的python版本_windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2...
  2. jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
  3. 后盾网php多少钱_复合排水网价格多少钱
  4. 【一步步学小程序】3. 使用自定义组件(component)
  5. 【Android开发】:在任意目录执行NDK编译
  6. 《MySQL技术内幕:InnoDB存储引擎》读书笔记
  7. codevs——2894 Txx考试(背包)
  8. MySQL ERROR 1878 解决办法
  9. 免费正则表达式辅助工具(转)
  10. Wireless-N Configuration