【Mybatis】映射文件获取新增记录的id

news2024/12/24 2:21:20

我们在讲JDBC的时候讲过在插入新数据值的时候需要获得到自动生成的那个主键id的值

①获取PreparedStatement的对象的时候

PreparedStatement st = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS );

②在执行SQL语句后

st.executeUpdate();

ResultSet rs = st.getGeneratedKeys(); //得到插入行的主键

③最终拿到:if(rs.next()) System.out.println(rs.getInt(1));

Mybatis是对jdbc封装后的工具,当然也能做jdbc能做所有操作,那么Mybatis怎么获取新增的记录的这个id值?这里有分了两种数据库,一种是mysql这样的数据库支持自动增长,还有一种就是Oracle这样的不支持id自增的

mysql的做法

1.在映射文件的insert配置标签上加上两个属性,就这两个属性起作用

2.测试方法

Oracle的做法

前面我们用hibernate做的sshweb项目切换oracle数据库的时候,主键id自增是通过配置序列来实现的

这个配置本质上是怎么回事呢?本质是orcale为对应的表先添加一个序列列,这个序列列里的序列号是可以自增的

create sequence userid_seq

minvalue 1                    //初始序号为1

maxvalue                     //不设最大序号,用默认就不写,这里也可以设置

start with 1                //从1开始计算

increment by 1               //每次增1

NOCYCLE                      //直累加,不循环

cache 20                     //缓存20个

然后我们发起insert的sql语句的时候,在执行insert之前,我们先通过userid_seq .nextval(序列中的下一个数值),然后把这个值作为用户id插入数据库,这个序列值有个特性userid_seq.nextval拿一次,它递增一次,从而实现id值的自增长。 

当前序列列增量的修改:alter sequence 序列名 increment by 数值;

删除序列列:drop sequence 序列名;

①select USERID_SEQ.nextval from dual; 然后在用这个值做id插入数据库。

② 还可一步到位:insert into sb_users (id,username,password,state,reg_date) values (userid_seq.nextval,'tttt','tt',1,to_date('2018-09-01','yyyy-MM-dd'));

以上是orcale通过sequence实现自增长的本质,那么在Mybatis怎么搞呢?

还是设置映射文件,加了一个selectKey的标签(前提核心配置文件中将缓解的default改为orcale)

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

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

相关文章

git的使用之筛选文件上传到远程服务器仓库

.gitignore 让本地文件有选择上传到远程服务器仓库 下面是linux内核的.gitignore # # NOTE! Dont add files that are generated in specific # subdirectories here. Add them in the ".gitignore" file # in that subdirectory instead. # # NOTE! Please use gi…

Antd Vue项目引入TailwindCss之后出现svg icon下移,布局中的问题解决方案

目录 1. 现象: 2. 原因分析: 3. 解决方案: 写法一:扩展Preflight 写法二: 4. 禁用 Preflight 1. 现象: Antd Vue项目引入TailwindCss之后出现svg icon下移,不能对齐显示的情况&#xff0…

怎么把3d模型旋转加复制---模大狮

在进行3D建模和设计过程中,经常需要对3D模型进行旋转和复制操作,这是设计过程中的常见需求。本文将介绍如何对3D模型进行旋转和复制,帮助读者更好地掌握这一重要的操作技巧。 一、旋转3D模型 在大多数3D建模软件中,旋转3D模型通常…

《java数据结构》--顺序表详解

一.顺序表的概念🙉 🐱顺序表是一段物理地址连续的储存单元,一次储存数据元素的线性结构。一般情况下采用数组储存,和数组的增删查改类似。 但是顺序表和数组还是有区别的比如,数组按照是否可以扩容可以分为&#xff…

VTK 数据处理:几何操作

VTK 数据处理:几何操作 VTK 数据处理:几何操作实例 1:使用 vtkWarpTo 向指定点发生位移实例 2:使用 vtkWarpVector 按照指定向量发生位移实例 3:使用 vtkDeformPointSet 按照框架变形 VTK 数据处理:几何操作…

系统思考—战略沙盘推演咨询服务

今日与JSTO团队一起学习了《战略沙盘推演咨询服务》。通过沙盘体验,我深刻感受到组织与战略就像一张皮的正反两面。在转型过程中,即使战略非常明确,团队成员由于恐惧和顾虑,往往不愿意挑战新的业务,从而难以实现战略目…

PHP框架 Laravel

现在因为公司需求,需要新开一个Laravel框架的项目,毫无疑问,我又被借调过去了,最近老是被借调,有点阴郁,不过反观来看,这也是好事,又可以复习和巩固一下自己的知识点,接下…

Android 生成正式版密钥库 KeyStore

步骤1:打开生成正式版密钥库设置 点击 Build 菜单,选择 Generate Signed App Bundle or APK: 这是打开后的样子: 步骤2:选择 APK Android App Bundle 是用于上架 Google Play 商店的。 正常情况下选择 APK。 选择…

Rust 程序设计语言学习——常见集合:Vector String Map

Rust 中常见的集合包括 Vector&#xff08;列表&#xff09;、String&#xff08;字符串&#xff09;和 Map&#xff08;键值对&#xff09;。 Vec<T>&#xff0c;也被称为 vector。vector 允许我们在一个单独的数据结构中储存多于一个的值&#xff0c;它在内存中彼此相邻…

Java之Writer类:探索Java中的输出流

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

拿捏数据结构-top_k问题

top_k问题时间复杂度的计算 这里提前说明&#xff0c;时间复杂度的计算的目的是来计算向上调整的更优还是向下调整更优&#xff0c;从肉眼看的话向下调整优于向上调整&#xff0c;接下来我们进行时间复杂度的计算。 此时我们会用到等比数列求和以及裂项相消 如图 首先我们假设求…

【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp

一、实物图 前端uniapp效果图&#xff08;实现与onenet同步更新数据&#xff09; 首先要确定接线图和接线顺序&#xff1a; 1、stm32c8t6开发板连接stlinkv2下载线 ST-LINK V2STM323.3V3.3VSWDIOSWIOSWCLKSWCLKGNDGND 2、ch340串口连接底座&#xff08;注意RXD和TXD的连接方式…

Spring Boot集成shiro之使用redis缓存demo

1.背景 上次发了这篇文章《Spring Boot集成Shiro快速入门Demo》后&#xff0c;有网友“just.blue”后台反馈集成redis有点问题&#xff0c;今天特地把集成过程发出来 2.为什么要使用cache 用来减轻数据库的访问压力&#xff0c;从而提升查询效率。 3.Shiro使用Redis做缓存 …

Go 实现 WebSocket 的双向通信

在Go语言中实现WebSocket的双向通信通常需要使用第三方库&#xff0c;其中 gorilla/websocket 是一个非常流行和广泛使用的库。 1、安装 go get github.com/gorilla/websocket 2、编写WebSocket服务器代码 package mainimport ("fmt""github.com/gorilla/we…

AlibabaCloud(阿里云)支付方式介绍,使用虚拟卡支付阿里云

一、支付方式 二、 添加支付方式 点击添加支付方式按钮&#xff0c;您将进入添加支付方式流程。选择您偏好的支付方式&#xff0c;按页面指导进行添加即可。 1、信用卡 可以使用Fomepay的信用进行支付&#xff0c;点击获取 依次输入您银行卡的卡号、有效期、安全码&#xff…

实现一个简单的 Google Chrome 扩展程序

目录 &#x1f9ed; 效果展示 # 图示效果 a. 拓展程序列表图示效果&#xff1a; b. 当前选项卡页面右键效果&#xff1a; c. 拓展程序消息提示效果&#xff1a; &#x1f4c7; 项目目录结构 # 说明 # 结构 # 文件一览 ✍ 核心代码 # manifest.json # background.j…

JWT-登录后下发令牌

后端 写一个jwt工具类&#xff0c;处理令牌的生成和校验&#xff0c;如&#xff1a; 响应数据样例&#xff1a; 前端要做的&#xff1a;

Nginx文件解析漏洞复现:CVE-2013-4547

漏洞原理 CVE-2013-4547漏洞是由于非法字符空格和截止符导致Nginx在解析URL时的有限状态机混乱&#xff0c;导致攻击者可以通过一个非编码空格绕过后缀名限制。假设服务器中存在文件1. jpg&#xff0c;则可以通过改包访问让服务器认为访问的为PHP文件。 漏洞复现 开启靶场 …

均值算法详细教程(个人总结版)

背景 均值算法&#xff0c;也称为平均值算法&#xff0c;是统计分析中的基本方法之一。它通过求取一组数据的平均值来概括数据的集中趋势。在数据分析、机器学习、信号处理等领域&#xff0c;均值算法被广泛应用。 均值的种类 算术均值&#xff08;Arithmetic Mean&#xff…

手把手教你快速玩转香橙派AIPro

什么是香橙AIPro&#xff1f; OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&#xff0c;支持…