ibatis中主键自动增长(Oracle,Ms sql server ,mysql)
http://morning2008.iteye.com/blog/611528
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>
<!-- 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>
<!-- 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>
<!-- 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>
<!-- 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)相关推荐
- mysql sql 设置主键自动增长_Mysql、Sql Server、Oracle主键自动增长的设置
1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id ...
- iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】
iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post). Oracle设置 Xml代码 <!-- O ...
- oracle中主键自增长,oracle 数据库主键自动增长方法
oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能,如要实现可以用触发器. 首先就是建立一个序列,序列有有自动增值的功能,再建立一个触发器. 如: 建立一个序列 CREATE SEQU ...
- access中主键自动增长_ACCESS与EXCEL融合应用系列(一) :把数据导入Access
Excel无疑是我们手头最便利的报表汇总及数据分析利器,但由于微软对EXCEL定位的问题,当我们遇到大容量数据需要存储.处理和分析的时候,excel就显得力不从心了.这种情况下我们有两种选择:①加装P ...
- Mysql,SqlServer,Oracle主键自动增长的设置
Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...
- oracle主键自动增长
oracle的主键没有自动怎样功能,小编今天给大家说说怎样设置主键自动增长: 1.创建表: create table tb_user ( id NUMBER(10) not null, createt ...
- Oracle中主键自增长
最近在学习Oracle和MySql,MySql有自动配置主键自增长auto_increment,这样在输入数据的时候可以不考虑主键的添加,方便对数据库的操作. 在Oracle中设置自增长首先用到seq ...
- mysql设置主键自动增长
1.不设置主键的增长起点(默认1开始) create table user(usernc varchar(10) not null,id int not null auto_increment,nam ...
- 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
最新文章
- lazyload.js详解
- 科技领袖技术大亨们被指是现代强盗:不仅赚钱还想垄断
- 配送A/B评估体系建设实践
- 原来数学才是世界上最浪漫的学科!
- python怎样实现多表连接_Python Day45多表连接查询
- stimulsoft入门教程:分层报表(下)
- VC知识库文章 - NT DDK的安装以及设备驱动程序的编译
- 神经网络学习小记录59——Pytorch搭建常见分类网络平台(VGG16、MobileNetV2、ResNet50)
- TBSchedule调度平台疑难解答
- java实现web ssh客户端
- 你所想要了解的美国人工智能专业
- 接口获取行政区划代码_调用百度api利用名称查找该名称的省市县以及行政区划代码...
- Windows电脑如何开启CPU虚拟化
- Sequel pro 连接mysql 报MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded...
- ORA-01950: 对表空间 'USERS' 无权限
- 09年国内外免费杀毒软件大收罗
- java实现光盘摆渡_一种光盘摆渡机的制作方法
- 日知录-章0:当我们在谈论大数据时,我们在谈什么?
- MQTT服务质量等级及抓包分析
- Qt项目升级到Qt6经验总结(别人写的,仅作记录)
热门文章
- 【数据结构与算法】之深入解析“水壶问题”的求解思路与算法示例
- HarmonyOS之深入解析编译构建的配置和代码混淆
- Selenium Xpath元素无法定位 NoSuchElementException: Message: no such element: Unable to locate element
- 【机器视觉】 dev_set_window_extents算子
- 【MFC】创建第一个应用程序
- 【Linux】一步一步学Linux——at命令(133)
- 三角网导线平差实例_导线测量平差实例
- android传递布局到下个页面,浅入浅出Android(017):当前Activity向下一个Activity切换,并传递数据...
- window系统无限试用 JAVA IDEA不限版本
- 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法