`

妙用Type属性---Ibatis 关于Oracle,SQLServer,MysqL获取Insert主键,

 
阅读更多
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 SQL SERVER数据库使用示例

    该示例演示使用iBATIS操纵Oracle、MySQL和MS SERVER三种数据库(实现查询与新增动作),只需要修改配置档与SQL影射档即可,而Java部分的代码不用修改。本人觉得,该框架一个非常简单、使用方便的持久层框架。其中:...

    iBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

    08_ibatis教程_sql主键生成方式.rar

    在Ibatis中,可以通过`&lt;selectKey&gt;`标签配合`keyProperty`指定主键属性,`resultType`指定返回类型,然后在SQL语句中调用序列生成器。 3. **自增(Identity)**: MySQL、SQL Server等数据库支持字段的自动递增...

    webwork+ibatis+sqlserver2000

    【标题】"webwork+ibatis+sqlserver2000"所代表的是一个基于WebWork框架、iBATIS持久层框架以及SQL Server 2000数据库的完整应用程序实例。这个组合在早期的Java Web开发中较为常见,用于构建企业级应用。 ...

    ibatis2.0+sqlserver2005环境搭建

    在本教程中,我们将详细介绍如何搭建一个基于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 开发指南IBatis-SQL-MAPs 开发指南

    sqlserver Ibatis XML自动生成工具

    SQLServer Ibatis XML自动生成工具是一款实用的开发辅助软件,主要针对Java开发人员,特别是那些在项目中使用Ibatis作为持久层框架的开发者。这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML...

    ibatis+oracle实例

    在IT行业中,数据库管理和持久化框架是至关重要的技术领域,而`ibatis+oracle`的组合就是这样的一个经典实例。Ibatis,一个轻量级的Java ORM(对象关系映射)框架,允许开发者将SQL语句与Java代码分离,提高了数据库...

    08_ibatis教程_sql主键生成方式.zip

    在本教程"08_传智播客ibatis教程_sql主键生成方式"中,你将会深入学习到如何在Ibatis中配置和使用上述各种主键生成策略,通过实例和代码讲解,帮助你更好地理解和掌握Ibatis在处理SQL主键生成方面的技巧和最佳实践。...

    数据库迁移及区别比较(Oracle,Sql Server,MySql).pdf

    本文主要探讨的是数据库迁移的过程以及Oracle、SQL Server、MySQL这三种常见数据库之间的差异。在进行数据库迁移时,通常涉及以下几个关键步骤: 1. **数据库建表脚本的修改**: - 数据类型转换:由于不同数据库的...

    jar框架包2 ibatis spring oracle mysql

    本压缩包“jar框架包2”聚焦于四大关键技术:Ibatis、Spring、Oracle和MySQL,这四者在企业级Java应用开发中扮演着至关重要的角色。 Ibatis,全名MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...

    ibatis连接oracle所需的jar包

    ojdbc14.jar包含了Oracle JDBC Driver,允许Java代码通过JDBC API执行SQL语句、获取结果集、处理事务等。注意,这个版本的驱动适用于Java 1.4,如果使用更高版本的Java,可能需要更新到ojdbc6.jar或ojdbc8.jar等兼容...

    Struts-Spring-Hibernate-MySql-JDK-ibatis

    Struts2、Spring、Hibernate、JDK、MySQL和iBatis是Java开发中常见的六大核心技术,它们构建了企业级Web应用程序的基础架构。下面将详细解释这些技术及其在实际开发中的应用。 1. Struts2:Struts2是一个开源的MVC...

    08_传智播客ibatis教程_sql主键生成方式

    这段配置表示在插入用户后,使用MySQL的`LAST_INSERT_ID()`函数获取自增主键的值,并将其赋给User对象的id属性。 通过学习“08_传智播客ibatis教程_sql主键生成方式”,开发者能够熟练掌握如何在Ibatis中配置和使用...

    ibatis、mybatis官方教程文档集合(含Manning.iBATIS.in.Action)

    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 ...

    sql-map-2.dtd和sql-map-config-2.dtd

    这两个DTD(Document Type Definition)文件是Ibatis配置文件的定义文档,用于验证XML文件的结构和元素,确保其符合规范。 首先,我们来看“sql-map-2.dtd”。这个文件定义了SqlMap配置文件的元素和属性,是Ibatis ...

    Ibatis+Oracle(含对应数据库sql) 源码

    【标题】"Ibatis+Oracle(含对应数据库sql) 源码" 是一个学习和实践Ibatis与Oracle数据库结合使用的资源包。这个资源对于初学者来说尤其有帮助,因为它包含了一个实际项目的源代码和相应的SQL脚本,使得学习者能够...

    数据库迁移及区别比较(Oracle,Sql Server,MySql).docx

    2. **自增**:在MySQL中,自增列用`AUTO_INCREMENT`关键字定义,而在Oracle和SQL Server中,通常使用序列(Sequences)来实现类似功能。 3. **分页**:MySQL常使用`LIMIT`和`OFFSET`进行分页,而SQL Server和Oracle...

    iBATIS-SqlMaps2入门代码文档

    ### iBATIS-SqlMaps2入门代码文档知识点详解 #### 一、简介 iBATIS-SqlMaps2是一款用于简化Java应用程序与数据库交互过程的框架。该框架通过配置文件定义了对象关系映射规则,使得开发者能够更加专注于业务逻辑而...

    java经典教程-----ibatis开发指南

    《Java经典教程——iBatis开发指南》是一本专注于Java编程和iBatis框架实践的教程,旨在帮助开发者深入理解和高效应用iBatis这一强大的数据访问层解决方案。iBatis,由MyBatis的前身,是一款优秀的持久层框架,它...

Global site tag (gtag.js) - Google Analytics