前提
在页面对checkedbox为true的用户,进行批量删除
页面通过<input>标签的name属性和id属性传递用户名和用户id
content+=' <td><input type="checkbox" name="'+n.loginacct+'" id="'+n.id+'"></td>';
封装多个相同属性名的json数据
1.先定义一个变量jsonObj
2.通过下面语句得到被勾选的checkbox的集合,即被删除的用户集合
var selectCheckbox = $("tbody tr td input:checked");
3.通过遍历,得到,每个用户的id和loginacct属性值,这里可以把jsonObj看作是一个数组集合
注意:datas的名称必须与服务器端相关的Controller方法参数类型的字段一致
var jsonObj = {};
$.each(selectCheckbox,function(i,n){
jsonObj["datas["+i+"].id"] = n.id;
jsonObj["datas["+i+"].loginacct"] = n.name;
});
封装后的json参数,datas代表Controller接受的参数类型所具有的属性,[X]代表是否封装到同一个对象,.id代表datas属性里必须带有id属性
datas[0].id = XX
datas[0].loginacct = XX
datas[1].id = XX
datas[1].loginacct = XX
4.相对应的Controller方法,其中Data参数类型必须有datas属性
@ResponseBody
@RequestMapping("/doDeleteBatch")
public Object doDeleteBatch(Data data) {
AjaxResult result = new AjaxResult();
try {
int count = userService.deleteBatchUserByVo(data);
result.setSuccess(count==data.getDatas().size());
} catch (Exception e) {
e.printStackTrace();
result.setSuccess(false);
result.setMessage("删除数据失败");
}
return result;
}
5.Data类里面必须有datas属性
public class Data {
private List<User> userList = new ArrayList<User>();
private List<User> datas = new ArrayList<User>();
private List<Integer> ids;
private List<MemberCert> certimgs = new ArrayList<MemberCert>();
6.略过Controller成和Service层
Dao层的mapper方法,传入的是Data类型
int deleteBatchUserByVo(Data data);
7.对应的的mybatis方法,collection可以写Data的datas集合属性,框架能够通过属性名进行查找遍历datas集合,得到每个user对象
<delete id="deleteBatchUserByVo">
delete from t_user where id in
<foreach collection="datas" open="(" close=")" separator="," item="user">
#{user.id}
</foreach>
</delete>
---------------------------------------------------------------------------------------------
当业务层传入的不是data对象,而是data对象里面的集合
@Override
public int deleteBatchUserByVo(Data data) {
return userMapper.deleteBatchUserByVo(data.getDatas());
}
Dao方法参数类型也变成List集合
int deleteBatchUserByVo(List<User> userList);
这时候mybatis的配置语句的collection就不能写成userList了,必须写成固定参数list(官方文档写明)
<!-- 如果mapper接口参数类型为Collection集合,那么,可以使用list来获取这个集合参数 -->
<!-- 如果mapper接口参数类型为Array集数组,那么,可以使用array来获取这个数组参数 -->
<delete id="deleteBatchUserByVo">
delete from t_user where id in
<foreach collection="list" open="(" close=")" separator="," item="user">
#{user.id}
</foreach>
</delete>