1.场景介绍:

​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢?

2.插入数据返回自增主键ID方法(一)

在映射器中配置获取记录主键值
  • xml映射:

在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数据库记录主键字段和java对象成员属性名

 <!-- 插入数据:返回记录主键id值 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id"  keyColumn="id">insert  into stu (name,age) values (#{name},#{age})
</insert>
  • 接口映射器

在接口映射器中通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值

// 返回主键字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert  into stu (name,age) values (#{name},#{age})")
void insert(Student stu);
获取新添加记录主键字段值

需要注意的是,在MyBatis中添加操作返回的是记录数并非记录主键id。因此,如果需要获取新添加记录的主键值,需要在执行添加操作之后,直接读取Java对象的主键属性。

Integer rows = sqlSession.getMapper(StuMapper.class).insertOneTest(student);
System.out.println("rows = " + rows); // 添加操作返回记录数
System.out.println("id = " + student.getId()); // 执行添加操作之后通过Java对象获取主键属性值
添加批量记录时返回主键ID

如果希望执行批量添加并返回各记录主键字段值,只能在xml映射器中实现,在接口映射器中无法做到。

<!-- 批量添加数据,并返回主键字段 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">insert  into stu (name,age) values<foreach collection="list" separator="," item="t">(#{t.name},#{t.age})</foreach>
</insert>

可以看到,执行批量添加并返回记录主键值的xml映射器配置,跟添加单条记录时是一致的。不同的地方仅仅是使用了foreach元素构建批量添加语句。

转载于:https://www.cnblogs.com/charlypage/p/11253610.html

mybatis插入数据后返回自增主键ID详解相关推荐

  1. Mybatis 插入数据后返回自增主键ID

    1 xml 映射文件中处理 在映射器中配置获取记录主键值 在xml中 insert 标签中定义 : useGeneratedKeys为true,用来设置返回主键id的值, keyProperty 代表 ...

  2. 七种MYSQL插入数据后返回自增主键ID的方法

    我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...

  3. mybatis 插入数据后返回自增id

    useGeneratedKeys="true" keyProperty="id"> sql全部内容: <insert id="insert ...

  4. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  5. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  6. mysql插入数据后返回自增id

    mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  7. 关于Mybatis的insert方法返回值(将返回值受影响条数改为插入后的自增主键id)

    今天做ssm项目的时候有一个这样的需求--我借阅一本书然后生成一条借阅记录(借阅记录的主键是递增的"borrowNum"),然后将这条记录的主键返回,在往上查阅资料后知道,只要在对 ...

  8. mybatis动态查询(分页排序搜索)+分解关联查询+Logback 日志配置(打印sql到控制台)+mybatis新增记录后返回自增的id。批量=11/2~11/20

    一.mybatis动态查询(分页排序搜索) mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和lim ...

  9. mysql添加数据的同时返回自增主键id

    方法一(实测可用): <insert id="add" useGeneratedKeys="true" keyProperty="id" ...

最新文章

  1. Java 理论与实践: 非阻塞算法简介
  2. 任意角度人脸检测pcn
  3. change to port 80 instead of 8069
  4. 更改SYS密码,expiry_date 过期时间 没有更新,普通用户更改密码会更新
  5. java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区
  6. 【洛谷P4841】城市规划【指数型生成函数】【麦克劳林级数】【多项式对数】
  7. 2017西安交大ACM小学期 毁灭序列[倒跑并查集]
  8. “云”上存储初显规模 如何架构是关键
  9. 自兴人工智能---认识python语言的基础数据类型和操作
  10. Qt控件中的属性sizePolicy说明
  11. 易到用车提现再度被延期?!声明:因贾跃亭所欠债务导致
  12. tornado总结4-html模板使用2
  13. 51. Element replaceChild() 方法
  14. 自适应滤波器(一)LMS自适应滤波器
  15. 腾讯魏巍:Eunomia云原生资源编排优化
  16. 网站调用百度地图展示位置,调用百度开放平台api 动态静态调用
  17. 小样本学习(few-shot learning)之——原形网络(Prototypical Networks)
  18. Coding:用指针的方法,将字符串首尾对调输出
  19. .net 2.0 下的FTP搜索引擎实现
  20. 细粒度控制Grails程序的日志输出

热门文章

  1. 众智日照分析软件_飞时达CAD日照分析计算软件FastSUN V14.0.1发布升级
  2. RPM 软件包名中的 el5、el6、el7 是什么?
  3. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
  4. pycharm remote 远程项目 同步 本地_利器:PyCharm本地连接服务器搭建深度学习实验环境的三重境界...
  5. C 和C语言条件运算符的区别
  6. c语言实验报告5数组,c语言实验报告五一维数组.doc
  7. 拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析
  8. oracle创建数据库用户并授权,oracle创建数据库、表空间、用户并授权
  9. kali使用笔记本自带无线网卡_无线网卡?那是什么?
  10. mysql用户名锁定_MySQL用户锁定