mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践

Spring Data Jpa 虽然可以使用参数调整批量插入,但是仅限于主键策略不是 IDENTITY 的情况下,对于习惯了使用 IDENTITY 的 MySQL 选手来说,批量插入数据直接就悲剧了。

幸好我们还有 JdbcTemplate 这个利器,我们使用 Spring Data Jpa 的最佳实践就是使用接口继承 JpaRepository,接口里面是没法注入的,所以我们可以再定义一个 Batch 操作的接口

public interface AdminGroupPermissionBatchRepository {

public void batchInsert(List adminGroupPermissions);

}

然后我们的接口同时继承 Batch 这个接口,再单独写一个 Batch 接口的实现就好了,Spring Data Jpa 会全自动给我们搞定注入和调用的。Spring Boot 真香啊!

public class AdminGroupPermissionBatchRepositoryImpl implements AdminGroupPermissionBatchRepository {

private final JdbcTemplate jdbcTemplate;

public AdminGroupPermissionBatchRepositoryImpl(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

@Override

public void batchInsert(List adminGroupPermissions) {

jdbcTemplate.batchUpdate("INSERT INTO " + AdminGroupPermission.TABLE_NAME + "(adminGroupId,actionId) values(?,?)",

new BatchPreparedStatementSetter() {

@Override

public void setValues(PreparedStatement preparedStatement, int i)

throws SQLException {

AdminGroupPermission adminGroupPermission = adminGroupPermissions.get(i);

preparedStatement.setInt(1, adminGroupPermission.getAdminGroupId());

preparedStatement.setString(2, adminGroupPermission.getActionId());

}

@Override

public int getBatchSize() {

return adminGroupPermissions.size();

}

});

}

}

Resposity 接口类如下:

@Repository

public interface AdminGroupPermissionRepository extends JpaRepository, AdminGroupPermissionBatchRepository {

public List findAllByAdminGroupId(Integer id);

@Modifying

@Transactional

@Query("DELETE FROM AdminGroupPermission WHERE adminGroupId = ?1")

public void deleteAllByAdminGroupId(Integer id);

}

以上只是主要代码片段

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

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

相关文章

nsoutlineview 搜索_阿里巴巴搜索推荐广告三位一体的在线服务体系

最近在工作中大量使用到了淘系的在线分发服务体系,可以快速高效的实现个性化内容分发,其技术架构的概览在这里分享给大家。AIOS(Artificial Intelligence Online Serving)是阿里巴巴集个性化搜索、推荐、广告三位一体的在线服务平台。在大型互联网公司里…

为了生活

前几天,我刚刚满30岁,30岁的那天,过得很深刻,高烧了40度,每次发烧我都没有去医院,这次也一样,潜意识里面觉得它一定会来,潜意识里面也知道它一定会走,不管是40度还是45度…

深度ip转换器手机版app_手机大师智能管家app下载-手机大师智能管家app官网版 v1.0.0...

手机大师智能管家app:针对各种手机垃圾快速在线清除的软件,利用这款软件可以快速的清除各种不同的手机垃圾,而且还可以一键在线加速,更好的享受手机加速带来的便捷,同时针对各种文件清理也更加的简单,让你更…

小米19999

以前没有钱买小米现在也是,没有钱买小米19999的小米可能会比较贵但是看完这几个动图再决定要不要切肾毕竟肾只有一个消息提示调节音量播放音乐玩游戏CS通知栏充电好像有几次文章都说明了我有好多好多朋友在做手机所以我对手机其实没有多大新鲜感不是因为贵了就买而是…

Maven配置项目依赖使用本地仓库的方法汇总

Maven配置项目使用本地仓库有以下方式实现&#xff1a; 1、类似本地仓库&#xff0c;但是属于本地依赖&#xff0c;比如某个JAR包是引用第三方的&#xff0c;直接放在了项目的lib文件夹&#xff0c;那么此时可以如下配置项目的POM&#xff1a; <dependency><groupId&g…

html5+css3第一次作业_“台风爷爷,让我作业飞走!”南京小学生写的诗都这么逆天了?...

小学生的脑洞能有多大&#xff1f;看看他们写的诗就知道了&#xff01;最近&#xff0c;南京游府西街小学四年(6)班孩子们的语文作业火了&#xff0c;一个个神句让老师都不得不服气。赶紧戳图来看↓↓↓语文老师严杏村介绍&#xff0c;原本的作业是抄写儿童现代诗&#xff0c;但…

小心内存对齐

什么是内存对齐&#xff1f;CPU在读取内存地址的时候&#xff0c;一定按照一定的偏移量去读取&#xff0c;不知道你发现了没有&#xff0c;我们没有看到一个变量的大小是 3 个字节的&#xff0c;都是 1 个字节&#xff0c;2个字节&#xff0c;4个字节&#xff0c;8个字节&#…

mysql为什么不驼峰_为什么不用驼峰命名创建表名和字段?

其实&#xff0c;这是一种规范&#xff0c;而不是一种规则。所以你使用驼峰来命名也是可以的&#xff0c;但是我们要避免用驼峰来命名。不只是数据库&#xff0c;就是平常的程序也是&#xff0c;因为&#xff1a;MYSQL 5.7 FEATURES. THIS MANUAL DESCRIBES FEATURES THAT ARE …

JavaScript获取select下拉框中的第一个值

JavaScript获取select下拉框中的第一个值 1、说明 获取select下拉框中的第一个值 2、实现源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns&quo…

好用的平板电脑_支架里的变形金刚让手机、电脑、平板更好用!6种角度,1秒切换...

六 月 惊 喜戳 这 里嗨&#xff0c;我是专注研究数码3C产品的小嘻~对于当代人来说&#xff0c;办公、学习、娱乐离不开三件宝&#xff1a;手机、平板、电脑。手机不离手&#xff0c;沟通工作、看剧、刷抖音&#xff0c;没留神几个小时就过去了&#xff0c;放下手机的时候就觉得…

推荐一位AI技术人

今天推荐认识的一个朋友&#xff0c;推荐的原因很简单&#xff0c;因为他非常喜欢篮球&#xff0c;正统校队篮球队员&#xff0c;这个AI相关的公众号一直是他个人运营&#xff0c;写了非常多的文章&#xff0c;如果大家有在学习AI相关的知识&#xff0c;强烈推荐关注。AI蜗牛车…

python从入门到大神系列手机_python从入门到大神---2、和Python编程相遇的日子

python从入门到大神---2、和Python编程相遇的日子一、总结一句话总结&#xff1a;python2和python3是很不同的&#xff0c;连语法都不同&#xff0c;比如 print 函数打印结果1、python中pip安装的包放在哪&#xff1f;lib\site-packages\包名\&#xff1a;包总是被安装在python…

flask 安装

flask官网 &#xff1a; http://docs.jinkan.org/docs/flask/installation.html &#xff08;基本上就是按照官网思路一点一点来的&#xff09; 1&#xff0c;安装easy_install: wget -q http://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py 2&#xff0c;安装…

如何 给给软件开发 添加 代理_敏捷开发是如何被跑偏的

今天聊聊敏捷软件过程。先说结论&#xff1a;据我观察&#xff0c;至少有60%的团队误用了敏捷软件过程&#xff0c;或者说至少60%的团队在进行伪敏捷开发。与大家通常的认知是相反的&#xff0c;敏捷过程并不是一个非常容易实践或者实施的过程规范。通常来讲&#xff0c;没有天…

在实时操作系统里随便写代码都能硬实时吗?

这是转发宋老师写的文章&#xff0c;我也是刚知道&#xff0c;宋老师跟我一样也是养娃的人了&#xff0c;国庆期间&#xff0c;看看文章&#xff0c;看看升升国旗。很久没有写技术文章了&#xff0c;做码农难&#xff0c;做养娃的码农更难&#xff0c;趁着娃看动画片的机会&…

《C程序设计语言》-第2章-习题

本人写的代码可能与标准答案有出入&#xff0c;但运行是没问题的&#xff0c;欢迎大家相互参考学习。 《C程序设计语言习题》2-1&#xff1a; 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接…

python 数据分析 实际案例_python实战案例:超市营业额数据分析

实战是学习的最好途径&#xff0c;效率最高&#xff0c;本文不是很长&#xff0c;通过小小的练习&#xff0c;让大家综合运用基础知识&#xff0c;加深印象巩固记忆。一、读入数据&#xff0c;了解数据本数据随机生成的假数据&#xff0c;读者可以自己造&#xff0c;也可以通过…

台达n2系列变频器_台达变频器C2000系列在Profibus网络中的应用

基本介绍现场总线就是顺应信息技术的发展趋势和工业控制系统的分散化、网络化、智能化要求而发展起来的新技术&#xff0c;它的出现和发展已经成为全球工业自动化技术的热点之一&#xff0c;受到全世界和工业界的普遍重视。现场总线(Fieldbus)技术是实现现场级控制设备数字化通…

python和c语言混合编程-python和C语言混编的几种方式

版权申明&#xff1a;本文为博主窗户(Colin Cai)原创&#xff0c;欢迎转帖。如要转贴&#xff0c;必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7594551.html 作者&#xff1a;窗户 QQ&#xff1a;6679072 E-mail&#xff1a;6679072qq.com Python这些年风头一直很盛&…

CentOS 6.8 虚拟机安装详解

第一步&#xff1a;安装 VMware 官方网站&#xff1a;www.vmware.com 下载百度云链接&#xff1a;http://pan.baidu.com/s/1bphDOWv 密码&#xff1a;0zix VMware 是一个虚拟 PC 的软件&#xff0c;可以在现有的操作系统上虚拟出一个新的硬件环境&#xff0c;相当于模拟出一台新…