一、在maven中引入pagehelper相关依赖包
-
<dependency>
-
<groupId>com.github.pagehelper</groupId>
-
<artifactId>pagehelper</artifactId>
-
<version>5.1.2</version>
-
</dependency>
二、applicationContext.xml中注册mybatis插件(mybatis要与spring整合)
-
<!-- 5.配置mybatis -->
-
<bean id= "sqlSessionFactory"
-
class= "org.mybatis.spring.SqlSessionFactoryBean">
-
<property name= "dataSource" ref= "dataSource" />
-
<!-- mapperLocations:指定mapper配置文件的位置(相当于Dao的实现类),根据自己项目修改 -->
-
<property name= "mapperLocations" value= "classpath:mapper/*xml"></property>
-
<property name= "plugins">
-
<array>
-
<bean class= "com.github.pagehelper.PageInterceptor">
-
<property name= "properties">
-
<!--使用下面的方式配置参数,一行配置一个 -->
-
<value>
-
helperDialect=mysql
-
</value>
-
</property>
-
</bean>
-
</array>
-
</property>
-
</bean>
-
-
<!-- 扫描Mapper(Dao)接口,根据自己的项目修改-->
-
<mybatis-spring:scan base- package= "com.tansen.selecting.mapper"/>
三、编写mapper映射文件(Dao接口的实现类,Dao接口以及Service省略)
-
<?xml version= "1.0" encoding= "UTF-8" ?>
-
<!DOCTYPE mapper
-
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
<!--namespace 写接口的全类名 ,根据自己项目修改 -->
-
<mapper namespace= "com.tansen.selecting.mapper.CourseMapper">
-
-
<!-- List<Course> getAllCourses(); -->
-
<!-- resultType为返回值类型,集合则返回集合的实体类型 -->
-
<select id= "getCourseNameLike"
-
resultType= "com.tansen.selecting.entities.Course">
-
select * from course where name like "%"#{name} "%"
-
</select>
-
-
</mapper>
四、控制器基本代码
-
"/findByNameLike") //模糊查询(
-
public ModelAndView findByNameLike(@RequestParam(value="pn",required=false,defaultValue="1") Integer pn, @RequestParam("name") String name) {
-
PageHelper.startPage(pn, 5); //第一个参数表示第几页,第二个参数表示每页显示的记录数
-
List<Course> courses = courseService.getCourseNameLike(name); //查询
-
PageInfo pageInfo = new PageInfo<>(courses, 5); //用PageInfo对结果进行包装,第二个参数表示前端显示的页数
-
ModelAndView view = new ModelAndView( "teacher_main");
-
view.addObject( "name", name);
-
view.addObject( "pageInfo", pageInfo);
-
view.addObject( "pn",pageInfo.getPageNum());
-
return view;
-
}
五、编写JSP页面
-
<%@ page language= "java" contentType= "text/html; charset=UTF-8"
-
pageEncoding= "UTF-8"%>
-
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core"%>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
<html>
-
<head>
-
<meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8">
-
<title>Insert title here</title>
-
</head>
-
<script type= "text/javascript">
-
function function1() {
-
window.location.href = "${pageContext.request.contextPath}/course/addPage";
-
}
-
</script>
-
<body>
-
<button οnclick= "function1()">新增课程</button>
-
<br>
-
-
-
-
-
<form action= "${pageContext.request.contextPath}/course/findByNameLike"
-
method= "post">
-
<input type= "text" name= "name"> <input type= "submit"
-
value= "查找课程">
-
</form>
-
<br>
-
-
-
<table border= "1">
-
<tr>
-
<th>课程号</th>
-
<th>课程名称</th>
-
<th>课程授课老师</th>
-
<th>教师容量</th>
-
<th>当前选课人数</th>
-
<th>      操作       </th>
-
</tr>
-
<c:forEach items= "${pageInfo.list}" var= "pageInfo">
-
<tr>
-
<td>${pageInfo.id}</td>
-
<td>${pageInfo.name}</td>
-
<td>${pageInfo.teacher}</td>
-
<td>${pageInfo.capacity}</td>
-
<td>${pageInfo.number}</td>
-
<td><a
-
href= "${pageContext.request.contextPath}/course/editPage?id=${pageInfo.id}&name=${pageInfo.name}&teacher=${pageInfo.teacher}">修改</a></td>
-
<td><a
-
href= "${pageContext.request.contextPath}/course/delete?id=${pageInfo.id}&pn=${pageNum}">删除</a></td>
-
<td><a href= "">管理当前选课</a></td>
-
</tr>
-
</c:forEach>
-
</table>
-
-
<c:choose>
-
<c:when test= "${pageInfo.hasPreviousPage}">
-
<a
-
href= "${pageContext.request.contextPath}/course/findByNameLike?pn=${pageInfo.pageNum-1}&name=${name}">上一页</a>
-
</c:when>
-
<c:otherwise>
-
<a href= "javascript:void(0);">上一页</a>
-
</c:otherwise>
-
</c:choose>
-
-
-
<c:forEach items= "${pageInfo.navigatepageNums}" var= "page_num">
-
<c: if test= "${page_num == pageInfo.pageNum}">
-
<a href= " ">${page_num}</a>
-
</c: if>
-
<c: if test= "${page_num != pageInfo.pageNum}">
-
<a
-
href= "${pageContext.request.contextPath}/course/teacherFindAll?pn=${page_num}">${page_num}</a>
-
</c: if>
-
</c:forEach>
-
-
-
<c:choose>
-
<c:when test= "${pageInfo.hasNextPage}">
-
<a
-
href= "${pageContext.request.contextPath}/course/findByNameLike?pn=${pageInfo.pageNum+1}&name=${name}">下一页</a>
-
</c:when>
-
<c:otherwise>
-
<a href= "javascript:void(0);">下一页</a>
-
</c:otherwise>
-
</c:choose>
-
-
共${pageInfo.pages}页,一共${pageInfo.total}条记录,到第
-
<form
-
action= "${pageContext.request.contextPath}/course/teacherFindAll"
-
method= "post">
-
<input type= "text" name= "pn">页 <input type= "submit"
-
value= "确定">
-
</form>
-
</body>
-
</html>
注意事项:前端页面中${pageInfo.属性}中的属性必须和数据库中的字段用驼峰命名法或者resultMap建立映射关系,否则在前端是获取不到值的。
六、PageInfo类的说明
-
public class PageInfo<T> implements Serializable {
-
private static final long serialVersionUID = 1L;
-
//当前页
-
private int pageNum;
-
//每页的数量
-
private int pageSize;
-
//当前页的数量
-
private int size;
-
-
//由于startRow和endRow不常用,这里说个具体的用法
-
//可以在页面中"显示startRow到endRow 共size条数据"
-
-
//当前页面第一个元素在数据库中的行号
-
private int startRow;
-
//当前页面最后一个元素在数据库中的行号
-
private int endRow;
-
//总记录数
-
private long total;
-
//总页数
-
private int pages;
-
//结果集
-
private List<T> list;
-
-
//前一页
-
private int prePage;
-
//下一页
-
private int nextPage;
-
-
//是否为第一页
-
private boolean isFirstPage = false;
-
//是否为最后一页
-
private boolean isLastPage = false;
-
//是否有前一页
-
private boolean hasPreviousPage = false;
-
//是否有下一页
-
private boolean hasNextPage = false;
-
//导航页码数
-
private int navigatePages;
-
//所有导航页号
-
private int[] navigatepageNums;
-
//导航条上的第一页
-
private int navigateFirstPage;
-
//导航条上的最后一页
-
private int navigateLastPage;
-
-
public PageInfo() {
-
}
-
-
/**
-
* 包装Page对象
-
*
-
* @param list
-
*/
-
public PageInfo(List<T> list) {
-
this(list, 8);
-
}
-
-
/**
-
* 包装Page对象
-
*
-
* @param list page结果
-
* @param navigatePages 页码数量
-
*/
-
public PageInfo(List<T> list, int navigatePages) {
-
if (list instanceof Page) {
-
Page page = (Page) list;
-
this.pageNum = page.getPageNum();
-
this.pageSize = page.getPageSize();
-
-
this.pages = page.getPages();
-
this.list = page;
-
this.size = page.size();
-
this.total = page.getTotal();
-
//由于结果是>startRow的,所以实际的需要+1
-
if ( this.size == 0) {
-
this.startRow = 0;
-
this.endRow = 0;
-
} else {
-
this.startRow = page.getStartRow() + 1;
-
//计算实际的endRow(最后一页的时候特殊)
-
this.endRow = this.startRow - 1 + this.size;
-
}
-
} else if (list instanceof Collection) {
-
this.pageNum = 1;
-
this.pageSize = list.size();
-
-
this.pages = this.pageSize > 0 ? 1 : 0;
-
this.list = list;
-
this.size = list.size();
-
this.total = list.size();
-
this.startRow = 0;
-
this.endRow = list.size() > 0 ? list.size() - 1 : 0;
-
}
-
if (list instanceof Collection) {
-
this.navigatePages = navigatePages;
-
//计算导航页
-
calcNavigatepageNums();
-
//计算前后页,第一页,最后一页
-
calcPage();
-
//判断页面边界
-
judgePageBoudary();
-
}
-
}
-
-
-
.......
-
}
**原文地址:https://blog.csdn.net/laogay_tansen/article/details/80898913
-
<!-- 5.配置mybatis -->
-
<bean id= "sqlSessionFactory"
-
class= "org.mybatis.spring.SqlSessionFactoryBean">
-
<property name= "dataSource" ref= "dataSource" />
-
<!-- mapperLocations:指定mapper配置文件的位置(相当于Dao的实现类),根据自己项目修改 -->
-
<property name= "mapperLocations" value= "classpath:mapper/*xml"></property>
-
<property name= "plugins">
-
<array>
-
<bean class= "com.github.pagehelper.PageInterceptor">
-
<property name= "properties">
-
<!--使用下面的方式配置参数,一行配置一个 -->
-
<value>
-
helperDialect=mysql
-
</value>
-
</property>
-
</bean>
-
</array>
-
</property>
-
</bean>
-
-
<!-- 扫描Mapper(Dao)接口,根据自己的项目修改-->
-
<mybatis-spring:scan base- package= "com.tansen.selecting.mapper"/>