`
sunbin
  • 浏览: 352531 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ibatis获取主键自动增长ID(Oracle/MSSQL/mysql),取得刚插入的ID编号

 
阅读更多

 

 

本文和大家讲一下如何使用ibatis来获取刚刚插入数据的ID的方法,也是在网上找到的,挺实用。

iBatis的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> 

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> 
上述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> 
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>
通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。

分享到:
评论

相关推荐

    quartz+ibatis+oracle/mysql\quartz+hibernate+oracle/mysql

    我做的是 spring + quartz+ mysql and oracle 持久层 ibatis and hibernate 项目用eclipse 导入 不同的数据库 请在数据库运行不同的SQL 脚本 用hibernate 时注意 是什么数据库 hibernate.properties 文件第一二行...

    关于ibatis连接MSSQL和MySQL的CRUD

    本篇将深入探讨如何使用Ibatis连接MSSQL与MySQL数据库,并结合Junit4进行测试。 首先,Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者通过SQL语句直接操作数据库,同时避免了传统的JDBC代码繁琐。在...

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

    在Ibatis中,只需在Mapper XML文件中的`&lt;insert&gt;`标签中设置`useGeneratedKeys="true"`和`keyProperty="id"`,就可以让数据库自动生成主键。 4. **雪花算法(Snowflake Algorithm)**: 在分布式环境下,为了保证...

    Ibatis查询Id列表.doc

    根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...

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

    Ibatis通过`useGeneratedKeys`和`keyProperty`属性,配合SQL的`SELECT SEQ_NAME.NEXTVAL FROM DUAL`,可以在插入后自动获取生成的主键值。 3. **Identity(自动增长)**:对于支持自动增长主键的数据库,如MySQL,...

    jar框架包2 ibatis spring oracle mysql

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

    sprngmvc+ibatis+oracle/mysql包含上传文件整合实例

    经过不断的搜寻,发现很多大神提供的springmvc开发实例存在某些漏洞,对我等又赶时间,又静不下心的人甚是难过,本人经过几天的努力终于在前人基础上做出了完善,提供一个实例给大家,让大家能通过直观的认识快速学习

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

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

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    ibatis+oracle实例

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

    oracle ibatis 配置

    Oracle 和 iBatis 是两个在 Java 开发中广泛使用的数据库管理和持久层框架。iBatis 是一个优秀的 SQL 映射框架,它允许开发者将 SQL 查询直接写入 XML 文件,从而与 Java 代码分离,提高可维护性和灵活性。而 Oracle...

    Ibatis.net+ oracle 简单事例

    4. **事务管理**:Ibatis.net 支持手动和自动的事务管理。对于Oracle,由于其支持分布式事务,可以在需要时启用分布式事务来保证数据的一致性。 5. **参数映射与结果集映射**:通过`&lt;parameterMap&gt;`和`&lt;resultMap&gt;`...

    iBatis简单入门实例(以Oracle为例)

    iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,这是一个...

    ibatis调用oracle的函数,存储过程的方法

    - Oracle的PL/SQL OUT参数需要通过Map来传递,而IN/OUT参数需要在调用后检查Map来获取其值。 - 如果存储过程返回多个结果集,可以通过`&lt;resultMap&gt;`标签和`&lt;collection&gt;`标签来处理。 通过以上步骤,你可以在...

    iBATIS操作Oracle CLOB数据

    在IT行业中,数据库管理和数据操作是至关重要的环节。Oracle数据库是一个功能强大的关系型数据库管理系统,广泛应用于企业级...通过阅读指定的博客链接,可以获取更多关于iBATIS和Oracle CLOB操作的实战经验和技巧。

    ibatis oracle clob

    标题 "ibatis oracle clob" 涉及到的是在Java开发中,使用iBATIS框架与Oracle数据库交互时处理CLOB(Character Large Object)类型数据的问题。CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的...

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    ibatis连接oracle所需的jar包

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

    Ibatis.net 1.6.2 for .Net Framework 3.5/4.0最新版 源代码

    这是Ibatis.net 1.x 官方最后维护的版本,从官方的svn下载下来的 包括.net framework 2.0/3.5/4.0 三个版本的project 与网络上流传的版本不同的是,Castle组件更新为了2.5.1版本

    ibatis下oracle树查询

    例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段,可以使用以下SQL语句进行树形查询: ```sql SELECT level, connect_by_root id AS root_id, id, name FROM ...

Global site tag (gtag.js) - Google Analytics