MySql
一、批量插入
/**
*
* @author 陈笑璞
* @Title: batchSaveMySQL
* @Description: mysql批量插入的工具类
* @param entityManager entityManager service的getEm()
* @param table 表名
* @param list 数据列表
* @param fields 字段列表
* @throws CustomException 参数及其意义
* @return int 返回成功保存的条数(状态)
*/
public static int batchSaveMySQL(EntityManager entityManager,String table,List<Map<String, Object>> list,List<String> fields) throws CustomException {
int resultNum=0;
if (list.size() == 0) {
return resultNum;
}
int len=100;// len的倍数就保存一次方式
StringBuilder sql = new StringBuilder("INSERT INTO ")
.append(table).append(" (");
for(int i=0;i<fields.size();i++) {
sql.append("`").append(fields.get(i)).append("`");
if(i == fields.size()-1) {
sql.append(")");
}else {
sql.append(", ");
}
}
sql.append(" VALUES ");
StringBuilder sql1 = new StringBuilder(sql);// 余数后的处理sql
int myNum = fields.size();
for (int i=0;i<len;i++) {
if (i > 0) sql.append(", ");
sql.append("(");
for(int j=0;j<myNum;j++) {
sql.append("?");
if(j == myNum-1) {
sql.append(")");
}else {
sql.append(", ");
}
}
}
List<Object> data=new ArrayList<>();
for(int i=0;i<list.size();i++) {
Map<String, Object> entity = list.get(i);
for (String string : fields) {
data.add(entity.get(string));
}
if((i+1)%len==0) {
Query query2=entityManager.createNativeQuery(sql.toString());
setQueryParams(query2, data);
resultNum += query2.executeUpdate();
data=new ArrayList<>();// 重新创建对象
} else if (i==list.size()-1) {
// 处理好取余后的余数数据逻辑
for (int ii=0,length=((i+1) % len);ii<length;ii++) {
if (ii > 0) sql1.append(", ");
sql1.append("(");
for(int j=0;j<myNum;j++) {
sql1.append("?");
if(j == myNum-1) {
sql1.append(")");
}else {
sql1.append(", ");
}
}
}
Query query2=entityManager.createNativeQuery(sql1.toString());
setQueryParams(query2, data);
resultNum += query2.executeUpdate();
}
}
System.out.println("resultNum===>>>" + resultNum);
return resultNum;
}
调用方法如下:
public static void main</