目录
一、呈现效果
如何所示要要使用Servlet+JSMYbatis与分页插件做出一个简单的页面效果,这个案例的重点在于如何将这几个部分结合起来,以及如何便捷的使用分页插件,抛却之前对于分页所做的复杂的工作,使得我们的能够专注于业务功能的实现
二、各部分作用以及配置
1.PageHelper
PageHelper:分页插件,帮助我们简单快捷的完成分页功能的实现,省却哪些复杂而冗余的代码,是适用于MyBatis框架的一个分页插件,使用方式极为便捷,支持任何复杂的单表、多表分页查询操作。
下载地址:https://github.com/pagehelper/Mybatis-PageHelper
在mybatis的配置文件xml中导入分页插件
在pom.xml中导入依赖包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2.MyBatis
MyBatis对原有JDBC操作进行了封装,几乎消除了所有的JDBC代码,使得我们程序员能够只关注于SQL本身,极大的减轻了我们的负担
在pom.xml中导入核心依赖,省去了我们手动导包的流程
<!--MyBatis核心依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--MySql驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
3.jsp
这是前端展示页面,能够将我们的数据展示给前端
<%--此处form与table里的class是使用bootstrap中的表单格式,省去修饰表单的部门--%>
<form class="container">
<table border="1px" class="table table-striped table-hover table-bordered container" >
<tr>
<th>编号</th>
<th>书名</th>
<th>作者</th>
<th>价格</th>
</tr>
<%--循环遍历输出我们在后端所存的值--%>
<c:forEach items="${page.list}" var="p">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${p.author}</td>
<td>${p.price}</td>
</tr>
</c:forEach>
</table>
<%--这里是分页功能的实现,因为分页插件里已经给我们写好了,所以直接调用即可--%>
<a href="/book?currentPage=1">首页</a>
<a href="/book?currentPage=${page.pageNum-1}">上一页</a>
<a href="/book?currentPage=${page.pageNum+1}">下一页</a>
<a href="/book?currentPage=${page.navigateLastPage}">尾页</a>
共${page.pageNum}/${page.pages}页
</form>
4.Servlet
@WebServlet("/book")//服务器的路径
public class BookServlet extends HttpServlet {
//以多态形式实例化业务层对象,方便与使得业务逻辑与控制层相分离
private BookService bookService=new BookServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取前端所代表的当前页
int current = Integer.parseInt(req.getParameter("currentPage"));
System.out.println(current);
//调用业务层方法,返回得到书籍的数据集合
List<Book> books = bookService.selectAllBook(current);
//这里类似于我们之前写的原生的page实体
PageInfo page=new PageInfo(books);
System.out.println(books);
//将每页的内容存储起来
req.getSession().setAttribute("page",page);
//这里要采用转发而不是重定向的方式因为要将page中的值传到前端去
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}
5.业务层方法
BookDao bookDao = MyBatisUtils.getMapper(BookDao.class);
public List<Book> selectAllBook(int current) {
//给当前页先赋予一个1的初始值
int currentPage=1;
//判断从前端传过来的当前页是否为0
if (current!=0){
//如果不为0就要将前端传过来的值赋给当前页
currentPage=current;
}
//使用分页插件,第一个参数当前页,第二个参数页大小
PageHelper.startPage(current,4);
//注意:这里开始使用分页插件一定要在第一个查询之前才会执行分页
List<Book> books = bookDao.selectAllBook();
return books;
}
三、Dao层
public interface BookDao {
//因为是查询,因此采用注解的形式查询出数据,减少冗余代码
@Select("select * from book")
public List<Book> selectAllBook();
四、实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
private int id;
private String name;
private String author;
private int price;
}