mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践
Spring Data Jpa 雖然可以使用參數(shù)調(diào)整批量插入,但是僅限于主鍵策略不是?IDENTITY 的情況下,對于習慣了使用?IDENTITY 的 MySQL 選手來說,批量插入數(shù)據(jù)直接就悲劇了。
幸好我們還有 JdbcTemplate 這個利器,我們使用 Spring Data Jpa 的最佳實踐就是使用接口繼承 JpaRepository,接口里面是沒法注入的,所以我們可以再定義一個 Batch 操作的接口
public interface AdminGroupPermissionBatchRepository {
public void batchInsert(List adminGroupPermissions);
}
然后我們的接口同時繼承 Batch 這個接口,再單獨寫一個 Batch 接口的實現(xiàn)就好了,Spring Data Jpa 會全自動給我們搞定注入和調(diào)用的。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);
}
以上只是主要代碼片段
總結(jié)
以上是生活随笔為你收集整理的mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsp页面内引入静态html,JSP技术
- 下一篇: linux cmake编译源码,linu