Commit 7e76d22d authored by xiaoguang.xu's avatar xiaoguang.xu

批量使用case when 批量提交

parent d115cf65
...@@ -9,19 +9,18 @@ import cn.quantgroup.xyqb.util.encrypt.MD5Util; ...@@ -9,19 +9,18 @@ import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import com.google.common.base.Stopwatch; import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@RestController @RestController
...@@ -78,21 +77,19 @@ public class SyncHashController { ...@@ -78,21 +77,19 @@ public class SyncHashController {
}); });
log.info("遍历计算md5&crc32需要的时间 : {}ms", started.elapsed(TimeUnit.MILLISECONDS)); log.info("遍历计算md5&crc32需要的时间 : {}ms", started.elapsed(TimeUnit.MILLISECONDS));
started = started.reset().start(); started = started.reset().start();
String sql = "UPDATE `user_hash_mapping` SET `id_no_md5` = ?, `id_no_md5_short` = ? WHERE `user_id` = ? and `id_no_md5` is null";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
UserHashMapping userHashMapping = userHashMappings.get(i);
ps.setString(1, userHashMapping.getIdNoMd5());
ps.setLong(2, userHashMapping.getIdNoMd5Short());
ps.setLong(3, userHashMapping.getUserId());
}
@Override StringBuilder sbSql = new StringBuilder("UPDATE `user_hash_mapping` SET `id_no_md5` = CASE `user_id` ");
public int getBatchSize() {
return userHashMappings.size(); userHashMappings.forEach(userHashMapping -> sbSql.append(" WHEN ").append(userHashMapping.getUserId()).append(" THEN '").append(userHashMapping.getIdNoMd5()).append("'"));
} sbSql.append(" END, `id_no_md5_short` = CASE `user_id` ");
}); userHashMappings.forEach(userHashMapping -> sbSql.append(" WHEN ").append(userHashMapping.getUserId()).append(" THEN ").append(userHashMapping.getIdNoMd5Short()));
sbSql.append(" END ");
sbSql.append("WHERE `user_id` IN ( ");
List<Long> userIds = userHashMappings.stream().map(UserHashMapping::getUserId).collect(Collectors.toList());
sbSql.append(StringUtils.collectionToCommaDelimitedString(userIds));
sbSql.append(") and `id_no_md5` is null ");
jdbcTemplate.execute(sbSql.toString());
log.info("batchUpdate需要的时间 : {}ms", started.elapsed(TimeUnit.MILLISECONDS)); log.info("batchUpdate需要的时间 : {}ms", started.elapsed(TimeUnit.MILLISECONDS));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment