MySQLResultStatHandlerServiceImpl.java 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.vcarecity.cvs.service.impl;
  2. import com.google.inject.Inject;
  3. import com.google.inject.assistedinject.Assisted;
  4. import com.vcarecity.cvs.core.ColumnUpdateMapper;
  5. import com.vcarecity.cvs.properties.AppProperties;
  6. import com.vcarecity.cvs.service.ResultHandlerService;
  7. import com.vcarecity.cvs.util.CreateDatasource;
  8. import com.zaxxer.hikari.HikariDataSource;
  9. import lombok.extern.slf4j.Slf4j;
  10. import java.sql.Connection;
  11. import java.sql.Date;
  12. import java.sql.Statement;
  13. import java.sql.Timestamp;
  14. import java.util.List;
  15. /**
  16. * @author Kerry on 19/11/21
  17. */
  18. @Slf4j
  19. public class MySQLResultStatHandlerServiceImpl implements ResultHandlerService {
  20. private final String sql;
  21. private final HikariDataSource dataSource;
  22. @Inject
  23. public MySQLResultStatHandlerServiceImpl(AppProperties properties, @Assisted Object sql) {
  24. this.sql = (String) sql;
  25. this.dataSource = CreateDatasource.createDataSource(properties.getToDb());
  26. }
  27. @Override
  28. public <T> void resultHandler(String table, String[] header, List<T> dataList) throws Exception {
  29. long startTime = System.currentTimeMillis();
  30. StringBuffer sb = new StringBuffer();
  31. final String[] newHeaders = ColumnUpdateMapper.updateColumnName(table, header);
  32. final String column = String.join(",", newHeaders);
  33. sb.append("INSERT INTO ").append(table).append("(").append(String.join(",", column)).append(") VALUES ");
  34. for (T t : dataList) {
  35. if (t.getClass().isArray()) {
  36. Object[] rows = (Object[]) t;
  37. sb.append("(");
  38. for (int i = 0; i < header.length; i++) {
  39. Object row = rows[i];
  40. if (row instanceof String) {
  41. sb.append("'").append(row).append("'");
  42. } else if (row instanceof Date) {
  43. sb.append("'").append(row).append("'");
  44. } else if (row instanceof Timestamp) {
  45. sb.append("'").append(row).append("'");
  46. } else {
  47. sb.append(row);
  48. }
  49. if (i != header.length - 1) {
  50. sb.append(",");
  51. }
  52. }
  53. sb.append("),");
  54. }
  55. }
  56. final StringBuffer stringBuffer = sb.deleteCharAt(sb.length() - 1);
  57. // logger.debug("{}", stringBuffer.toString());
  58. final Connection connection = dataSource.getConnection();
  59. final Statement statement = connection.createStatement();
  60. statement.execute(stringBuffer.toString());
  61. statement.close();
  62. connection.close();
  63. logger.info("WRITE SUCCESS to mysql usage time {} /ms, size = {}", System.currentTimeMillis() - startTime, dataList.size());
  64. }
  65. }