BookController类
@Controller
@RequestMapping("/book")
public class BookController {
//controller调service层
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
//查询所有的书籍并返回到页面
@RequestMapping("/allbook")
public String list(Model model) {
List<Books> list = bookService.selectAllBook();
model.addAttribute("list", list);
return "allbook";
}
//跳转到增加书籍的页面
@RequestMapping("/toaddbook")
public String toAddPager() {
return "addbook";
}
//添加书籍的请求
@RequestMapping("/addbook")
public String addBook(Books books) {
bookService.addBooks(books);
return "redirect:/book/allbook";//重定向到我们的@RequestMapping("/allbook")
}
//跳转到修改页面
@RequestMapping("/toupdatebook")
public String toUpdatePager(int id,Model model) {
Books books = bookService.selectBookById(id);
model.addAttribute("Qbooks", books);
return "updatebook";
}
//修改书籍
@RequestMapping("/updatebook")
public String updateBook(Books books) {
bookService.updateBook(books);
return "redirect:/book/allbook";//重定向到我们的@RequestMapping("/allbook")
}
//删除书籍
@RequestMapping("/deletebook")
public String deleteBook(int id) {
bookService.deleteBookById(id);
return "redirect:/book/allbook";
}
}
查询操作
//查询所有的书籍并返回到页面
@RequestMapping("/allbook")
public String list(Model model) {
List<Books> list = bookService.selectAllBook();
model.addAttribute("list", list);
return "allbook";
}
allbook.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书籍展示</title>
<%--bootstrap美化页面--%>
<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">
<div class="page-header">
<h1>
<small>书籍列表</small>
</h1>
</div>
</div>
<div class="row">
<div class="col-md-4 column">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toaddbook">新增书籍</a>
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/allbook">显示全部书籍</a>
</div>
<div class="col-md-4 column"></div>
<div class="col-md-4 column">
<form action="${pageContext.request.contextPath}/book/querybook" method="post" style="float: right" class="form-inline">
<span style="color: red;font-weight: bold;">${error}</span>
<input type="text" name="queryBookName" class="form-control" placeholder="请输入要查询的书籍名称">
<input type="submit" value="查询" class="btn btn-primary">
</form>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-12 column">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>书籍编号</th>
<th>书籍名称</th>
<th>书籍数量</th>
<th>书籍详情</th>
<th>操作</th>
</tr>
</thead>
<%--书籍从数据库查询,从list中遍历出来:foreach--%>
<tbody>
<c:forEach var="book" items="${list}">
<tr>
<td>${book.bookId}</td>
<td>${book.bookName}</td>
<td>${book.bookCounts}</td>
<td>${book.detail}</td>
<td>
<a href="${pageContext.request.contextPath}/book/toupdatebook?id=${book.bookId}">修改</a>
|
<a href="${pageContext.request.contextPath}/book/deletebook/?id=${book.bookId}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
给增删改添加事务
在pom.xml添加依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
在spring-service.xml加入
<!--aop事务支持-->
<!--配置事务通知:-->
<tx:advice id="txAdvice" transaction-manager="transactionManger">
<!-- 给方法配置事务-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.xu.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
增加操作
在allbook.jsp中增加一个超链接,点击链接到addbook.jsp页面
<div class="row">
<div class="col-md-4 column">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toaddbook">新增书籍</a>
</div>
</div>
addbook.jsp
required在表单表示必须填入字段不能为空
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--bootstrap美化页面--%>
<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">
<div class="page-header">
<h1>
<small>新增书籍</small>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/book/addbook" method="post">
<div class="form-group">
<label>书籍名称</label>
<input type="text" name="bookName" class="form-control" required>
</div>
<div class="form-group">
<label>书籍数量</label>
<input type="text" name="bookCounts" class="form-control" required>
</div>
<div class="form-group">
<label>书籍详情</label>
<input type="text" name="detail" class="form-control" required>
</div>
<div class="form-group">
<input type="submit"class="form-control" value="添加">
</div>
</form>
</div>
</body>
</html>
在BookController定义页面的跳转
//跳转到增加书籍的页面
@RequestMapping("/toaddbook")
public String toAddPager() {
return "addbook";
}
//添加书籍的请求
@RequestMapping("/addbook")
public String addBook(Books books) {
bookService.addBooks(books);
return "redirect:/book/allbook";//重定向到我们的@RequestMapping("/allbook")
}
修改操作
修改和删除操作首先要在表里添加两个超链接用来跳转页面或者执行操作
<a href="${pageContext.request.contextPath}/book/toupdatebook?id=${book.bookId}">修改</a>
|
<a href="${pageContext.request.contextPath}/book/deletebook?id=${book.bookId}">删除</a>
在BookController中首先要实现点击修改跳转到update.jsp页面,并且在页面上显示默认的该书籍的信息,需要通过书籍的id来查询到它的相关信息,并显示在修改的页面当中
//跳转到修改页面
@RequestMapping("/toupdatebook")
public String toUpdatePager(int id,Model model) {
Books books = bookService.selectBookById(id);
model.addAttribute("Qbooks", books);
return "updatebook";
}
需要用到隐藏域
<%--前端传递隐藏域--%>
<input type="hidden" name="bookId" value="${Qbooks.bookId}">
updatebook.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--bootstrap美化页面--%>
<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">
<div class="page-header">
<h1>
<small>修改书籍</small>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/book/updatebook" method="post">
<%--前端传递隐藏域,因为修改需要通过id来修改--%>
<input type="hidden" name="bookId" value="${Qbooks.bookId}">
<div class="form-group">
<label>书籍名称</label>
<input type="text" name="bookName" class="form-control" value="${Qbooks.bookName}" required>
</div>
<div class="form-group">
<label>书籍数量</label>
<input type="text" name="bookCounts" class="form-control" value="${Qbooks.bookCounts}"required>
</div>
<div class="form-group">
<label>书籍详情</label>
<input type="text" name="detail" class="form-control" value="${Qbooks.detail}"required>
</div>
<div class="form-group">
<input type="submit"class="form-control" value="修改">
</div>
</form>
</div>
</body>
</html>
然后在BookController中实现修改书籍的请求
//修改书籍
@RequestMapping("/updatebook")
public String updateBook(Books books) {
bookService.updateBook(books);
return "redirect:/book/allbook";//重定向到我们的@RequestMapping("/allbook")
}
删除操作
//删除书籍
@RequestMapping("/deletebook")
public String deleteBook(int id) {
bookService.deleteBookById(id);
return "redirect:/book/allbook";
}
通过id删除,重定向到查询全部书籍的页面
拓展restful风格
只需要添加注释就可以变成/ / /的风格
//删除书籍
@RequestMapping("/deletebook/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allbook";
}
<a href="${pageContext.request.contextPath}/book/deletebook/${book.bookId}">删除</a>
增加搜索功能
首先要在allbook.jsp加一个搜索框
<div class="col-md-4 column">
<form action="${pageContext.request.contextPath}/book/querybook" method="post" style="float: right" class="form-inline">
<span style="color: red;font-weight: bold;">${error}</span>
<input type="text" name="queryBookName" class="form-control" placeholder="请输入要查询的书籍名称">
<input type="submit" value="查询" class="btn btn-primary">
</form>
</div>
其次在dao层的mapper接口写方法
//通过名称搜索书籍
Books queryBookByName(@Param("bookName") String bookName);
在mapper.xml写sql语句
<select id="queryBookByName" resultType="Books" parameterType="String">
select * from ssmbuild.books
where bookName=#{bookName}
</select>
在service层的service接口重写方法
//通过名称搜索书籍
Books queryBookByName(String bookName);
在service接口的实现类serviceimpl返回一个结果
@Override
public Books queryBookByName(String bookName) {
return bookMapper.queryBookByName(bookName);
}
在controller层的controller类里实现通过书籍名称查询数据,将数据放入集合里,将集合展示在前端页面,这可以实现仅展示查询的书籍,当搜索框为空时点击会展示全部书籍但会出现错误提示。
//查询书籍
@RequestMapping("querybook")
public String queryBook(String queryBookName,Model model) {
Books books = bookService.queryBookByName(queryBookName);
//将查出来的数据放进集合里然后在前端展示
List<Books> list = new ArrayList<>();
list.add(books);
//如果搜索的名称为空则显示全部书籍
if (books==null)
{
list = bookService.selectAllBook();
model.addAttribute("error", "未查到该书籍!");
}
model.addAttribute("list", list);
return "allbook";
}