★学习目标:
1、掌握云借阅系统的新书推荐过程
★思考任务:
1、新书推荐的工作流程是什么?
★任务学习:
★知识要点:
云借阅图书管理系统的新书推荐模块,主要包含查询图书和借阅图书2个功能,其中查询图书功能是根据图书的上架时间将图书相关信息展示在页面,本系统中固定推荐最新上架的5本图书;借阅图书功能是在用户发起借阅请求时,修改该图书的借阅状态、借阅人、借阅时间和预计归还的时间。接下来分别实现这2个功能。
1、查询图书
step1:创建持久化类:在com.itheima.domain包中,创建图书持久化类Book,在Book类中声明与图书数据表对应的属性并定义各个属性的getter/setter方法。
(代码略)
step 2:实现DAO层:在com.itheima.dao包中,创建一个BookMapper接口,并在接口中定义方法selectNewBooks(),selectNewBooks()根据上架时间查询图书信息。
step 3:实现Service层:(1)创建分页结果实体类。在项目的src\main\java目录下,创建一个com.itheima.entity包,在包中创建分页结果实体类PageResult,用于将查询的结果展示在页面。
public class PageResult implements Serializable{
private long total; // 总数
private List rows; // 返回的数据集合
public PageResult(long total, List rows) {
super();
this.total = total;
this.rows = rows;
}
… getter/setter方法
2)在com.itheima.service包中,创建Service层的图书
接口BookService,接口中定义查询最新上架图书的方法。
package com.itheima.service;
import entity.PageResult;
// 图书接口
public interface BookService {
//查询最新上架的图书
PageResult selectNewBooks(Integer pageNum, Integer pageSize);
在com.itheima.service.impl包中,创建Service层的图书接口的实现类BookServiceImpl,重写接口中的selectNewBooks()方法。(省略)
step 4:实现Controller:在com.itheima.controller包中,创建图书控制器类BookController,在BookController类中定义方法selectNewbooks(),用于查询最新上架的图书,并将查询结果响应到新书推荐页面。
step 5: 实现页面显示:在books_new.jsp中接收响应的数据,响应的数据是一个集合对象,遍历该集合对象,将遍历出来的内容展示在页面的数据表格中。
后台首页具体的代码实现如下所示。
<!-- 内容展示区域 --><div class="content-wrapper">
<iframe width="100%" id="iframe" name="iframe"
onload ="SetIFrameHeight()" frameborder="0" src="${pageContext.request.contextPath}/book/selectNewbooks">
</iframe></div>
main.jsp中编写了如上代码,在main.jsp加载时会向<iframe >元素中src对应的URL发送请求,并将请求的响应展示在该行内框架中。由于请求的URL是查询新书推荐,所以main.jsp加载完内容展示区显示的就是新书推荐的内容。
step 6:测试新书推荐功能:启动cloudlibrary项目,使用账号itheima@itcasst.cn登录图书管理系统
2、借阅图书
step 1:实现DAO层:借阅图书功能包含根据id查询图书信息和借阅图书2个操作,其中借阅图书其实就是更新图书信息中的借阅的相关字段。在BookMapper接口中新增2个方法findById()和editBook()
step 2:
@Select("SELECT * FROM book where book_id=#{id}")
@ResultMap("bookMap")
//根据id查询图书信息
Book findById(String id);
//编辑图书信息
Integer editBook(Book book);
step 3:实现Controller:为了将页面操作结果和提示信息一起响应给页面,可定义一个类,将页面操作结果和提示信息作为该类的属性,如果Controller层需要向页面传递信息时,将内容封装在该类的对象中返回即可。在entity包下创建一个结果信息类Result,具体代码如下所示。
public class Result<T> implements Serializable{
private boolean success; //标识是否成功操作
private String message; //需要传递的信息
private T data; //需要传递的数据
public Result(boolean success, String message) {
super();this.success=success;this.message = message; }
public Result(boolean success, String message, T data) {
this.success = success;this.message = message;
this.data = data; }// 省略getter/setter方法
}
step 4:实现页面显示:在books_new.jsp页面代码中绑定鼠标单击事件,单击按钮时,将调用my.js文件中的findBookById()方法,findBookById()方法中会发起异步请求,并将响应数据回显到book_modal.jsp页面的模态对话框中。books_new.jsp页面中的“借阅”按钮新增代码如下所示。
<button type="button" class="btn bg-olive btn-xs" data-toggle="modal"
data-target="#borrowModal"
onclick ="findBookById(${book.id},'borrow')"> 借阅
</button>
step 5:启动cloudlibrary项目,登录系统,对《边城》进行借阅,单击图书《边城》右侧的“借阅”按钮,弹出图书信息模态对话框

