使用Mybatis进行插入时获取刚刚插入数据的ID(ID是自增字段)_mybtis 插入一条数据,有个字段和id有关系-程序员宅基地

技术标签: 解决方案  mybatis  数据库  Mybatis  

问题:在我对数据库进行一条插入操作时,我需要对其中的一个字段根据ID内容进行修改,但是我插入了这条数据之后不知道如何把它取出来然后完成修改。

解决方案:Mybatis在插入语句时,有一些可选属性可以返回现在插入数据的自增字段。


原本代码
<!--增-->
<insert id="addProject" parameterType="Project">
    INSERT INTO project(<include refid="project_column"/>)
    VALUES (<include refid="project_proporties"/>)
</insert>
修改后代码
<!--增-->
<!--keyColumn="id"这条属性可以不加,只是为了防止自增属性不是第一个字段而设置的 keyProperty="id"当这个属性存在时,返回当前递增的ID useGeneratedKeys="true"-->
<insert id="addProject" parameterType="Project" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
    INSERT INTO project(<include refid="project_column"/>)
    VALUES (<include refid="project_proporties"/>)
</insert>
修改后在Controller层调用时
        project.getId();//此时为null
        projectService.addProject(project);
        project.getId();//此时可获取到ID

当使用的为修改后的代码时,在我们执行了这句SQL语句后,可以获得当前插入的这条数据的ID;


下面是添加的三个字段的详细描述:
useGeneratedKeys  (insert and update only) This tells MyBatis to use the JDBC getGeneratedKeys method to retrieve keys generated internally by the database (e.g.auto increment fields in RDBMS like MySQL or SQL Server). Default: false 
(( 仅 对 insert 和update有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的 getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQL Server 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。) 
keyProperty  
(insert and update only) Identifies a property into which MyBatis will set the key value returned by 
getGeneratedKeys , or by a selectKey child element of the insert statement. Default: unset . 
Can be a comma separated list of property names if multiple generated columns are expected. 
((仅对 insert和update有用) 标记一个属性, MyBatis会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。默认: 不设置。) 
keyColumn  
(insert and update only) Sets the name of the column in the table with a generated key. This is only required 
in certain databases (like PostgreSQL) when the key column is not the first column in the table. Can be a 
comma separated list of columns names if multiple generated columns are expected.
((仅对 insert和update有用) 标记一个属性, MyBatis会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。默认: 不设置。) 


备注:
useGeneratedKeys 要求数据库本身具备主键自动增长的功能,比如说,mysql,sqlserver可以使用useGeneratedKeys =true ;但是oracle不支持useGeneratedKeys。请参考下面方法(未实际测试)


参考大神的信息地址




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liu_an_hao/article/details/78021768

智能推荐

opencv3 7.1 sobel算子 &Laplacian算子_laplacian微分 与sobel-程序员宅基地

文章浏览阅读305次。sobel算子sobel是用于边缘检测的离散微分算子,结合了高斯平滑和微分求导,用来计算灰度函数的近似梯度。在图像的任何一点使用此算子,都将会产生对应的梯度适量或是其法矢量。计算过程图像I。对I在x和y两个方向求导。水平方向上:I与一个奇数大小的内核Gx进行卷积;垂直方向上:I与一个奇数大小 的内核Gy进行卷积。在图像的每一点,结合以上的两个结果求出近似梯度。G=|Gx|+|Gy|;..._laplacian微分 与sobel

android hid键盘码,USB HID键盘扫描码.doc-程序员宅基地

文章浏览阅读235次。Windows Platform Design NotesDesigning Hardware for the Microsoft( Windows( Family of Operating SystemsKeyboard Scan Code SpecificationAbstract: This specification details the PS/2 Scan Codes and USB ..._安卓usb hid键值查询时间

线程池---ThreadPoolExecutor中corePoolSize,maximumPoolSize,workQueue的关系_maximumpoolsize workqueue-程序员宅基地

文章浏览阅读6k次。常见的线程池创建方法有四种,但是这4中最终都会调用同一种创建方式:public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue workQueue,ThreadFactory threadFactory,Reject_maximumpoolsize workqueue

python11_py51111-程序员宅基地

文章浏览阅读534次。**python11**1.定义一个类(不限定定义哪个类):要求: a.需要有一个类变量b.需要有>=2个的对象变量c.定义一个方法:打印类变量和对象变量d.使用print打印对象->输出为This is a objecte.实例化两个对象:且两个对象相加等于2f.为对象添加一个临时变量temp_varclass Arg: arg = 1 def __init__(self, arg, name): self.arg = arg _py51111

文字闪烁和图片闪烁_delphi 文本闪烁-程序员宅基地

文章浏览阅读1.8k次。 .box{ animation: change 1s ease-in infinite ; font-size: 36px; color:#f00; font-weight: bold_delphi 文本闪烁

jenkins java传递变量_试图将变量从jenkins传递给ansible playbook-程序员宅基地

文章浏览阅读289次。我已经从gitlab设置了一个webhook来启动基于标签推送事件的jenkins工作 . 可能是合并或提交,但开发人员想要使用标记 . 没问题,它运作正常 . 这个工作得到了标记提交的哈希值,我已经验证了它也有效 . 这项工作然后开始另一个运行ansible playbook的工作,并开始构建 .所以我试图将git commit hash作为ansible extra_var传递,并通过exec..._jenkins 中ansibleplaybook 传参

随便推点

linux 如何进入刚刚创建的文件夹_linux创建文件夹并进入-程序员宅基地

文章浏览阅读4.5k次。我们知道 linux 下创建文件夹命令是 mkdir一般情况下, 我们期望在创建文件夹后, 并进入该文件夹这里以创建 test 文件夹, 并进入 test 文件夹为例# 创建 test 文件夹, 并进入 test 文件夹mkdir test && cd $_总结: 通过 $_ 获取到上次命令的最后一个参数值即获取 mkdir 最后一个参数值 test, 作为 cd 的参数, 即可进入刚刚创建的文件夹中..._linux创建文件夹并进入

【数据结构】二叉树的建立及先中后序遍历完整C语言代码_二叉树的建立与遍历完整代码-程序员宅基地

文章浏览阅读8.9k次,点赞28次,收藏113次。二叉树的先中后序遍历二叉树的建立先序遍历中序遍历后序遍历程序结果二叉树的建立我们知道,建立一个二叉树,可以写出它的先序遍历,后序遍历,中序遍历。本文根据先序序列建立一个二叉树,以字符#表示空结点。先序序列的二叉树如下图所示。(ABD##E##CF###)比如我们知道这样的一个二叉树想要建立这个二叉树二叉树,我们就要依次从键盘输入 ABD##E##CF###。这样,我们就建立好了一个二叉树,接下来就是输出该二叉树,分别通过先序遍历,中序遍历,后序遍历输出该二叉树。先序遍历//先序遍历void_二叉树的建立与遍历完整代码

单例模式、STL、智能指针下的线程安全问题_单例模式和智能指针有什么区别呢-程序员宅基地

文章浏览阅读596次。线程安全的单例模式我们首先要知道什么是单例模式:单例模式是一种经典的、常用的设计模式。设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。单例模式的特点一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访..._单例模式和智能指针有什么区别呢

程序员の物语_放心,我一分钱也不会给你-程序员宅基地

文章浏览阅读1.8k次。[迅雷不及掩耳]领导B说:我们开发下载软件吧,大家给取个名。小李说:那就叫“掩耳”吧。领导B问:为什么?小李说:“迅雷”不及“掩耳”啊。 [一分钱都不会给你]供应商的人来找领导A催款。领导A本想说我一分钱都不会少你的。结果说成:“你放心,我一分钱都不会给你的!”供应商满脸黑线…… [厂家喜欢你]给硬件做二次开发时,被我研究过的设备经常会无故失灵。有一次拆卡失败,结果……就没有结果了_放心,我一分钱也不会给你

RT-Thread Studio与CubeMX联合编程(超级详细)_rtthread studio cubemx-程序员宅基地

文章浏览阅读1.8w次,点赞63次,收藏214次。RT-Thread Studio与CubeMX联合编程本文章参考以下文章:https://blog.csdn.net/qq_40824852/article/details/122596043https://zhuanlan.zhihu.com/p/395106066https://blog.csdn.net/m0_37697335/article/details/108890584一、简介经过上次对RT-Thread Studio的初步尝试,发现RT-Thread Studio中存在官方支_rtthread studio cubemx

svn服务器端怎么放置项目,怎么搭建SVN服务器端-程序员宅基地

文章浏览阅读309次。作为IT开发人员,进行团队开发会用到SVN、VSS之类的团队版本控制器来进行代码的整合和版本控制,那么如何搭建SVN服务器端呢?下面是学习啦小编给大家整理的一些有关搭建SVN服务器端的方法,希望对大家有帮助!搭建SVN服务器端的方法首先百度关键字:VisualSVN-Server,在搜索结果中找到VisualSVN-Server的官网。2进入官网,找到相关的版本进行下载。注意系统是32位还是64位..._只能用svn做服务端把项目放上去