场景
有些时候我们在添加记录成功后希望能直接获取到该记录的主键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注解实现添加记录时返回主键值