新增一个主键自增长_MyBatis 示例-主键回填

4dd2164e5f7d0de86d2591f40c14e742.png

测试类:com.yjw.demo.PrimaryKeyTest

自增长列

数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了实现的方法。

StudentMapper.xml

<insert id="insertByAutoInc" parameterType="studentDO" keyProperty="id" useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)values (#{name,jdbcType=VARCHAR},#{sex,jdbcType=TINYINT},#{selfcardNo,jdbcType=BIGINT},#{note,jdbcType=VARCHAR})
</insert>

通过配置两个属性(keyProperty、useGeneratedKeys)获取表中生成的自增长主键。

  • keyProperty:表示以哪个列作为属性的主键,不能和 keyColumn 同时使用,如果你是联合主键可以用逗号将其隔开;
  • useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,例如,MySQL 和 SQL Server 自动递增字段,Oracle 的序列等,但是使用它就必须要给 keyProperty 或者 keyColumn 赋值。useGeneratedKeys 的取值为布尔值,true/false,默认值为 false;

批量新增数据,也可以采用和上面一样的方式。

<insert id="batchInsertByAutoInc" parameterType="list" keyProperty="id" useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)values <foreach collection="list" item="item" index="index" separator=",">(#{item.name,jdbcType=VARCHAR},#{item.sex,jdbcType=TINYINT},#{item.selfcardNo,jdbcType=BIGINT},#{item.note,jdbcType=VARCHAR})</foreach>
</insert>

非自增长列

假设我们取消表 t_student 的 id 自增的规则,我们的要求是:如果表 t_student 没有记录,则我们需要设置 id=1,否则我们就取最大 id 加2,来设置新的主键。对于一些特殊的要求,MyBatis 也提供了对应方法。

<insert id="insertByNoAutoInc" parameterType="studentDO"><selectKey keyProperty="id" resultType="long" order="BEFORE">select if(max(id) is null, 1, max(id) + 2) as newId from t_student</selectKey>insert into t_student (id, name, sex, selfcard_no, note)values (#{id,jdbcType=BIGINT},#{name,jdbcType=VARCHAR},#{sex,jdbcType=TINYINT},#{selfcardNo,jdbcType=BIGINT},#{note,jdbcType=VARCHAR})
</insert>

批量新增数据,也可以采用和上面一样的方式。

<insert id="batchInsertByNoAutoInc" parameterType="list"><selectKey keyProperty="id" resultType="long" order="BEFORE">select if(max(id) is null, 1, max(id) + 2) as newId from t_student</selectKey>insert into t_student (name, sex, selfcard_no, note)values<foreach collection="list" item="item" index="index" separator=",">(#{item.name,jdbcType=VARCHAR},#{item.sex,jdbcType=TINYINT},#{item.selfcardNo,jdbcType=BIGINT},#{item.note,jdbcType=VARCHAR})</foreach>
</insert>
架构笔记 · 语雀​www.yuque.com
ea8d14a099e937579bb9afb145d0d5c5.png

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

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

相关文章

干货|机器学习零基础?不要怕,吴恩达课程笔记第三周!逻辑回归与正则

吴恩达Coursera机器学习课系列笔记课程笔记|吴恩达Coursera机器学习 Week1 笔记-机器学习基础干货|机器学习零基础&#xff1f;不要怕&#xff0c;吴恩达机器学习课程笔记2-多元线性回归1Logistic Regression1.1 Logistic Regression (Classification) Model之前对房价的预测&a…

计算机网络互联网技术实验报告,2013计算机网络技术与应用.实验报告01

本报告 6 月 5 日前完成。 此框阅读后删除。 此处填写&#xff1a;年级和姓名。 《计算机网络技术与应用》实验报告 此框阅读后删除。 年级、专业、班级 实验题目 实验时间 实验成绩 2013.4.1 11 级 专业 班 姓名计算机网络应用软件与拓扑结构实验地点 实验性质 DS1422■验证性…

如何在C#中使用 ArrayPool,MemoryPool

对资源的可复用是提升应用程序性能的一个非常重要的手段&#xff0c;比如本篇要分享的 ArrayPool 和 MemoryPool&#xff0c;它们就有效的减少了内存使用和对GC的压力&#xff0c;从而提升应用程序性能。什么是 ArrayPool System.Buffers 命名空间下提供了一个可对 array 进行复…

LAMP攻略: LAMP环境搭建,Linux下Apache,MySQL,PHP安装与配置

之前写过一个red hat 9下的LAMP环境的配置&#xff0c;不过由于版本比较旧&#xff0c;很多不适用了。 所以决定写一个新的LAMP环境搭建与配置教程。本配置是在 CentOS-5.3 下 httpd-2.2.11.tar.gz MySQL-client-community-5.1.33-0.rhel5.i386.rpm MySQL-devel-community-5.1…

服务器自动删文件,服务器定时删除文件工具

服务器定时删除文件工具&#xff0c;这是一个定时删除服务器上文件的小程序修改配置文件config.ini&#xff0c;dir是主目录;dirs是要删除文件目录;deltype是删除类型,0是创建日期,1是修改日期;delday是保留天数;deltime是定时删除时间。[config]dir\\cb19\pictifdirs01,02,03,…

30 个实例详解 TOP 命令

Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载。在本篇中&#xff0c;我们会探索top命令的细节。top命令是一个交互命令。在运行top的时候还可以运行很多命令。我们也会探索这些命令。&#xff08;译注&#xff1a;不…

IComparer与IEqualityComparer的简单使用

场景一&#xff1a;对象列表的自定义排序简单类型的列表&#xff0c;可以直接使用Linq的OrderBy或OrderByDescending进行排序&#xff0c;复杂对象的列表排序可以使用Sort()和IComparer实现自定义对象比较规则。假如有一个Box类&#xff0c;它有名称、长、宽、高四个属性&#…

程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)

TestComplete是一款具有人工智能的自动UI测试工具&#xff0c;利用自动化测试工具和人工智能支持的混合对象识别引擎&#xff0c;轻松检测和测试每个桌面&#xff0c;Web和移动应用程序。其中&#xff0c;TestComplete支持测试使用C、C&#xff03;、VB.NET、Java、Delphi、C …

陕西省计算机二级报名流程,计算机二级考试报名流程

计算机二级考试报名流程第一次参加全国计算机等级考试的考生对于网上报名的流程&#xff0c;对全国计算机考试流程中某些环节并不清楚。下面是小编为大家带来的计算机二级考试报名流程&#xff0c;欢迎阅读。(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#xff0…

Git 的 4 个阶段的撤销更改

虽然git诞生距今已有12年之久&#xff0c;网上各种关于git的介绍文章数不胜数&#xff0c;但是依然有很多人&#xff08;包括我自己在内&#xff09;对于它的功能不能完全掌握。以下的介绍只是基于我个人对于git的理解&#xff0c;并且可能生编硬造了一些不完全符合git说法的词…

51CTO下载专题有奖征集建议:您的期待,我们的方向!

2010年5月10日&#xff0c;51CTO下载专题 隆重上线。精细的技术领域、优质的技术资源、大方的设计风格......让您对精品资源一网打尽&#xff0c;直达心灵所需&#xff01; 51CTO下载专题每周发布1-2期&#xff0c;旨在帮助大家在最短的时间里&#xff0c;找到自己感兴趣技术点…

Visual Studio SnippetDesigner使用

SnippetDesigner代码片段编辑器这是一款在Visual Studio上代码片段编辑器插件&#xff0c;可以轻松创建代码片段&#xff0c;为什么要用这个代码片段呢&#xff0c;理由&#xff1a;平常在编码过程中&#xff0c;有许多重复性的代码语句&#xff0c;为了提高编码速度与便捷&…

生态合作与自主可控

生态合作与自主可控是一个大题目&#xff0c;从不同角度来讨论&#xff0c;不同的人会得出不同的结论。为了交流不空洞&#xff0c;先介绍一个案例&#xff0c;它具有普遍性&#xff1a;L总应该是前年与我们联系过&#xff0c;今年刚刚与我们联系描述了一下他们的现状&#xff…

css规则中区块block,CSS的命名方式:BEM(区块、元素、修饰符)

原标题&#xff1a;CSS的命名方式:BEM(区块、元素、修饰符)本资源由 伯乐在线- 凝枫整理&#xff0c;您也想贡献一份力量&#xff1f;欢迎加入我们 重要概念“Block”区块区块的定义是&#xff1a;一个逻辑和功能兼备的独立页面组件&#xff0c;也可以称为web组件。一个区块包含…

表达式如何获取复选框的值_Nuke表达式 Expression节点讲解

nuke中的表达式节点对于大多数人来说有点神秘&#xff0c;但它非常强大。通常它通过简单的if / else语句修补数据&#xff0c;但在这里我们将从最基本的原则&#xff0c;到一些长期被遗忘的高中数学做一些简单的技巧&#xff0c;最后把它们融合在一起。第一步创建Constant节点&…

如何在 ASP.NET Core MVC 5 中处理未知的 Action

ASP.NET Core MVC 5 是一个轻量级&#xff0c;开源的&#xff0c;利于单元测试的基于 ASP.NET Core 运行时的 web 框架&#xff0c;在开发时你肯定会遇到不少那些 request 无法匹配 Action 的情况&#xff0c;通常做法是抛出 404&#xff0c;但有些场景下我希望能收口到统一一个…

一文读懂 HMM 模型和 Viterbi 算法

隐含马尔可夫模型&#xff08;Hidden Markov Model&#xff09;隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的&#xff0c;而是美国数学家鲍姆提出的&#xff0c;隐含马尔可夫模型的训练方法&#xff08;鲍姆-韦尔奇算法&#xff09;也是以他名字命名的。隐含马尔可夫模型…

qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置

将富文本编辑框设置为2.0&#xff0c;关联一个control变量m_textblock&#xff1a;1 字体设置富文本编辑框关于字体设置的成员函数&#xff1a;BOOL CRichEditCtrl::SetSelectionCharFormat( CHARFORMAT& cf );此成员函数用来设置这个CRichEditCtrl对象中的当前选择的文本的…

云计算的关键特点及挑战

本文节选自《云计算&#xff1a;实现、管理与安全》导言 云计算的关键特点 一个云计算环境有几个关键特点。服务经常提供给特定 的看到因他们的资本支出最小化而获益的消费者和小企业。 这有助于降低在市场进入门槛&#xff0c;因为用来提供这些产品的基础设施由云服务提供商拥…

Mock 框架 Moq 的使用

Mock 框架 Moq 的使用IntroMoq 是 .NET 中一个很流行的 Mock 框架&#xff0c;使用 Mock 框架我们可以只针对我们关注的代码进行测试&#xff0c;对于依赖项使用 Mock 对象配置预期的依赖服务的行为。Moq 是基于 Castle 的动态代理来实现的&#xff0c;基于动态代理技术动态生成…