`
hanyi366
  • 浏览: 290382 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iBatis中的insert如何返回个类数据库的主键

 
阅读更多
<SPAN style="COLOR: #ff0000">当我们在ibatis中使用一对一的时候,想取得自增加字段的值。      
  
Ibatis也提供这种取值方式,具体的配置如下 :</SPAN>   
  
DROP TABLE IF EXISTS `t_blog`;   
CREATE TABLE `t_blog`(   
  `id` bigint NOT NULL auto_increment,    -- blog编号   
  `name` varchar(255) NOT NULL ,  -- blog名称   
  `description` varchar(255) default '' ,  -- blog介绍   
  `domain` varchar(255) NOT NULL ,  -- blog域名   
  PRIMARY KEY  (`id`)   
)   
TYPE=InnoDB DEFAULT CHARSET=utf8 ;   
  
ibatis中对应的配置如下:   
<!-- 添加博客 -->   
<insert id="insertBlog">   
        insert into t_blog    
            (name, description, domain)   
        values    
            (#name#, #description#, #domain#)   
        <selectKey resultClass="int" keyProperty="id" >   
            SELECT @@IDENTITY AS ID   
        </selectKey>    
</insert>   
DAO中的调用方法:   
  
public int insertBlog(Blog blog) throws DAOException {   
        try{   
            return ((Integer)getSqlMapClientTemplate().insert("insertBlog", blog)).intValue();   
        }   
        catch(Exception ex){   
            logger.error(ex);   
            throw new DAOException("创建博客发生错误...");   
        }       
}   
test insertBlog方法返回的int为自增加的id。   
  
[转帖2]   
  
  
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>      
     
<!-- 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>     
     
<!-- 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 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>     
<!-- 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>    
  
<!-- 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>   
  
<!-- 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 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>   
  
[实例]   
  
    <insert id="insertAuthor" parameterClass="Author">   
        insert into AUTHOR( AUT_NAME ) values ( #name# )   
        <selectKey resultClass="int" keyProperty="id">   
            select LAST_INSERT_ID() as id   
        </selectKey>   
    </insert>   
  
Integer resultId = ( (Integer)getSqlMap().insert("insertAuthor", newer) ).intValue();  

 

分享到:
评论

相关推荐

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

    本教程“08_ibatis教程_sql主键生成方式”聚焦于Ibatis如何处理数据库主键的生成策略,这对于理解和优化数据库操作至关重要。 Ibatis允许开发者自定义SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动...

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

    在IT行业中,数据库操作是至关重要的,而Ibatis作为一个轻量级的持久层框架,它在Java开发中被广泛使用。本教程“08_传智播客ibatis教程_sql主键生成方式”主要聚焦于如何在Ibatis中处理SQL查询时的主键生成策略,这...

    IBATISDAO库类操作

    - **插入操作**:`insert()`方法用于将一个对象插入到数据库中,它会自动处理主键生成策略,如果表有自增主键,IBATIS会自动填充。 - **更新操作**:`update()`方法用于更新已存在的记录,它需要传入待更新的对象,...

    ibatis2.0中文API

    在iBATIS中,通过配置XML映射文件,可以定义实体类与数据库表之间的复杂关联。例如,一个订单可以包含多个商品项,这是一对多关系;反之,一个商品可能被多个订单购买,这是多对一关系。iBATIS提供了集合映射和关联...

    Ibatis结合MySQL数据库的使用方法Demo

    本工程用于研究Ibatis和MySQL结合使用的方法 本工程编码方式:UTF-8 须执行的SQL语句: CREATE DATABASE `test`; USE `test`; DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` char(36) NOT NULL...

    ibatis 中sqlMap配置

    总结来说,iBatis中的SQLMap配置涉及到命名空间、别名、插入操作、主键获取、参数类型和结果映射等多个方面,理解和熟练掌握这些知识点对于高效地使用iBatis框架至关重要。通过合理的配置,可以有效地将Java代码与...

    一个最简单的IBatis增删改查操作例子

    在IT行业中,数据库操作是必不可少的一部分,而IBatis作为一个轻量级的持久层框架,以其简单易用、灵活高效的特点,被广泛应用于各种项目中。本文将深入解析一个基于IBatis实现的最简单的增删改查(CRUD)操作实例,...

    mybatis insert返回主键代码实例

    其中,插入数据并返回主键是一个非常常见的操作场景。本文将详细介绍 MyBatis 中插入返回主键代码实例的实现方法。 在使用 MyBatis 进行数据插入时,需要使用 `selectKey` 元素来获取插入后的主键值。`selectKey` ...

    使用ibatis操作两个有关系的表

    `&lt;select&gt;`、`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`标签用于执行数据库操作,而`&lt;parameterMap&gt;`和`&lt;resultMap&gt;`则用来定义输入参数和返回结果的映射。 在实际应用中,我们还需要创建对应的Java模型类,这些类的属性...

    ibatis例程.docx

    在本例中,我们创建了一个名为Person的Java类,它的属性与数据库表中的字段一一对应。这些属性包括id、firstName、lastName、birthDate等,同时提供了getter和setter方法,以便于操作这些属性。 此外,Ibatis的核心...

    详细介绍Ibatis的用法

    在Ibatis中,JavaBean是与数据库表对应的实体类。 #### Resources和DataSource - **Resources**:Ibatis提供了一套资源管理工具,用于处理类路径下的资源文件。 - **SimpleDataSource**:提供了一个简单的数据源...

    ibatis的教程

    具体操作过程中,以执行插入操作为例,开发者可以通过Mapper的Instance().Insert方法来执行“insert”操作,如果数据库表中有主键,则可以通过该方法返回主键值。例如,插入一个lineItem对象的代码示例中,使用...

    经典开源插件之ibatis

    - **创建数据库与表结构**:根据示例中的SQL语句创建名为`itcast`的数据库及`student`表,表中包括`id`(主键自增长)、`firstname`和`lastname`三个字段。 - **实体类定义**:定义一个名为`Student`的Java类,...

    spring mvc+ibatis+oracle单表增删改(有包)

    在本项目中,我们主要探讨的是如何利用Spring MVC、iBATIS和Oracle数据库来实现一个基本的单表操作,包括增、删、改等常见功能。Spring MVC是Spring框架的一个模块,专门处理Web应用程序的模型-视图-控制器(MVC)...

    ASP.NET MVC+iBatis+SQL

    在这个项目中,开发者使用了ASP.NET MVC框架作为后端控制层,iBatis作为数据访问层,以及SQL作为数据库查询语言。下面将详细阐述这三个主要组件以及它们之间的交互。 **ASP.NET MVC(Model-View-Controller)** ASP...

    ibatis mybatis 分页 crud 完整代码

    在IT行业中,数据库操作是应用程序开发的核心部分,而Ibatis和Mybatis作为Java领域的两个流行持久层框架,为开发者提供了方便的数据访问接口。本资源"ibatis mybatis 分页 crud 完整代码"包含了这两个框架在CRUD...

    Ibatis实例,手把手交你入门

    1. **创建数据库和表**:在SQL Server 2005中,创建一个新的数据库,例如`ibatis_test`。然后,在该数据库中创建一张表,如`users`,包含`id`(主键,整型),`username`(字符串),`password`(字符串)等字段。 ...

    ibatis_sqlMap的配置总结

    **命名空间**是iBatis配置文件中的一个重要概念,它用于区分不同的SQL映射文件或同一文件中的不同部分。通过定义命名空间,可以避免SQL映射ID之间的冲突,并且方便地组织相关的映射信息。例如: ```xml ``` 在此...

    ibatis + oracle 增删改查例子

    在`MyEclipse`中导入这个项目后,你需要找到并修改这个配置文件,确保其连接信息与你的`Oracle`数据库匹配。通常,配置文件中的连接信息包括数据库URL、用户名和密码。 1. **创建数据库表**:在开始之前,你需要在`...

    iBATIS DataMapper1.6 中文翻译

    在这个例子中,`&lt;insert&gt;`标签定义了一个插入操作,参数类为`LineItem`,并包含了主键获取的`&lt;selectKey&gt;`标签。通过`Mapper.Instance().Insert()`方法调用,可以完成插入操作并返回主键值。 总的来说,iBATIS ...

Global site tag (gtag.js) - Google Analytics