7. 数据回显,批量更新、批量删除
大约 4 分钟
7. 数据回显,批量更新、批量删除
1. 批量修改更新
对一个表的多个数据进行批量修改实现更新,将修改的多条数据放到一个集合中发送给后台调用 dao 实现批量更新。
1.1 数据回显的介绍实现
在日常更新数据的时候,我们并不是只用一条 Sql 语句就实现的,一般需要两条 sql 语句配合使用,一条 sql 数据进行查询要更新的数据,然后显示在界面上,然后在这个界面修改数据,调用另一条 sql 语句进行数据更新。
数据回显关键是带id
查询数据,然后显示在另一个页面,数据回显页面,一般是xxxUI.jsp
这样表示
<a href="${pageContext.request.contextPath}/方法路径?id=${item.id}">修改</a>
1.1.1 前台 jsp 页面
<table border="1px" width="100%">
<tr>
<th>序号 </th>
<th>用户名 </th>
<th>密码 </th>
<th>城市 </th>
<th>操作 </th>
</tr>
<%--通过forEach循环,item是循环的当前对象,存放到作用域中,通过el表达式获取--%>
<c:forEach items="${list}" var="item" varStatus="vs">
<tr>
<td>${vs.index}</td>
<td>${item.username}</td>
<td>${item.password}</td>
<td>${item.city}</td>
<%-- 数据回显,当点击修改按钮的时候,会调用方法查询当前id的信息,然后将信息回显出来供你修改 --%>
<td><a href="${pageContext.request.contextPath}/updateInfo.action?id=${item.id}">修改</a> </td>
</tr>
</c:forEach>
</table>
1.1.2 通过参数 id 查询,然后返回给 xxxUI 回显页面
@RequestMapping("updateInfo.action")
public ModelAndView updatePersonInfo(int id){
//id=1
//1:模拟一下查询数据库
Person person= Db.findById(id);
//2:转发到页面
ModelAndView mv = new ModelAndView();//对数据与页面的封装
mv.addObject("person",person);
mv.setViewName("updatePersonUI");// 视图解析器加前后缀WEB-INFO/jsp/list.jsp
return mv;
}
1.1.3 查询到,回显页面显示,修改信息提交。
数据回显,date 类型显示不了,设置先为 text 进行文本修改。
<form method="post" action="${pageContext.request.contextPath}/updatePerson.action">
用户名: <input type="text" name="username" value="${person.username}"/><br/>
密码: <input type="text" name="password" value="${person.password}"/><br/>
城市: <input type="text" name="city" value="${person.city}"/><br/>
出生日期<input type="text" name="birthday"value="${person.birthday2}" /><br/>
<input type="submit" value="更新"/><br/>
</form>
1.2 批量修改 Person 数据
1、 2.1person
类;
public class Person {
private Integer id;
private String username;
private String password;
//省略get和set方法
}
1、 2.2jsp 页面;
<%-- 表单 只会将多条记录放到一个list里面,提交到后台--%>
<form method="post" action="${pageContext.request.contextPath}/updateList.action">
<table>
<c:forEach items="${PersonList}" var="person" varStatus="vs">
<tr>
<td><input type="hidden" value="${person.id}" name="list[${vs.index}].id" /></td>
<td><input type="text" value="${person.username}" name="list[${vs.index}].username" /></td>
<td><input type="text" value="${person.password}" name="list[${vs.index}].password" /></td>
</tr>
</c:forEach>
</table>
<input type="submit" value="提交数据到后台" > <br/>
</form>
1、 2.3 后台创建MyQueryOv
类来接收前台参数列表personLists
;
public class MyQueryOv {
//接收前台传过来的批量修改的person数据集合
private List<Person> personList;
public List<Person> getList() {
return list;
}
public void setList(List<Person> list) {
this.list = list;
}
}
1、 2.4 后台Controller
进行批量修改;
@RequestMapping("updateList.action")
public ModelAndView test03(MyQueryOv ov){
//参数写QueryOv类,但是页面要指定变量名与索引
System.out.println(ov.getList());
//进行批量更新操作
return null;
}
2. 批量删除操作
用复选框
标签,复选框的name值
相同,后台可以用两种方式接收数据:
1、 数组方式接收(这种方式,方法形式参数名要与复选框的name值保持一致
);
2、 创建一个新的类,来接收数据(会调用类的 set 方法赋值,所以属性名称要一致);
public class A{
private 数据类型[] 变量名;
}
前台 jsp 页面
前台 jsp 页面
<%--需要让复选框使用同一个name,页面会将选中的复选框的value值以数组形式提交给后台。
程序需要将多个值,放到数组中,提交到后台
这里后台接收到的数据,是value的值,不一定是你看到的
【***】一般把value的值设置为id,后台通过id删除--%>
<form method="post" action="${pageContext.request.contextPath}/deleteMany.action">
<input type="checkbox" value="1" name="ids"/> 数据1<br/>
<input type="checkbox" value="2" name="ids"/> 数据2<br/>
<input type="checkbox" value="3" name="ids"/> 数据3<br/>
<input type="submit" value="提交数据到后台" > <br/>
</form>
2.1 通过数组形式接收删除
后台通过数组接收,调用删除方法
@Controller
public class Demo01Controller {
@RequestMapping("delete1.action")
public ModelAndView test01(Integer[] ids){
//参数只需要写数组
System.out.println(Arrays.toString(ids));
//调用删除方法
return null;
}
}
2.2 通过创建新的类的方式来接收数据进行删除
2、 2.1 创建接收复选框值的类;
public class MyQueryOv {
private Integer[] ids;
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
}
2、 2.2 调用方法;
@RequestMapping("delete2.action")
public ModelAndView test02(MyQueryOv ov){
//参数只需要写QueryOV类,会自动赋值(调用set方法赋值),参数名要一致
System.out.println(Arrays.toString(ov.getIds()));
return null;
}