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);
}
以上只是主要代码片段
mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践相关推荐
- 对Spring Data JPA中的page对象下的content属性里的实体类对象转换为dto对象
对Spring Data JPA中的page对象下的content属性里的实体类对象转换为dto对象. 刚开始试遍历content,进行转换,添加到新的list中,再set进去page.后来发现pag ...
- jpa调用mysql函数_Spring data jpa 调用存储过程处理返回参数及结果集(示例代码)
一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...
- mysql jpa 正则_Spring Data JPA 实例查询
数量:1 刘芳 三.认识"实例查询" 1.概念定义: 上面例子中,是这样创建"实例"的:Example ex = Example.of(customer, ma ...
- spring data jpa从入门到精通_Spring Data JPA的简单入门
前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...
- jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结
一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一. 诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...
- jpa 定义中间表实体_Spring Data JPA实体详解
1. Spring Data JPA实体概述 JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系数据库的映射,此类Java对象称为JPA实体或简称实体.实体通常与底层数据库中的单个关系 ...
- java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...
- 在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式
Spring Data JPA的运行原理: @PersistenceContext(name="entityManagerFactory") private EntityManag ...
- hibernate mysql 读写分离_SpringBoot集成Spring Data JPA及读写分离
JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理Java应用中的关系数据.它包括以下几方面 ...
最新文章
- 以后看下try,catch在C#下面的成本
- Fiddler 环境和过滤规则详解
- 区块链100讲:据说,80%的人都搞不懂哈希算法
- 对学校的希望和寄语_家长对孩子的期望寄语精选
- thymeleaf引入css js写法
- mysql字符集调整总结
- Python的MySQLdb模块安装
- 如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
- nuc8 黑苹果_萝莉的身材野兽的心——NUC8 MacOS黑苹果-Win10双系统体验
- 基于JAVA+Servlet+JSP+MYSQL的牙科诊所管理系统
- 美团java在线笔试题_美团点评春招在线笔试后台开发方向笔试题编程题第一题题解...
- 国内IoT云平台横向对比
- postgresql下载linux版本
- SQL2000 挂起
- Python视觉深度学习系列教程 第二卷 第3章 理解rank-1rank-5精度
- N个字符或数字的全排列
- 前端开发:报错Error in... ”SyntaxError:Unexpected token u in JSON at position 0”…解决方法
- 【MATLAB】RGB转换为HSV三通道
- 北京第二外国语学院本科毕业论文答辩PPT模板
- js浏览器下载jpg, png, txt文件踩坑(尝试了百度的各种方法,以下总结2个靠谱点的)
热门文章
- 在过渡到Agile中的十种错误
- 国际:如何识别真正的程序员
- 网络爬虫--17.【BeautifuSoup4实战】爬取腾讯社招
- python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
- 使用fping 查看局域网中有哪些ip
- Qt 串口类QSerialPort 使用笔记
- C++基础之this指针的详解
- webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
- asp.net matlab,ASP.NET与MATLAB混合编译以及数据传递【更新中】
- nodeJs的学习之路(1)