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

news/2024/7/7 21:33:32

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


http://lihuaxi.xjx100.cn/news/247644.html

相关文章

WSFC 仲裁模型选择

今天我们再来详细讨论下关于WSFC的仲裁模型&#xff0c;主要仲裁模型的优缺点&#xff0c;应该如何去思考选择最佳合适方案WSFC引入仲裁&#xff0c;主要有两个目的跟踪群集当前运作票数是否符合仲裁模型协定&#xff0c;如果低于最少允许节点&#xff0c;则决定关闭群集&#…

Golang 本地帮助文档

2019独角兽企业重金招聘Python工程师标准>>> godoc -http:8000 url: http://127.0.0.1:8000 转载于:https://my.oschina.net/koalaone/blog/169626

车载卫星导航

除了地图标准问题外&#xff0c;定位也是面临难题。地图和定位是一体的&#xff0c;没有高精度定位&#xff0c;高精度地图毫无意义。 有关无人车的定位有两种&#xff0c;一种称之为绝对定位&#xff0c;不依赖任何参照物和任何先验信息&#xff0c;直接给出无人车相对地球坐…

matlab中cell函数使用

cell为mtalab提供的一种数据类型。 语法&#xff1a;xcell(m,n) 表示创建m*n的cell类型数据。每个单元都是独立的&#xff0c;可以存储任何数据。 xcell(2,3) x{1,1}[1,3,4,5,6] x{1,2}[J,e,r,r,y] x{1,3}50 x{2,1}[4 5;6 7] x 23 cell 数组[15 double] Jerry [50][22 d…

获取指定日期之间的各个周和月

2019独角兽企业重金招聘Python工程师标准>>> 日志格式化类 Date.class.php <?php class Datefmt{function __construct() {}/*** 根据指定日期获取所在周的起始时间和结束时间*/public function get_weekinfo_by_date($date) {$idx strftime("%u", s…

UML部署图(转载)

概述: 部署图用于可视化的软件组件部署的系统中的物理组件的拓扑结构。 因此&#xff0c;部署图是用来描述一个系统的静态部署视图。部署图由节点和它们之间的关系。 目的: 部署名称本身描述的原理图的目的。部署图用于描述软件组件部署的硬件组件。组件图和部署图是密切相关的…

阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器

天猫精灵X1的升级版X2没有预期出现&#xff0c;而人机交互系统AliGenie升级到最新的2.0版本&#xff0c;功能强大。 3月22日&#xff0c;阿里巴巴人工智能实验室总经理浅雪&#xff08;陈丽娟&#xff09;发布AliGenie2.0系统&#xff0c;它最大的改进是在1.0的基础上增加了视觉…

Java8中Stream流对集合操作

java8中Stream流引入函数式编程思想&#xff0c;主要配合各种接口、lambda表达式、方法引用等方式&#xff0c;为集合的遍历、过滤、映射等提供非常“优雅”的操作方式。 Student.java public class Student {private String name;private int age;private List<Double>…