参考:
场景
有些时候我们在添加记录成功后希望能直接获取到该记录的主键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配置:
insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())
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个属性:
useGeneratedKeys:必须设置为true,否则无法获取到主键id。
keyProperty:设置为POJO对象的主键id属性名称。keyColumn:设置为数据库记录的主键id字段名称。其次,新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性。
通过访问POJO对象的主键id属性即可返回。使用注解方式
详见: 使用mybatis注解实现添加记录时返回主键值