iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】
iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。
Oracle设置
- <!-- 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配置
- <!-- 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配置随是官网提供的配置,但实际上却恰恰隐患重重!按下述配置,确保获得有效主键。
- <!-- 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配置
- <!-- 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>
通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。
转载于:https://www.cnblogs.com/fx2008/p/4114961.html
iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】相关推荐
- 五.获得MYSQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- JDBC学习笔记(6)——获取自动生成的主键值处理Blob数据库事务处理
获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: 1 /** 2 * ...
- JDBC中事务、批量操作、大数据类型、获取自动生成的主键、等用法
1 事务的用法 事务的ACID属性: 通俗的说事务:指一组操作,要么都成功执行,要么都不执行-->原子性在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性事务发生前 ...
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页
Mapper接口: public int update(Admin admin); public Admin selectByUserName(String account); public List ...
- ibatis中主键自动增长(Oracle,Ms sql server ,mysql)
http://morning2008.iteye.com/blog/611528 iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pr ...
- oracle创建表,序列,触发器,自动生成唯一主键
数据库oracle和mysql插入数据的区别? mysql数据库主键字段是increament,则插入数据不需要插入主键字段.数据库会自动生成主键 oracle数据库主键字段必须创建序列,则插入数据必 ...
- Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS S ...
- sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI
sql创建表主键gui 介绍 ( Introduction ) Oft times we are forced into situations where we clearly need to thi ...
最新文章
- Hinton胶囊理论代码开源,上线即受热捧
- jQuery的入口函数
- OCP读书笔记(16) - 管理资源
- 四大技巧轻松搞定云容器
- 如何使用python效率_Python的5中提高效率的用法
- 前端学习(1598):ref转发
- spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目
- opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分
- HDU 4547 CD操作
- quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
- AIRSDK 3.7 加载远程的含有代码的swf文件
- python pymysql 下载_Python PyMySQL模块下载和安装
- NI CompactRIO9035与elmo电机驱动联合仿真系统搭建教程(二)
- 手工清除U盘里的恶意病毒
- E盾网络验证企业版个人版离线版对接好的自绘界面4加密防破解易语言源码加密
- EtherNET/IP协议基础知识(下)
- 苹果手机用android,用习惯了苹果手机还能从苹果换到安卓吗?
- 大数据风控项目实战 Drools规则引擎
- 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程
- hbuilder 断点_Hbuilder配置php断点调试
热门文章
- 适合win7的python版本_windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2...
- jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
- 后盾网php多少钱_复合排水网价格多少钱
- 【一步步学小程序】3. 使用自定义组件(component)
- 【Android开发】:在任意目录执行NDK编译
- 《MySQL技术内幕:InnoDB存储引擎》读书笔记
- codevs——2894 Txx考试(背包)
- MySQL ERROR 1878 解决办法
- 免费正则表达式辅助工具(转)
- Wireless-N Configuration