mybatis多表新增如何获取主键ID

记录一下碰到的问题,就当做是笔记吧,防止忘记。在做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=同上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 相关的优秀资源

转自&#xff1a; https://github.com/ywwhack/react-journey React 相关的优秀资源 以下列出的资源主要来自自己学习react过程中看过的觉的不错的文章、教程&#xff0c;也算是一个学习过程的记录。 React 教程 名称简介fullstackreact如果只看一个react教程&#xff0c;…

Spring import配置文件使用占位符

转载自 Spring import配置文件使用占位符 import使用占位符 连接池切换导入配置的代码&#xff1a; <import resource"classpath:META-INF/spring/spring-${db.connection.pool}.xml" /> 在配置文件添加配置 db.connection.pooldruid 启动直接报错&#xff0c;…

i18n国际化登录页面

国际化是啥&#xff0c;一开始我也是一脸懵逼。了解了之后才知道&#xff0c;原来它相当于网站的翻译按钮。毕竟世界上有很多不同的语言&#xff0c;不可能每个人都会中文嘛&#xff0c;所以它的作用就体现出来了。 国际化又被称为i18n&#xff0c;因为internationalization(国…

react书籍推荐

转自&#xff1a; https://blog.csdn.net/xutongbao/article/details/88638078 React全栈.pdf 链接&#xff1a;https://pan.baidu.com/s/10Qzn8uTTKPVCfJ7R4FKYLQ 提取码&#xff1a;pcfj 深入React技术栈.pdf 链接&#xff1a;https://pan.baidu.com/s/1c5kQbrQNMxAkyIurjG…

Java 9 新特性概述

转载自 Java 9 新特性概述Java 9 正式发布于 2017 年 9 月 21 日 。作为 Java8 之后 3 年半才发布的新版本&#xff0c;Java 9 带 来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外&#xff0c;还有一些新的特性。 本文对 Java9 中包含的新特性做了概…

基于脚手架创建react项目

React&#xff08;一&#xff09;使用脚手架创建React项目&#xff1a; 转自&#xff1a; https://www.cnblogs.com/yulingjia/p/9583244.html D:\workbench_ws>npm install -g create-react-app C:\Users\pacoson\AppData\Roaming\npm\create-react-app -> C:\Users\pac…

使用Git前的准备工作

版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 简单来说&#xff0c;版本控制就是用于管理多人协同开发项目的…

Servlet 工作原理解析

转载自 Servlet 工作原理解析从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚&#xff0c;Servlet 与 Servlet 容器的关系有点像枪和子弹的关系&#xff0c;枪是为子弹而生&#xff0c;而子弹又让枪有了杀伤力。虽然它们是彼此依存的&#xff0c;但是又相互…

Git分支如何使用

上次写了使用Git前的准备工作&#xff0c;现在我来记录一下git分支功能是如何使用的。 Git分支相当于你的一个分身&#xff0c;你让你的分身去学习英语&#xff0c;然后你自己去学数学&#xff0c;等到你的分身学会了英语&#xff0c;你就让它回归你的身体里&#xff0c;这样你…

ES6模板字符串【${}配合反单引号一起用】

转自&#xff1a; https://www.cnblogs.com/shihuc/p/10238511.html 先看看JavaScript中两个字符串的效果&#xff0c;就很容易知道模板字符串是个啥东西&#xff0c;其实一点也不新鲜。高级编程中&#xff0c;例如java里面的string.format就是干这个事情&#xff0c;诸如此类…

通过实例理解 JDK8 的 CompletableFuture

转载自 通过实例理解 JDK8 的 CompletableFuture 前言 Java 5 并发库主要关注于异步任务的处理&#xff0c;它采用了这样一种模式&#xff0c;producer 线程创建任务并且利用阻塞队列将其传递给任务的 consumer。这种模型在 Java 7 和 8 中进一步发展&#xff0c;并且开始支持…

2021-10-24

今天考试结束&#xff0c;顺便来白漂个徽章&#xff0c;嘿嘿

ES6箭头函数总结

转自&#xff1a; https://www.cnblogs.com/mengff/p/9656486.html 1. 箭头函数基本形式 let func &#xff08;num) > num; let func () > num; let sum (num1,num2) > num1 num2; [1,2,3].map(x > x * x); 2. 箭头函数基本特点 (1). 箭头函数this为父作…

Spring bean - scope详解

转载自 Spring bean - scope详解 Scope是定义Spring如何创建bean的实例的。 在创建bean的时候可以带上scope属性&#xff0c;scope有下面几种类型。 Singleton 这也是Spring默认的scope&#xff0c;表示Spring容器只创建一个bean的实例&#xff0c;Spring在创建第一次后会缓存起…

Invalid bound statement (not found):出现的原因和解决方法

解决错误的步骤出现了什么错误可能导致的原因解决办法出现了什么错误 错误截图&#xff1a; //BindingException 数据绑定异常 not found 找不到 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.kuan.edu.mapper.CourseMapper.getP…

es6箭头函数(墙裂推荐)

转自&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions 箭头函数表达式的语法比函数表达式更简洁&#xff0c;并且没有自己的this&#xff0c;arguments&#xff0c;super或 new.target。这些函数表达式更适用于那…

使用腾讯云发送短信API接口实现(完整流程)

步骤一、开通腾讯云短信服务二、申请签名前的准备&#xff08;申请公众号&#xff09;三、创建签名和模板四、腾讯云API实现发送短信五、使用springboot进行调用六、可能会报的错误一、开通腾讯云短信服务 在腾讯云官网找到短信服务&#xff0c;开通 二、申请签名前的准备&a…

获取Spring的ApplicationContext的几种方式

转载自 获取Spring的ApplicationContext的几种方式 Application Context定义 简单来说就是Spring中的高级容器&#xff0c;可以获取容器中的各种bean组件&#xff0c;注册监听事件&#xff0c;加载资源文件等功能。 具体定义可以参考官网&#xff1a;https://spring.io/underst…

'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)

【README】webpack-dev-server 是一个支持热编译的服务器&#xff08;动态编译&#xff09; 【1】问题 webpack-dev-server 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件的解决方法 【2】安装 webpack 服务器&#xff0c; 如下&#xff1a; 参考指南&…