【SSM - SpringMVC篇】07 - 数据回显,批量更新、批量删除

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.1 person

public class Person {
    
     
    private Integer id;
    private String username;
    private String password;
    //省略get和set方法
}

1.2.2 jsp页面

		<%-- 表单 只会将多条记录放到一个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;
    }

猜你喜欢

转载自blog.csdn.net/qq_40542534/article/details/109099811