package com.vcarecity.cvs.starter; import com.vcarecity.cvs.core.ColumnUpdateMapper; import com.vcarecity.cvs.factory.ResultHandlerFactory; import com.vcarecity.cvs.service.ResultHandlerService; import com.vcarecity.cvs.service.SQLQueryService; import com.vcarecity.cvs.service.impl.CSVResultHandlerServiceImpl; import lombok.extern.slf4j.Slf4j; import javax.inject.Inject; import java.util.List; import static com.vcarecity.cvs.FileExporterApp.TABLE_COLUMN; /** * @author Kerry on 19/11/20 */ @Slf4j public class SQLStarter { private static final int PAGE_COUNT = 10000; private int pageCount = PAGE_COUNT; private final SQLQueryService queryService; private final ResultHandlerFactory resultHandlerFactory; @Inject public SQLStarter(SQLQueryService queryService, ResultHandlerFactory resultHandlerFactory) { this.queryService = queryService; this.resultHandlerFactory = resultHandlerFactory; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } /** * 导出数据 * * @param table * @param properties * @throws Exception */ public void exportDataAndConvert(String table, Object properties, Class cls) throws Exception { if (cls == null) { //noinspection unchecked cls = (Class) Object.class; } ResultHandlerService resultHandler = resultHandlerFactory.createResultHandler(properties); logger.info("start query database table = {}, file = {}, class = {}", table, properties, cls); long startTime = System.currentTimeMillis(); int currentSize; int page = 1; do { // query List result = queryService.queryByPage(table, page, this.pageCount, cls); final String[] headers = TABLE_COLUMN.get(table); // convert or save resultHandler.resultHandler(table, headers, result); currentSize = result.size(); page++; } while (currentSize == this.pageCount); if (resultHandler instanceof CSVResultHandlerServiceImpl) { ((CSVResultHandlerServiceImpl) resultHandler).close(); } final String[] headers = TABLE_COLUMN.get(table); final String[] mysqlHeader = ColumnUpdateMapper.updateColumnName(table, headers); logger.info("mysql header: {}", String.join(",", mysqlHeader)); logger.info("stop query database...{} /ms.", (System.currentTimeMillis() - startTime)); } }