SQLStarter.java 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.vcarecity.cvs.starter;
  2. import com.vcarecity.cvs.core.ColumnUpdateMapper;
  3. import com.vcarecity.cvs.factory.ResultHandlerFactory;
  4. import com.vcarecity.cvs.service.ResultHandlerService;
  5. import com.vcarecity.cvs.service.SQLQueryService;
  6. import com.vcarecity.cvs.service.impl.CSVResultHandlerServiceImpl;
  7. import lombok.extern.slf4j.Slf4j;
  8. import javax.inject.Inject;
  9. import java.util.List;
  10. import static com.vcarecity.cvs.FileExporterApp.TABLE_COLUMN;
  11. /**
  12. * @author Kerry on 19/11/20
  13. */
  14. @Slf4j
  15. public class SQLStarter {
  16. private static final int PAGE_COUNT = 10000;
  17. private int pageCount = PAGE_COUNT;
  18. private final SQLQueryService queryService;
  19. private final ResultHandlerFactory resultHandlerFactory;
  20. @Inject
  21. public SQLStarter(SQLQueryService queryService,
  22. ResultHandlerFactory resultHandlerFactory) {
  23. this.queryService = queryService;
  24. this.resultHandlerFactory = resultHandlerFactory;
  25. }
  26. public void setPageCount(int pageCount) {
  27. this.pageCount = pageCount;
  28. }
  29. /**
  30. * 导出数据
  31. *
  32. * @param table
  33. * @param properties
  34. * @throws Exception
  35. */
  36. public <T> void exportDataAndConvert(String table, Object properties, Class<T> cls) throws Exception {
  37. if (cls == null) {
  38. //noinspection unchecked
  39. cls = (Class<T>) Object.class;
  40. }
  41. ResultHandlerService resultHandler = resultHandlerFactory.createResultHandler(properties);
  42. logger.info("start query database table = {}, file = {}, class = {}", table, properties, cls);
  43. long startTime = System.currentTimeMillis();
  44. int currentSize;
  45. int page = 1;
  46. do {
  47. // query
  48. List<T> result = queryService.queryByPage(table, page, this.pageCount, cls);
  49. final String[] headers = TABLE_COLUMN.get(table);
  50. // convert or save
  51. resultHandler.resultHandler(table, headers, result);
  52. currentSize = result.size();
  53. page++;
  54. } while (currentSize == this.pageCount);
  55. if (resultHandler instanceof CSVResultHandlerServiceImpl) {
  56. ((CSVResultHandlerServiceImpl) resultHandler).close();
  57. }
  58. final String[] headers = TABLE_COLUMN.get(table);
  59. final String[] mysqlHeader = ColumnUpdateMapper.updateColumnName(table, headers);
  60. logger.info("mysql header: {}", String.join(",", mysqlHeader));
  61. logger.info("stop query database...{} /ms.", (System.currentTimeMillis() - startTime));
  62. }
  63. }