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插入记录时返回主键id的方法
有时候插入记录之后需要使用到插入记录的主键,通常是再查询一次来获取主键,但是MyBatis插入记录时可以设置成返回主键id,简化操作,方法大致有两种. 对应实体类: public class User ...
- 使用mybatis注解@Options实现添加记录时返回主键值
官网:http://www.mybatis.org/mybatis-3/index.html 在使用mybatis作为ORM框架时,我通常更喜欢使用注解而非xml配置文件的方式.业务场景:添加记录之后 ...
- mybatis添加数据时返回主键 insert 返回主键值
insert 返回主键值 useGeneratedKeys=“true” parameterType=“USer” keyProperty=“id”, <insert id="inse ...
- SSM-MyBatis-12:Mybatis中添加单个对象返回主键id列
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...
- mybatis与mysql插入时返回主键id的值
<insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...
- MyBatis在insert插入操作时返回主键ID的配置
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过Mapper.XML配置的方式来完成这个功能. 在 INSER ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- Mybatis配置插入数据返回主键ID
需要在insert方法中添加 <insert id="insertSelective" parameterType="com.midou.ott.model.MDA ...
随机推荐
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- @SpringBootApplication 组合注解包含哪些注解及作用
序:在学习springboot,教程一般对一些注解语焉不详,发现@SpringBootApplication 这个注解包含了很多注解,也就是说使用这个注解可以少写几个注解,这里看源码粘出来一些,仅用于 ...
- 改变this不要怕!!!
在之前的学习和工作中,会不必要的涉及到 改变this的指向问题: 脑子里会想到的是 apply, call, bind 这三个 可逆知道他的区别吗? 1. bind区别于 apply和call 是因为 ...
- C#微信公众号开发——access_token的获取
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_toke ...
- jedis配置
public interface IJedisClientFactory { Jedis getJedis(); } JedisClientFactoryImpl.java @Service publ ...
- hdu2050 折线分割平面---递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2050 题目大意: 求n条折线分割平面的最大数目 思路: 先看n条直线的时候 一条直线 2个平面 两条 ...
- jquery checkbox radio 标签 选中的3种方法
张映 发表于 2013-07-16 分类目录: js/jquery 标签:checkbox, jquery, radio, 选中 jquery 很灵活,checkbox radio标签选中的方法有很多 ...
- jacascript 函数参数与 arguments 对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 调用函数时,实参和形参需要一一对应,但如果参数多了的话,会很苦恼: 我们可以用键值对(字面量对象)的方式传 ...
- Python将excel文件从xls转换为xlsx
本文使用场景:将一个xls格式Excel文件转换为xlsx文件格式.接下来将一步一步演示该操作.你也可以对代码进行修改使其适用于你所需的场景. 安装Python3 首先需要安装Python,我这里安装 ...
- [LeetCode] Print Binary Tree 打印二叉树
Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...