Mybatis执行insert语句,获取主键

一般的insert操作返回的是受影响行数,如果要获得新增加的那一行的主键,有两种方式可以实现。

方法1(推荐):

<insert id="addAuthor" parameterType="domain.Author" useGeneratedKeys="true" keyProperty="id">
insert into author(username,password,email,bio) values(#{username},#{password},#{email},#{bio})
</insert>

方法2(依赖于使用的数据库):

    <insert id="addAuthor" parameterType="domain.Author">
        <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
                SELECT @@IDENTITY AS id
        </selectKey>
        insert into author(username,password,email,bio) values(#{username},#{password},#{email},#{bio})
    </insert>            

结果:调用mapper接口返回的依然是受影响行数,但是主键已经赋值到parameterType对应的实体类的属性中了 ,直接调用就可以了。

要弄清楚上面的实现方式,要先知道下面这些东西:

1.insert标签的属性

  keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

useGeneratedKeys ,取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了。

2.selectKey标签的属性

  keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

  resultType ,keyPropety所指向的属性类全限定类名或类型别名

order属性 ,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作

  statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE

3.select @@identity的用法

  用select @@identity得到上一次插入记录时自动产生的ID。

  在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

时间: 2024-10-09 01:44:49

Mybatis执行insert语句,获取主键的相关文章

mybatis 实现 insert 语句返回 主键

mybatis 中 insertSelective(example) 语句默认返回并不是 插入记录的主键. 我们可以考虑插入记录主键不直接作为 函数的返回值, 而是体现在改变函数参数 "example", 使其主键等于插入记录的主键. 在insertSelective xml定义中,加入以下代码: <selectKey resultType="Integer" keyProperty="id" >   SELECT last_inse

Mybatis中insert中返回主键ID的方法

1.XyzMapper.xml <insertid="doSomething"parameterType="map"useGeneratedKeys="true"keyProperty="yourId"> ... </insert> 或 <insert id="doSomething" parameterType="com.xx.yy.zz.YourClass&quo

MyBatis :Insert (返回主键、批量插入)

一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二.insert元素 属性详解   其属性如下: parameterType ,入参的全限定类名或类型别名 keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置 keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪

java mybatis中insert 操作 返回主键的小技巧。。。。

第一种方式: 在实体类的映射文件 "*Mapper.xml" 这样写: <insert id="insertvmatedic" keyColumn="mdid" useGeneratedKeys="true" keyProperty="mdid" parameterType="Vmaterialdictionary"> insert into vmaterialdiction

Mybatis在insert时返回主键id

需要注意的地方:1.添加记录能够返回主键的关键点在于需要在标签中添加以下三个属性.useGeneratedKeys:必须设置为true,否则无法获取到主键id.keyProperty:设置为POJO对象的主键id属性名称.keyColumn:设置为数据库记录的主键id字段名称2.新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性调用时: roomCheckInfoMapper.insertSelective(roomC

Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)

1.通过Oracle序列 -- Create sequence create sequence SEQ_DW_EWSYSTEM minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by 1 cache 20; <insert id="insertEwsystem" parameterType="Ewsystem"> <selectKey keyProperty

MyBatis insert操作返回主键

在写毕业设计的时候总是发现有一些小的细节问题,比如说...... MyBatis insert操作后怎么返回主键? 原来不懂的时候是调用一个select语句,将刚刚insert的对象再传入进去查出主键,但是这么写主键就没有意义了,什么都可以放到数据库里面去查. 在说,这样也会引起很多其他的问题.比如说你要查一下post表,在你不知道post_id的情况下你利用了post_name去查询post对象. 万一post_name有重复的呢?怎么办?所以有了这篇博客. 网上有很多大神写了很多mybati

mybatis执行insert后马上能获取自增主键的语句写法

<!--keyColumn keyProperty useGeneratedKeys 用于在插入数据后,能直接使用user.getId()获取主键--> <insert id="insert" keyColumn="Id" keyProperty="id" parameterType="com.chinacarbonal.carboncms.bean.UserRole" useGeneratedKeys=&q

Mybatis 插入insert操作时获取主键

转载于 http://blog.csdn.net/lklinkang/article/details/6185927 插入操作 对于自增主键的表,插入可以不配置插入的主键列.否则是必须的. 获取主键      插入语句之前配置:主要是针对Sequence主键而言,插入前必须指定一个主键值给要插入的记录.Oracle.DB2亦如此,方法是在插入语句标签<insert....>之前配置上: <insert id="AltName.insert" parameterType