INSERT INTO table_name(column_list)
VALUES(value_list)
ON CONFLICT target action;
@Autowired
private EntityManager entityManager;
private static final String INSERT_QUERY_BASE_OFFLINE_AUTH =
"insert INTO etk_lg_life (fbh, offline_auth_id, offline_auth_time) VALUES ";
private static final String INSERT_PARAM_FOOTER_OFFLINE_AUTH =
" on conflict (fbh) do update set offline_auth_id = EXCLUDED.offline_auth_id , offline_auth_time=EXCLUDED.offline_auth_time ";
private static final int INSERT_BATCH_SIZE = 1000;
private static final String DELIMITER = ",";
private void insertAll1(List<String> lgs, Date dataDate, int linkId) {
String dataDateStr = DateUtil.format4Sql(dataDate);
String values = lgs.stream().map(lg -> this.renderSqlForLgLife(lg, dataDateStr, linkId))
.collect(Collectors.joining(DELIMITER));
String insertSQL = INSERT_QUERY_BASE_OFFLINE_AUTH + values +INSERT_PARAM_FOOTER_OFFLINE_AUTH ;
entityManager.createNativeQuery(insertSQL).executeUpdate();
entityManager.flush();
entityManager.clear();
}
private String renderSqlForLgLife(String lg, String dataDateStr, int linkId) {
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("('").append(lg).append("',").append(linkId).append(",'").append(dataDateStr).append("')");
return sBuilder.toString();
}
ListUtils.partition(lgLifeModel.getLgs(), INSERT_BATCH_SIZE).forEach(lgs -> {
insertAll1(lgs, lgLifeModel.getDataDates()[0], lgLifeModel.getLinkId());
log.info("插入{}life数据成功", lgs.size());
});