本文和大家讲一下如何使用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>
通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。
相关推荐
我做的是 spring + quartz+ mysql and oracle 持久层 ibatis and hibernate 项目用eclipse 导入 不同的数据库 请在数据库运行不同的SQL 脚本 用hibernate 时注意 是什么数据库 hibernate.properties 文件第一二行...
本篇将深入探讨如何使用Ibatis连接MSSQL与MySQL数据库,并结合Junit4进行测试。 首先,Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者通过SQL语句直接操作数据库,同时避免了传统的JDBC代码繁琐。在...
在Ibatis中,只需在Mapper XML文件中的`<insert>`标签中设置`useGeneratedKeys="true"`和`keyProperty="id"`,就可以让数据库自动生成主键。 4. **雪花算法(Snowflake Algorithm)**: 在分布式环境下,为了保证...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
Ibatis通过`useGeneratedKeys`和`keyProperty`属性,配合SQL的`SELECT SEQ_NAME.NEXTVAL FROM DUAL`,可以在插入后自动获取生成的主键值。 3. **Identity(自动增长)**:对于支持自动增长主键的数据库,如MySQL,...
本压缩包“jar框架包2”聚焦于四大关键技术:Ibatis、Spring、Oracle和MySQL,这四者在企业级Java应用开发中扮演着至关重要的角色。 Ibatis,全名MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...
经过不断的搜寻,发现很多大神提供的springmvc开发实例存在某些漏洞,对我等又赶时间,又静不下心的人甚是难过,本人经过几天的努力终于在前人基础上做出了完善,提供一个实例给大家,让大家能通过直观的认识快速学习
这段配置表示在插入用户后,使用MySQL的`LAST_INSERT_ID()`函数获取自增主键的值,并将其赋给User对象的id属性。 通过学习“08_传智播客ibatis教程_sql主键生成方式”,开发者能够熟练掌握如何在Ibatis中配置和使用...
ibatis 读取oracle clob类型
在IT行业中,数据库管理和持久化框架是至关重要的技术领域,而`ibatis+oracle`的组合就是这样的一个经典实例。Ibatis,一个轻量级的Java ORM(对象关系映射)框架,允许开发者将SQL语句与Java代码分离,提高了数据库...
Oracle 和 iBatis 是两个在 Java 开发中广泛使用的数据库管理和持久层框架。iBatis 是一个优秀的 SQL 映射框架,它允许开发者将 SQL 查询直接写入 XML 文件,从而与 Java 代码分离,提高可维护性和灵活性。而 Oracle...
4. **事务管理**:Ibatis.net 支持手动和自动的事务管理。对于Oracle,由于其支持分布式事务,可以在需要时启用分布式事务来保证数据的一致性。 5. **参数映射与结果集映射**:通过`<parameterMap>`和`<resultMap>`...
iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,这是一个...
- Oracle的PL/SQL OUT参数需要通过Map来传递,而IN/OUT参数需要在调用后检查Map来获取其值。 - 如果存储过程返回多个结果集,可以通过`<resultMap>`标签和`<collection>`标签来处理。 通过以上步骤,你可以在...
在IT行业中,数据库管理和数据操作是至关重要的环节。Oracle数据库是一个功能强大的关系型数据库管理系统,广泛应用于企业级...通过阅读指定的博客链接,可以获取更多关于iBATIS和Oracle CLOB操作的实战经验和技巧。
标题 "ibatis oracle clob" 涉及到的是在Java开发中,使用iBATIS框架与Oracle数据库交互时处理CLOB(Character Large Object)类型数据的问题。CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的...
ibatis调用oracle存储过程分页
ojdbc14.jar包含了Oracle JDBC Driver,允许Java代码通过JDBC API执行SQL语句、获取结果集、处理事务等。注意,这个版本的驱动适用于Java 1.4,如果使用更高版本的Java,可能需要更新到ojdbc6.jar或ojdbc8.jar等兼容...
这是Ibatis.net 1.x 官方最后维护的版本,从官方的svn下载下来的 包括.net framework 2.0/3.5/4.0 三个版本的project 与网络上流传的版本不同的是,Castle组件更新为了2.5.1版本
例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段,可以使用以下SQL语句进行树形查询: ```sql SELECT level, connect_by_root id AS root_id, id, name FROM ...