`
huibin
  • 浏览: 750520 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

iBatis中的insert如何返回主键ibatis insert返回

阅读更多
当我们在ibatis中使用一对一的时候,想取得自增加字段的值。   

Ibatis也提供这种取值方式,具体的配置如下 :

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

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

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

    在Ibatis的映射文件中,`&lt;insert&gt;`标签内使用`&lt;selectKey&gt;`子标签可以定义主键生成逻辑。例如: ```xml &lt;insert id="insertUser" parameterType="com.example.User"&gt; INSERT INTO users(name, email) VALUES (#{...

    mybatis insert返回主键代码实例

    本文将详细介绍 MyBatis 中插入返回主键代码实例的实现方法。 在使用 MyBatis 进行数据插入时,需要使用 `selectKey` 元素来获取插入后的主键值。`selectKey` 元素可以在插入语句之前或之后执行,具体的实现方法取...

    ibatis 中sqlMap配置

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

    ibatis2.0中文API

    在映射文件中,我们可以定义`&lt;resultMap&gt;`来映射对象属性和字段,使用`&lt;id&gt;`、`&lt;result&gt;`等元素来指定主键和普通字段。此外,还可以使用`&lt;select&gt;`、`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`标签来定义SQL语句,它们可以...

    ibatis_sqlMap的配置总结

    在iBatis中,处理主键的生成尤其重要。对于自增主键的表,插入时通常不需要显式设置主键值;而对于非自增主键的情况,则需要特别注意主键的生成机制。例如,在Oracle或DB2等数据库中,可以通过序列(sequence)来生成...

    iBatis操作MySQL增删改查

    1. **增加记录**:在iBatis中,新增数据通常通过`&lt;insert&gt;`标签实现。你需要在XML配置文件中编写SQL插入语句,然后在Java代码中创建一个实体对象,将对象传入到Mapper接口的方法中,执行`insert()`方法。iBatis会...

    经典开源插件之ibatis

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

    详细介绍Ibatis的用法

    - **自动生成的主键**:对于INSERT操作,可以通过设置`useGeneratedKeys="true"`来启用主键自动生成。 - **存储过程**:支持调用数据库的存储过程,并通过`&lt;call&gt;`标签定义。 - **`parameterClass`和`parameterMap...

    IBATISDAO库类操作

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

    ibatis-sqlmap-2.jar.zip

    本文将深入探讨iBatis-SQLMap 2版本,主要关注`ibatis-sqlmap-2.jar.zip`这个压缩包中的核心组件和相关知识点。 iBatis-SQLMap 2是iBatis框架的一个重要组成部分,它提供了SQL映射文件和Java对象之间的映射机制,...

    iBATIS-SqlMaps,ibatis映射文件

    在映射文件中,iBATIS提供了强大的映射机制,比如自动类型转换、结果集嵌套处理、自动生成主键等。例如,和可以将查询结果的列名映射到Java对象的属性上,元素可以根据特定列的值来决定如何映射结果集,实现多态查询...

    ibatis持久层简单操作

    - `&lt;insert&gt;`:插入记录,使用`useGeneratedKeys`和`keyProperty`获取自增主键。 - `&lt;update&gt;`:更新记录。 - `&lt;delete&gt;`:删除记录。 4. **Mapper接口** - 为了方便Java代码的调用,可以创建一个对应的Mapper...

    ibatis使用指南

    - **插入**:使用`insert`方法,Ibatis会自动生成`insertId`,便于获取新生成的主键。 - **更新**:使用`update`方法,Ibatis会根据传入的对象自动拼接UPDATE语句。 - **删除**:使用`delete`方法,根据传入的...

    ibatis mybatis 分页 crud 完整代码

    - **Create(创建)**: 创建新记录,通常通过Insert语句实现,Ibatis和Mybatis都支持自动插入主键,无需手动处理。 - **Read(读取)**: 读取记录,常用Select语句,可以使用条件查询、多表联查等。 - **Update...

    ibatis实现增删改查功能demo

    在本示例中,"ibatis实现增删改查功能demo"是一个具体的项目,旨在演示如何利用Ibatis进行数据库操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)数据。以下将详细解析这个项目的重点内容...

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

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

    Ibatis框架的核心知识点

    在插入语句中,`&lt;selectKey&gt;` 通常置于 `&lt;insert&gt;` 元素内,用于在插入数据后获取数据库生成的主键。例如,对于Oracle,可以调用序列函数获取新的主键值。 4. **存储过程** Ibatis 支持调用数据库的存储过程。通过...

    iBatis_SqlMap的配置总结[1]

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

    iBATIS DataMapper1.6 中文翻译

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

Global site tag (gtag.js) - Google Analytics