iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。
大家一定要注意不同的数据库这个Type的设置,象MysqL,如果设置了,则返回值为0.
Oracle设置
Xml代码
<!-- 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配置
Xml代码
<!-- 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配置随是官网提供的配置,但实际上却恰恰隐患重重!按下述配置,确保获得有效主键。
Xml代码
<!-- 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配置
Xml代码
<!-- 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、MySQL和MS SERVER三种数据库(实现查询与新增动作),只需要修改配置档与SQL影射档即可,而Java部分的代码不用修改。本人觉得,该框架一个非常简单、使用方便的持久层框架。其中:...
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
在Ibatis中,可以通过`<selectKey>`标签配合`keyProperty`指定主键属性,`resultType`指定返回类型,然后在SQL语句中调用序列生成器。 3. **自增(Identity)**: MySQL、SQL Server等数据库支持字段的自动递增...
【标题】"webwork+ibatis+sqlserver2000"所代表的是一个基于WebWork框架、iBATIS持久层框架以及SQL Server 2000数据库的完整应用程序实例。这个组合在早期的Java Web开发中较为常见,用于构建企业级应用。 ...
在本教程中,我们将详细介绍如何搭建一个基于Ibatis 2.3.4.726版本和SQL Server 2005的开发环境。Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了数据库操作的灵活性。 首先,确保你...
IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南
SQLServer Ibatis XML自动生成工具是一款实用的开发辅助软件,主要针对Java开发人员,特别是那些在项目中使用Ibatis作为持久层框架的开发者。这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML...
在IT行业中,数据库管理和持久化框架是至关重要的技术领域,而`ibatis+oracle`的组合就是这样的一个经典实例。Ibatis,一个轻量级的Java ORM(对象关系映射)框架,允许开发者将SQL语句与Java代码分离,提高了数据库...
在本教程"08_传智播客ibatis教程_sql主键生成方式"中,你将会深入学习到如何在Ibatis中配置和使用上述各种主键生成策略,通过实例和代码讲解,帮助你更好地理解和掌握Ibatis在处理SQL主键生成方面的技巧和最佳实践。...
本文主要探讨的是数据库迁移的过程以及Oracle、SQL Server、MySQL这三种常见数据库之间的差异。在进行数据库迁移时,通常涉及以下几个关键步骤: 1. **数据库建表脚本的修改**: - 数据类型转换:由于不同数据库的...
本压缩包“jar框架包2”聚焦于四大关键技术:Ibatis、Spring、Oracle和MySQL,这四者在企业级Java应用开发中扮演着至关重要的角色。 Ibatis,全名MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...
ojdbc14.jar包含了Oracle JDBC Driver,允许Java代码通过JDBC API执行SQL语句、获取结果集、处理事务等。注意,这个版本的驱动适用于Java 1.4,如果使用更高版本的Java,可能需要更新到ojdbc6.jar或ojdbc8.jar等兼容...
Struts2、Spring、Hibernate、JDK、MySQL和iBatis是Java开发中常见的六大核心技术,它们构建了企业级Web应用程序的基础架构。下面将详细解释这些技术及其在实际开发中的应用。 1. Struts2:Struts2是一个开源的MVC...
这段配置表示在插入用户后,使用MySQL的`LAST_INSERT_ID()`函数获取自增主键的值,并将其赋给User对象的id属性。 通过学习“08_传智播客ibatis教程_sql主键生成方式”,开发者能够熟练掌握如何在Ibatis中配置和使用...
Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...
【标题】"Ibatis+Oracle(含对应数据库sql) 源码" 是一个学习和实践Ibatis与Oracle数据库结合使用的资源包。这个资源对于初学者来说尤其有帮助,因为它包含了一个实际项目的源代码和相应的SQL脚本,使得学习者能够...
2. **自增**:在MySQL中,自增列用`AUTO_INCREMENT`关键字定义,而在Oracle和SQL Server中,通常使用序列(Sequences)来实现类似功能。 3. **分页**:MySQL常使用`LIMIT`和`OFFSET`进行分页,而SQL Server和Oracle...
### iBATIS-SqlMaps2入门代码文档知识点详解 #### 一、简介 iBATIS-SqlMaps2是一款用于简化Java应用程序与数据库交互过程的框架。该框架通过配置文件定义了对象关系映射规则,使得开发者能够更加专注于业务逻辑而...
《Java经典教程——iBatis开发指南》是一本专注于Java编程和iBatis框架实践的教程,旨在帮助开发者深入理解和高效应用iBatis这一强大的数据访问层解决方案。iBatis,由MyBatis的前身,是一款优秀的持久层框架,它...
ibatis 读取oracle clob类型