mysql中insert多个对象_反射生成 INSERT 多个对象的 SQL 语句(批量插入)

private static void insertObject(List> objectList) throwsIllegalAccessException {/*** 比如:

* SQL 语句:insert into person(name, age, info) values ('...', '...', '...');

* 其中 values 改为占位符:

* SQL 语句:insert into person(name, age, info) values (?, ?, ?);

* 再获取所有的数据值 Object 数组

* [zhengbin, 21, 要毕业了]*/

//确定占位符的个数(即对象中不为 null 的字段个数)

int columnNum = 0;//插入数据的列名

StringBuilder columns = new StringBuilder("(");//填充占位符的值(即对象中不为null的字段的值)

List valuesList = new ArrayList();//如果为空则不执行

if(CollectionUtil.isEmpty(objectList)) {return;

}//通过 List 中的第一个 Object,确定插入对象的字段

Object object = objectList.get(0);

Class clazz=object.getClass();

Field[] fields=clazz.getDeclaredFields();for(Field field : fields) {

field.setAccessible(true);if (field.get(object) != null) {

columnNum++;

columns.append(field.getName()).append(", ");

valuesList.add(field.get(object));

}

}

columns.replace(columns.lastIndexOf(", "), columns.length(), ")");//获取所有的值

for (int i = 1; i < objectList.size(); i++) {for(Field field : fields) {

field.setAccessible(true);if (field.get(objectList.get(i)) != null) {

valuesList.add(field.get(objectList.get(i)));

}

}

}//确定一个 Object 的占位符 '?'

StringBuilder zhanweifuColumn = new StringBuilder("(");for (int i = 0; i < columnNum; i++) {

zhanweifuColumn.append("?, ");

}

zhanweifuColumn.replace(zhanweifuColumn.lastIndexOf(", "), zhanweifuColumn.length(), ")");//确定所有的占位符

int objectNum =objectList.size();

StringBuilder zhanweifu= newStringBuilder();for (int j = 0; j < objectNum; j++) {

zhanweifu.append(zhanweifuColumn.toString()).append(", ");

}

zhanweifu.replace(zhanweifu.lastIndexOf(", "), zhanweifu.length(), "");//生成最终 SQL

String sql = "INSERT INTO " + object.getClass().getSimpleName().toLowerCase() + " " + columns + " VALUES " +zhanweifu.toString();

System.out.println(sql);

System.out.println(valuesList);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值