mybatis添加记录时返回主键id

Posted Rainyn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis添加记录时返回主键id相关的知识,希望对你有一定的参考价值。

参考:mybatis添加记录时返回主键id

场景

有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作。
在使用mybatis作为ORM组件时,可以很方便地达到这个目的。
鉴于mybatis目前已经支持xml配置和注解2种方式,所以分别给予详细介绍。

数据表设计:

drop table if exists `test`;
create table `test` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'ID\', // 主键字段为自增长类型
    `name` varchar(50) default \'\',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\',
    `update_time` timestamp COMMENT \'编辑时间\',
    `descr` varchar(100) default \'\',
    `url` varchar(50) default \'\',
    PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

使用xml配置方式

1.xml配置:

<!-- 插入数据:返回记录的id值 -->
<insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
    insert into test(name,descr,url,create_time,update_time) 
    values(#{name},#{descr},#{url},now(),now())
</insert>

 

2.java代码:

Test test3 = new Test();
//test3.setId(0L);
test3.setName("test6");
test3.setDescr("测试数据6");
test3.setUrl("http://www.aliyun.com.cn");
int rows = sqlSession.insert("org.chench.test.mybatis.mapper.insertOneTest", test3);
sqlSession.commit();
logger.info("insert rows: {}", rows);
// 执行添加记录之后读取POJO的主键id属性
logger.info("insert test id: {}", test3.getId());

 

3.详细解释
首先,为了在添加记录时能获取到记录主键id,必须在<insert>的xml配置中添加3个属性:

<insert useGeneratedKeys="true" keyProperty="id" keyColumn="id"></insert>

 

useGeneratedKeys:必须设置为true,否则无法获取到主键id。
keyProperty:设置为POJO对象的主键id属性名称。
keyColumn:设置为数据库记录的主键id字段名称。

其次,新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性。
通过访问POJO对象的主键id属性即可返回。

使用注解方式

详见:http://www.cnblogs.com/nuccch/p/7093843.html 使用mybatis注解实现添加记录时返回主键值

以上是关于mybatis添加记录时返回主键id的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis在insert时返回主键id

通过mybatis添加数据记录时,如何返回主键

使用mybatis注解@Options实现添加记录时返回主键值

MyBatis 插入时返回刚插入记录的主键值

通过mybatis添加数据记录时,如何返回主键

mybatis 实现 insert 语句返回 主键