Mybatis 插入insert操作时获取主键

转载于 http://blog.csdn.net/lklinkang/article/details/6185927

插入操作

对于自增主键的表,插入可以不配置插入的主键列。否则是必须的。

获取主键 
     插入语句之前配置:主要是针对Sequence主键而言,插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,方法是在插入语句标签<insert....>之前配置上:

<insert id="AltName.insert" parameterType="AltName">
<selectKey resultType="long" keyProperty="id">
SELECT SEQ_TEST.NEXTVAL FROM DUAL
</selectKey>
insert into
altname(primaryName,alternateName,type)values(#{primaryName},#{alternateName},#{type})
</insert>

插入语句之后配置:蛀牙是针对自增主键的表而言,这类表在插入时不需要主键,而是在插入过程自动获取一个自增的主键。比如MySQL

     <insert id="AltName.insert" parameterType="AltName">      <selectKey resultType="long" keyProperty="id">      SELECT LAST_INSERT_ID()      </selectKey>      insert into      altname(primaryName,alternateName,type)values(#{primaryName},#{alternateName},#{type})    </insert>   

当然,是否需要配置<selectKey>根据情况,只要能保证记录有主键即可。一旦配置了<selectKey>,就可以在执行插入操作时获取到新增记录的主键。 
   注意:如果没有配置<selectKey>那么保存后的对象的主键依旧为null.

时间: 2024-10-17 00:15:35

Mybatis 插入insert操作时获取主键的相关文章

Mybatis在insert操作时返回主键

今天在写项目的时候,遇到一个需求,就是在像数据库插入数据的时候,要保留插入数据的主键,以便后续进行级联时,可以将该主键作为另张表的外键. 但是在正常情况下我们使用插入语句返回的是int型,含义是影响该表数据的条数.但是这时候我们想要的得到的却是主键,这时候就可以对mybatis文件进行配置 如图: 属性详解: parameterType ,入参的全限定类名或类型别名 useGeneratedKeys ,取值范围true|false(默认值), 设置是否使用JDBC的getGenereatedKe

Mybatis执行insert语句,获取主键

一般的insert操作返回的是受影响行数,如果要获得新增加的那一行的主键,有两种方式可以实现. 方法1(推荐): <insert id="addAuthor" parameterType="domain.Author" useGeneratedKeys="true" keyProperty="id"> insert into author(username,password,email,bio) values(#{

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插入操作时返回主键ID的配置

转:http://www.cnblogs.com/icerainsoft/p/4648900.html 很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键. 但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数... 接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中. MySQL用法: <insert id=&qu

MyBatis进行insert操作时不能将数据插入到数据库

MyBatis进行数据库增删改查时,明明表里有数据却查不出结果,同样主键的数据可以多次插表成功但是其实并未真正插入到表里,经过几次尝试,发现问题在于MyBatis_config.xml文件的transactionManager属性配置不正确,将type从JDBC改到MANAGED则可正常操作.公司的电脑则需要将MANAGED改为JDBC才可以正常操作. 查看了下transactionManager属性的说明,MANAGED是不会自动提交和回滚的,原因还在进一步查明中,先记下来. <?xml ve

mybatis自动生成后无法获取主键id问题

使用mybatis的自动生成工具生成的主键id: <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" > SELECT LAST_INSERT_ID()</selectKey> 使用sharding-jdbc时候 一直提示 分片报错, 可以使用这种方式解决: <insert id="insertSelective&

SpringBoot集成tk mybatis插入数据,回显主键为null

实体信息如下 @Data public class ApiCertificate{ @Id @GeneratedValue(generator = "JDBC") private Integer id; private String url; } 插入方法在saveCertificate中,返回结果如下:  最终发现原因:设计数据库的时候没有给设置主键id自增 原文地址:https://www.cnblogs.com/passedbylove/p/11684170.html

mybatis oracle insert 返回新增的主键值

<insert id="insertVmsTemplatePlayItem" parameterType="VmsTemplatePlayItem"> <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="playitemId"> SELECT PLAYITEM_SEQ.NEXTVAL FROM D

insert时出现主键冲突的处理方法

使用"insert into"语句进行数据库操作时可能遇到主键冲突,用户需要根据应用场景进行忽略或者覆盖等操作.总结下,有三种解决方案来避免出错. 测试表:CREATE TABLE `device` (`devid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`status` enum('alive','dead','down','readonly','drain') DEFAULT NULL,`spec_char` varchar(1