1.修改数据
- 修改原理:就是按照书籍的ID进行修改
- 在数据展示页面添加修改跳转链接
- 添加删除视图跳转controller的方法
注意:我们修改的时候应该将原来的数据展示在修改页面上,用户要修改什么直接填上新的值再提交即可,所以跳转修改页面的时候我们应该传递这一条数据对应的ID,然后在跳转视图之前按照ID把数据查出来,并通过model对象将数据返回@RequestMapping("/updateBook") public String updateBookPage(int id,Model model){//跳转新增书籍的视图 Books books = service.queryBookById(id); model.addAttribute("books",books); return "updateBook"; }
- 创建修改视图updateBook.jsp
注意我们修改书籍信息的原理:按照ID修改,所以在向controller提交数据的时候我们需要巧用隐藏域将数据对应的ID也提交过去,否则是不能对数据库中的数据进行修改的<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <%--bootstrap--%> <%--直接在线引入css文件--%> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"><%--栅格系统--%> <div class="row clearfix"> <div class="col-md-12 column"><%--将屏幕分为12份--%> <div class="page-header"> <h1> <small>修改书籍</small> </h1> </div> </div> </div> <form action="${pageContext.request.contextPath}/book/updateBooks" method="post"> <input type="hidden" value="${books.bookID}" name="bookID"><%--精妙之处:巧用隐藏域传递修改的id--%> <div class="form-group"> <label for="bookName">书籍名称</label> <input type="text" class="form-control" id="bookName" name="bookName" required value="${books.bookName}"> </div> <div class="form-group"> <label for="bookCounts">书籍数量</label> <input type="text" class="form-control" id="bookCounts" name="bookCounts" required value="${books.bookCounts}"> </div> <div class="form-group"> <label for="detail">书籍描述</label> <input type="text" class="form-control" id="detail" name="detail" required value="${books.detail}"> </div> <button type="submit" class="btn btn-default">修改书籍</button> </form> </div> </body> </html>
- 编写修改书籍信息的controller
@PostMapping("/updateBooks") public String updateBook(Books books){ System.out.println("updateBook==>"+books); service.updateBook(books); return "redirect:/book/allBook";//直接重定向上面的处理方法,实现了请求复用 }
注意:在最后还是使用的重定向,将视图重定向到展示所有数据的页面 - 测试
2.删除数据
- 删除功能相对实现起来简单一些,因为不涉及任何视图界面,我们只需要传递ID并在controller中调用service中的删除操作即可
<a href="${pageContext.request.contextPath}/book/deleteBook?id=${book.bookID}">删除</a>
@RequestMapping("/deleteBook") public String deleteBook(int id){ System.out.println("deleteBook==>接收的ID = "+id); service.deleteBookById(id); return "redirect:/book/allBook"; }
3.日志
其实上面传递ID来修改数据使用隐藏域的做法很容易被忘记,造成我们只是传递了书籍名称、数量和详情,但是没有传递指定修改的ID而无法修改的情况
对于这种容易忘记的情况,我们可以开启mybatis中的日志,无论是正常的普通日志还是log4j日志都可以
只要开启了日志,每一句执行的SQL和对应的结果都会在控制台打印输出,这样我们就可以看到我们在前端进行的操作在底层到底是怎么执行的了