在进行批量新增(删除)时,一般的操作都是写一个循环,在循环中逐个执行新增(删除)语句,从而达到批量新增(删除)的结果;而Jfinal有更好方法Db.batch();
,这个方法可以对数据进行批量新增、修改、删除
看看Db.batch();
方法可以传递的参数:
场景使用:
1、新增
业务场景:给多个用户分配一样的权限
分析:批量将权限id和用户id插入到用户权限表中
//部分代码如下
List<String> sqls = new ArrayList<>();
//一个或多个用户的id
String idArr[] = user_ids.split(",");
for (String user_id : idArr) {
//sql语句,其中role_id是权限id
sqls.add("INSERT INTO sys_user_role (sys_user, sys_role) SELECT " + user_id + ", " + role_id + " FROM dual WHERE NOT EXISTS (SELECT 1 FROM sys_user_role WHERE sys_user = " + user_id +" AND sys_role = " + role_id + ")");
}
//批量插入
Db.batch(sqls, sqls.size());
2、删除
业务场景:删除某个权限下的一个或多个用户
ArrayList<String> sql_list = new ArrayList<>();
String[] split = user_ids.split(",");
//写法一
for (String s : split) {
sql_list.add("DELETE FROM SYS_USER_ROLE WHERE SYS_ROLE = "+ role_id +" AND SYS_USER ="+ s );
}
//写法二
//sql_list.add("DELETE FROM SYS_USER_ROLE WHERE SYS_ROLE = "+ role_id +" AND SYS_USER in("+ user_ids +")");
/**
* 注意这里的bathSize,在用于逐条删除的情况下,要填 1;在新增时,直接写sql_list.size()即可
*/
//这里一定要写1,跟新增不一样
Db.batch(sql_list,1);