日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2024/7/5 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。