当有多行数据需要插入某个表时,循环逐行执行insert无疑会增加数据库负担。此时可通过拼接批量Insert的SQL只需执行一次SQL语句即可批量插入数据,提升批量导入数据效率,提高代码性能,降低数据库负担。Map<String, String>的key为数据库字段名,value为要插入的值。
// List转批量插入sql
public static String getBatchInsertSql(String tableName, List<Map<String, String>>
dataList) {
StringBuffer sb = new StringBuffer();
StringBuilder valueSb = new StringBuilder();
valueSb.append(" values (");
sb.append("insert into ");
sb.append(tableName);
sb.append(" (");
for (int i = 0, size = dataList.size(); i < size; i++) {
Map<String, String> dataObj = dataList.get(i);
Set<String> keySet = dataObj.keySet();
int keySize = keySet.size();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()){
String key = iterator.next();
if (i == 0){
sb.append(key);
if (i != 0){
sb.append(")");
}else {
sb.append(",");
}
}
valueSb.append("'");
valueSb.append(dataObj.get(key));
valueSb.append("',");
}
if (i == size - 1){
sb.append(") ");
valueSb.append(")");
}else {
valueSb.append("),(");
}
}
sb.append(valueSb);
return sb.toString().replace(",)", ")");
}