转载他人的文章
Batis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。
Oracle设置
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>
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配置
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>
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配置随是官网提供的配置,但实际上却恰恰隐患重重!按下述配置,确保获得有效主键。
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>
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配置
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>
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>
通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。
相关推荐
该示例演示使用iBATIS操纵Oracle、MySQL和MS SERVER三种数据库(实现查询与新增动作),只需要修改配置档与SQL影射档即可,而Java部分的代码不用修改。本人觉得,该框架一个非常简单、使用方便的持久层框架。其中:...
ibatis2.0+sqlserver2005环境搭建
平常积累的spring,Structs2,ibatis框架jar包,oracle,mysql,sql等数据库jar包,全部是自己开发的时候用的,现在贡献出来,分数虽然高了点,但是确实不要你费心去找,有时会有的不可以用。
sqlserver Ibatis XML自动生成工具,本人正在使用的工具;下载后配置XML数据库连接和用户名密码,输入表名即可生成
webwork+ibatis+sqlserver2000完整实例
网上关于ibatis代码自动生成的例子不少,但是让人还是感到一头雾水,本文附添加过程以及基础包。
08_ibatis教程_sql主键生成方式.rar
本资源适合刚刚接触ibatis+oracle的小伙伴使用,欢迎交流,吐槽。
ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成
打包下载 ibatis驱动+Mysql驱动+SQL驱动
08_ibatis教程_sql主键生成方式.zip 08_ibatis教程_sql主键生成方式.zip
在ibatis日志信息中打印SQL语句的方法(个人总结)
ibatis+oracle简单实例,其中包括ibatis jar包以及oracle驱动包
ibatis 开发指南 和 iBATIS-SqlMaps两本图书
该资源适合准备接触,或者新接触的小伙伴使用,欢迎交流吐槽!
C#中iBatis连接mySQL使用的DLL
Ibatis连接MySQL数据库实例 有代码 项目下下来直接跑就行了,不过要修改数据库配置信息哦 跑不起来我吃翔三斤
iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,这是一个...
ibatis调用oracle存储过程分页
我做的是 spring + quartz+ mysql and oracle 持久层 ibatis and hibernate 项目用eclipse 导入 不同的数据库 请在数据库运行不同的SQL 脚本 用hibernate 时注意 是什么数据库 hibernate.properties 文件第一二行...