关于批量执行
最后更新:2024-04-11 10:09:45
|
状态:未完成
JDBC批量执行要求SQL命令是一样的,第行的参数可以不一样。
service的insert,update,save,excute等方法在第一个参数前加一个int batch参数表示批量执行,batch表示每批次执行多少条命令。
insert update可以调用
service.insert(100, table, set);
如果比较复杂可以自定义的SQL,参数需要提供一个二维数组,如
注意批量的意思并不是生成许多条SQL一次执行。
而是生成1条SQL和多组参数提交给connection批量执行
service的insert,update,save,excute等方法在第一个参数前加一个int batch参数表示批量执行,batch表示每批次执行多少条命令。
insert update可以调用
service.insert(100, table, set);
如果比较复杂可以自定义的SQL,参数需要提供一个二维数组,如
List<Object> lines = new ArrayList<>(); for(int i=0; i<100; i++){ List<Object> line = new ArrayList<>(); line.add("1"+i); line.add("2"+i); lines.add(line); } String sql = "insert into crm_user(code,name)values(?,?)"; service.execute(10, sql, lines);或者#{占位},尽量不要这样,取值比较耗时
sql = "insert into crm_user(code,name)values(#{code},#{name})"; Collection<Object> list = new ArrayList<>(); for(int i=0; i<10; i++){ DataRow row = new DataRow(); //或User user = new User("code","name"); 这里最好用Map会更快 row.put("CODE", "code"+i); row.put("NAME", "name"+i); list.add(row); } service.execute(3, sql, list);如果要更快的话,就提前把参数封装好,要不然后续反射取值就可能影响性能了
service.execute(100, 2, "UPDATE CRM_USER SET CODE = ? WHERE ID = ?", list) //每次执行100行,每个SQL中2个占位符,所有的值放在一维集合list中
注意批量的意思并不是生成许多条SQL一次执行。
而是生成1条SQL和多组参数提交给connection批量执行