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 主键下批量插入最佳实践相关推荐

  1. 对Spring Data JPA中的page对象下的content属性里的实体类对象转换为dto对象

    对Spring Data JPA中的page对象下的content属性里的实体类对象转换为dto对象. 刚开始试遍历content,进行转换,添加到新的list中,再set进去page.后来发现pag ...

  2. jpa调用mysql函数_Spring data jpa 调用存储过程处理返回参数及结果集(示例代码)

    一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...

  3. mysql jpa 正则_Spring Data JPA 实例查询

    数量:1 刘芳 三.认识"实例查询" 1.概念定义: 上面例子中,是这样创建"实例"的:Example ex = Example.of(customer, ma ...

  4. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

  5. jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一.  诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...

  6. jpa 定义中间表实体_Spring Data JPA实体详解

    1. Spring Data JPA实体概述 JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系数据库的映射,此类Java对象称为JPA实体或简称实体.实体通常与底层数据库中的单个关系 ...

  7. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  8. 在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式

    Spring Data JPA的运行原理: @PersistenceContext(name="entityManagerFactory") private EntityManag ...

  9. hibernate mysql 读写分离_SpringBoot集成Spring Data JPA及读写分离

    JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理Java应用中的关系数据.它包括以下几方面 ...

最新文章

  1. 以后看下try,catch在C#下面的成本
  2. Fiddler 环境和过滤规则详解
  3. 区块链100讲:据说,80%的人都搞不懂哈希算法
  4. 对学校的希望和寄语_家长对孩子的期望寄语精选
  5. thymeleaf引入css js写法
  6. mysql字符集调整总结
  7. Python的MySQLdb模块安装
  8. 如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
  9. nuc8 黑苹果_萝莉的身材野兽的心——NUC8 MacOS黑苹果-Win10双系统体验
  10. 基于JAVA+Servlet+JSP+MYSQL的牙科诊所管理系统
  11. 美团java在线笔试题_美团点评春招在线笔试后台开发方向笔试题编程题第一题题解...
  12. 国内IoT云平台横向对比
  13. postgresql下载linux版本
  14. SQL2000 挂起
  15. Python视觉深度学习系列教程 第二卷 第3章 理解rank-1rank-5精度
  16. N个字符或数字的全排列
  17. 前端开发:报错Error in... ”SyntaxError:Unexpected token u in JSON at position 0”…解决方法
  18. 【MATLAB】RGB转换为HSV三通道
  19. 北京第二外国语学院本科毕业论文答辩PPT模板
  20. js浏览器下载jpg, png, txt文件踩坑(尝试了百度的各种方法,以下总结2个靠谱点的)

热门文章

  1. 在过渡到Agile中的十种错误
  2. 国际:如何识别真正的程序员
  3. 网络爬虫--17.【BeautifuSoup4实战】爬取腾讯社招
  4. python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
  5. 使用fping 查看局域网中有哪些ip
  6. Qt 串口类QSerialPort 使用笔记
  7. C++基础之this指针的详解
  8. webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
  9. asp.net matlab,ASP.NET与MATLAB混合编译以及数据传递【更新中】
  10. nodeJs的学习之路(1)