package foundation.data.object;
|
|
import java.sql.PreparedStatement;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.persist.ISavable;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.persist.source.NamedDataSource;
|
import foundation.variant.provider.IVariantsProvider;
|
|
public class BatchEntitySaver implements ISavable {
|
|
private static Logger logger;
|
private NamedDataSource dataSource;
|
private EntitySet entitySet;
|
private int savedCount;
|
private int totalSavedCount;
|
|
static {
|
logger = LogManager.getLogger(BatchEntitySaver.class);
|
}
|
|
|
public BatchEntitySaver(NamedDataSource dataSource) throws Exception {
|
this.dataSource = dataSource;
|
}
|
|
public int save(EntitySet entitySet, IVariantsProvider... providers) throws Exception {
|
this.entitySet = entitySet;
|
|
NamedSQL namedSQL = NamedSQL.getInstance(dataSource.getDBaseType(), "batchInsertEntity");
|
|
try {
|
namedSQL.setVariants(null, providers);
|
SQLRunner.saveData(namedSQL, this);
|
}
|
catch(Exception e) {
|
printError(namedSQL, e);
|
throw e;
|
}
|
|
return savedCount;
|
}
|
|
@Override
|
public void saveData(PreparedStatement stmt, Object... agrs) throws Exception {
|
int fieldCount = entitySet.getFieldCount();
|
|
for (Entity entity: entitySet) {
|
for (int i = 0; i < fieldCount; i++) {
|
Object object = entity.getFieldTypeValue(i);
|
stmt.setObject(i + 1, object);
|
}
|
|
stmt.addBatch();
|
}
|
|
stmt.executeBatch();
|
stmt.clearBatch();
|
|
savedCount = entitySet.size();
|
totalSavedCount = totalSavedCount + savedCount;
|
}
|
|
private void printError(NamedSQL namedSQL, Exception e) {
|
logger.error("load data error:");
|
|
try {
|
logger.error("sql:" + namedSQL.toString());
|
|
if (entitySet != null) {
|
int i = 1;
|
|
for (Entity entity: entitySet) {
|
logger.error("line" + i + ":" + entity.toString());
|
i++;
|
|
if (i > 5) {
|
break;
|
}
|
}
|
}
|
}
|
catch (Exception e1) {
|
logger.error(e1);
|
}
|
}
|
|
public int getSavedCount() {
|
return savedCount;
|
}
|
|
public int getTotalSavedCount() {
|
return totalSavedCount;
|
}
|
|
}
|