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);

}

以上只是主要代码片段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值