记录一下碰到的问题,就当做是笔记吧,防止忘记。在做ssm多表新增的时候,碰到了一个小问题,就是在新增成功一个表的时候我要获取它的ID,然后用它的ID新增下一个表。
但是,我要怎么做呢?新增成功,再查询一次?不会吧这么麻烦。后来我想起了有个方法可以在新增的时候获取它的主键id,然后我再百度了一下,打算把它写下来。
第一种方法,在mapper.xml新增语句中设置useGeneratedKeys参数值为true,keyProperty=“id”
注意这里的id是自增的主键id,对于上面的大概意思是:在完成新增后获取到数据库自动生成的主键id。注意:useGeneratedKeys参数只对insert语句生效,默认为false。

<insert id="insertPrivilege" useGeneratedKeys="true" keyProperty="privilegeid" parameterType="com.gx.vo.studentVo">insert into p_privilege(auditID,PrivilegeAmount,PrivilegeReason) values (#{auditID},#{PrivilegeAmount},#{PrivilegeReason})</insert>

第二种方法,在insert 里添加 selectKey 元素,属性keyProperty为实体类的属性id

<insert id="insertPrivilege" parameterType="com.gx.vo.studentVo"><selectKey keyProperty="PrivilegeID" order="AFTER"resultType="java.lang.Integer">SELECT LAST_INSERT_ID()</selectKey>insert into p_privilege(auditID,PrivilegeAmount,PrivilegeReason) values (#{auditID},#{PrivilegeAmount},#{PrivilegeReason})</insert>

这里注意:order在mysql里使用AFTER表示执行完新增语句再执行selectKey元素
如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句

关于order的小栗子:来源于百度

期望结果:插入用户并获得插入后的主键ID
下面是配置信息:想要insert 后 返回ID
1、mybatis Mapper.xml
2、打印影响行,和返回主键ID
3、结果却很出乎意料, ID是null, 影响行:是负值
换了各种方式测试。
比如:
(1)order=“BEFORE” selectKey= select last_insert_id(), 结果 id=0, r=-2147482646
(2)order=“BEFORE” selectKey= select 23 ,结果id=23 , r=-2147482646
(3)order = “AFTER” selectkey = select 23 , 结果id=null r=同上

mybatis多表新增如何获取主键ID相关推荐

  1. jdbctemplate 新增数据 返回主键id

    //JDBCUtils.getDataSource() 是返回数据库的链接对象private JdbcTemplate template = new JdbcTemplate(JDBCUtils.ge ...

  2. 插入后获取主键id(tkMapper)

    @Id @Column(name = "id", insertable = false) @KeySql(useGeneratedKeys = true) private Inte ...

  3. mybatis生成UUID主键,且获取当前新增的UUID主键

    在平时业务需求中,有可能会需要当前新增对象的主键ID. 在此我对用UUID作为主键ID做了实验. 1 <selectKey keyProperty="user.userId" ...

  4. Mybatis 插入时获取主键的方式

    mybatis 作为一个主流的 ORM 框架,深受广大开发者的喜爱.有人的地方就有江湖,有代码的地方自然有坑,下面来说说获取 mybatis 的插入后返回的主键. 我们可以想一下自动增长的主键特性,在 ...

  5. MyBatis——insert并返回主键ID解决方案

    问题描述 添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前端调用中需要插入多个表的场景. 除了添加单条记录时获取主键值,有时候可能需要获取批量添加记录时各记录的主键值. 问题分析 暂无. ...

  6. 关于数据表设计的问题, 是主键 id 作为关联, 还是其他的唯一字段?

    假设有业务需求,需要设计三张表user,order,goods order关联user,goods关联order 第一种情况:使用数据库表的主键做业务关联,order表存user_id,goods表存 ...

  7. mysql主键自增 insert_MySQL数据表中有自增长主键时如何插入数据

    https://jingyan.baidu.com/article/fcb5aff7b3a025edaa4a7130.html 设置自增列 phpmyadmin 把A_I选中 就是AUTO_INCRE ...

  8. Mybatis新增返回主键ID

    在做项目的过程中有时候难免会运用到新增一条数据并获取到新增的这条数据的主键ID,这样的一个功能,新增一条订单数据,并返回新增订单的ID.这样做的前提是数据的ID必须为自增. 我是用ssm框架做的项目, ...

  9. Mybatis插入数据后获取主键的值

    Mybatis插入数据后获取主键的值 1. 所使用的数据库是支持自增的,且主键是自增的 <!-- 支持自增的数据库且主键是自增的:自动将插入后自增id的值赋值给传入的Employee的id--& ...

最新文章

  1. 虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法
  2. 【python开源项目】推荐一款prize万能抽奖小工具发布
  3. 深入理解Emoji(三) —— Emoji详解
  4. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)
  5. tensorflow常见问题
  6. Informatica PowerCenter使用介绍-转载
  7. [Termux]给Termux安装一个发行版Linux
  8. 每天一道LeetCode-----使用最少的操作将一个字符串转换成另一个字符串,只有插入,删除,替换三种操作
  9. 漫游kafka实战篇之搭建Kafka开发环境
  10. STM32之SysTick原理
  11. PHP转换时间戳mktime,php日期转换为时间戳的方法
  12. ftp协议及vsftpd的基本应用
  13. JS一些常用证件信息的正则表达式
  14. lm1117稳压芯片知识总结
  15. 关于我很想吐槽公司的策划同学这件事
  16. 安全帽识别系统的应用
  17. 百度语音合成 java 教程_调用百度语音合成接口
  18. 程序猿如何保护眼睛方法.
  19. php控制输出数量,PHP 输出控制
  20. C#之父——安德斯·海尔斯伯格

热门文章

  1. Double Strings
  2. JavaWeb --第四章Maven详解
  3. Axial symmetry FZU - 2035
  4. 牛客网 【每日一题】5月21日题目 图的遍历
  5. NOIP2014洛谷P2296:寻找道路(bfs)
  6. YBTOJ洛谷P3209:平面图判定(2-SAT)
  7. YbtOJ-染色计划【树链剖分,线段树,tarjan】
  8. YbtOJ-相似子串【SA,RMQ,二分】
  9. bzoj#4161-Shlw loves matrixI【常系数线性齐次递推】
  10. Loj#2035-[SDOI2016]征途【斜率优化】