`
morning2008
  • 浏览: 115221 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

ibatis中主键自动增长(Oracle,Ms sql server ,mysql)

 
阅读更多

iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。

Oracle设置

<!-- 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配置

<!-- 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配置随是官网提供的配置,但实际上却恰恰隐患重重!按下述配置,确保获得有效主键。

<!-- 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配置

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


通过以上方式,可以最大程度上确保插入数据的时候获得当前自增主键。

分享到:
评论

相关推荐

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

    MySQL、SQL Server等数据库支持字段的自动递增特性。在Ibatis中,只需在Mapper XML文件中的`&lt;insert&gt;`标签中设置`useGeneratedKeys="true"`和`keyProperty="id"`,就可以让数据库自动生成主键。 4. **雪花算法...

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

    3. **Identity(自动增长)**:对于支持自动增长主键的数据库,如MySQL,Ibatis可以通过`identityInsert`属性开启自动增长功能。插入数据后,数据库会自动为新记录分配一个唯一的主键值。 4. **HiLo算法**:在大...

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

    2. **身份列(Identity)**:在MySQL、SQL Server等支持自动增长的数据库中,可以设置某一列为主键并自动递增。在Ibatis中,可以在插入语句后直接获取生成的主键值。 3. **雪花算法(Snowflake)**:这是一种分布式...

    ibatis 中sqlMap配置

    对于序列主键(如Oracle、DB2中的Sequence),需要在插入语句之前配置`&lt;selectKey&gt;`标签来获取主键值。例如: ```xml SELECT SEQ_TEST.NEXTVAL FROM DUAL insert into .... .... ``` 对于MySQL等支持...

    iBATIS开发教程.docx

    iBATIS支持多种数据库管理系统,如Oracle、MySQL、SQL Server等。 二、SQL Maps概念 SQL Maps是iBATIS的核心组件,负责将Java对象与数据库表之间的映射。SQL Maps提供了一个灵活的方式来定义数据库表的结构和关系...

    iBatis_SqlMap的配置总结[1]

    - **后获取主键**:对于自动增长的主键,如MySQL,`&lt;selectKey&gt;`可以在插入语句之后配置,利用`LAST_INSERT_ID()`获取自增主键。 5. **SQL参数(ParameterClass)**: - 插入操作:`parameterClass`指定传入参数...

    ibatis 开发指南

    3. **支持多种数据库**:ibatis支持多种数据库,包括MySQL、Oracle、SQL Server等。 4. **易于调试**:由于SQL语句是在应用中明确编写的,因此更容易调试和维护。 #### 三、ibatis快速入门 1. **准备工作** - 下载...

    ibatis_sqlMap的配置总结

    例如,在Oracle或DB2等数据库中,可以通过序列(sequence)来生成主键。为此,需要在插入语句之前配置主键生成逻辑: ```xml SELECT SEQ_TEST.NEXTVAL FROM DUAL insert into ... ``` 对于MySQL这样的自增...

    ibatis框架实现的增删改查

    在Java代码中,我们需要创建一个接口`StudentMapper`,并在其中声明对应的操作方法,这些方法将由Ibatis自动映射到XML文件中的SQL语句。 ```java public interface StudentMapper { void insertStudent(Student ...

    ibatis net 指导 手册

    - 包括各种主流关系型数据库系统,如MySQL、Oracle、SQL Server等。 - **3.7 缓存模型** - iBATIS提供了缓存机制来提高性能。 - **3.7.1 读取只读与读写缓存(仅Java)** - 读取只读缓存不会被更新,而读写缓存...

    ibatis常见案例

    Ibatis提供了两种主要的分页方式:一是使用`limit`和`offset`(MySQL),二是使用`rownum`(Oracle)。在映射文件中,可以通过动态SQL来实现分页功能。 ```xml SELECT * FROM users WHERE 1=1 != null"&gt; AND ...

    java+ibatis的自我学习编码的论坛

    在Oracle数据库中,序列是自增ID的一种常见实现方式,而在MySQL或PostgreSQL等数据库中,可能会使用其他方法,如自增字段。 "PinganBBS[new].sql"可能是平安论坛的数据库结构定义或数据初始化脚本,它可能包含了表...

    iBATIS有关资料

    对于主键自动赋值,iBATIS提供了`&lt;selectKey&gt;`标签来处理。在Oracle中,我们可以这样实现: ```xml SELECT STU_SEQ.NEXTVAL FROM DUAL INSERT INTO STUDENT(ID,NAME,BIRTH_DATE) VALUES(#id#,#name#,#...

    ibatis 批量 增删改查

    3. 考虑数据库的特性,如MySQL的`ON DUPLICATE KEY UPDATE`或Oracle的`BULK COLLECT INTO`。 在Ibatis中,批量操作提供了更高效、更灵活的方式处理大量数据。理解并熟练应用这些技巧,能显著提升应用程序的性能和可...

    ibatis学习笔记

    1. **SQL语句独立性**:Ibatis将SQL语句从Java源程序中抽离出来,放置于单独的XML文件中编写,这使得在后期对程序进行维护时变得更加便捷。 2. **简化开发工作**:通过封装底层JDBC API的调用细节,Ibatis能够自动将...

    repid-framework 使用说明.docx

    - Ibatis 和 Ibatis3:直接修改生成的 `.java` 或 `.xml` 文件中的主键生成策略,如 MySQL 的 `auto_increment`。 - Spring_jdbc:根据策略类型修改 `DAO` 文件中的 `save()` 方法,例如针对 Oracle 的 `sequence`...

    初识MyBatis

    MyBatis支持多种数据库,包括MySQL、Oracle、SQL Server等。 2. **MyBatis核心组件** - **SqlSessionFactory**: 是MyBatis的核心,用于创建SqlSession对象,它是线程不安全的,通常在应用启动时创建一个实例并全局...

    sqlmap配置.pdf

    在 Oracle 和 DB2 中,需要在插入语句之前配置 selectKey 来获取主键值。例如:&lt;insert id="insertAccount" parameterClass="Account"&gt; &lt;selectKey resultClass="long" keyProperty="sctId"&gt; SELECT SEQ_TEST....

    Hibernate笔记

    - **identity:** 如果数据库支持自动增长,设计表时指定该功能适用于MySQL, SQLServer。 - **sequence:** 如果数据库支持sequence,主键由sequence生成,适用于Oracle。 - **native:** 根据数据库类型自动选择...

    ORM、DB面试题

    在Java领域,常见的关系型数据库有MySQL、Oracle、PostgreSQL等。对于面试,你需要了解SQL语言的基本操作,如SELECT、INSERT、UPDATE、DELETE,以及更高级的概念,如视图、存储过程、事务处理和数据库设计原则,如第...

Global site tag (gtag.js) - Google Analytics