话不多说,首先来看最后的实现效果图,我会分享出来所有的代码
点击显示
这是所有的包名和文件名
一.domain层
login类
package com.jf.domain;
import lombok.Data;
@Data
public class Login {
private Integer id;
private String name;
private String passwd;
}
Poge层
package com.jf.domain;
import lombok.Data;
import java.util.List;
@Data
public class Page {
//当前页(前台传入)
private int pageNum;
//总的记录数(数据库里面查询出来的)
private int totalNum;
//每页显示的数据量(我这里只让它显示7条数据)
private int pageSize = 4;
//总页数——计算出来(总记录数/pagesize=总页数)
private int totalPageNum;
//每页的开始记录数(计算出)
private int startIndex;
//算出来(开始页与结束页)
private int startPage;
private int endPage;
//前台传入
private String url;
//数据库中查询 将来不知道集合到底会放user 还是person ,所以为了通用性就使用泛型
private List<?> list = null;
public Page(int pageNum, int totalNum,String url) {
this.pageNum = pageNum;
this.totalNum = totalNum;
this.url = url;
//如果36条记录,每页7条记录,那么就会有6页
if(totalNum%pageSize==0){
totalPageNum = totalNum/pageSize;//35/7 =5
}else{
totalPageNum = totalNum/pageSize+1;//36/7 =5 多一条也分一页出来
}
//最开始前台传入1 那么————(1-1)*7=0【第一页的数据从0开始取7条】 (2-1)*7=7【第二页的数据从7开始取7条】
startIndex = (pageNum-1)*pageSize;
//如果页数小于5,就显示第1~5页
if(totalPageNum<5){
startPage = 1;
endPage = totalPageNum;
}else{
//如果点击前3个,那么还是显示1~5页
if(pageNum<3){
startPage = 1;
endPage =5;
}else{
//当前页数大于总记录页数-3,那么显示最后5页;比如说30-4=26,就显示26、27、28、29、30
if(pageNum>(totalPageNum-3)){
startPage = totalPageNum-4;
endPage = totalPageNum;
}else{
//其它情况;比如说,12345,点4就显示23456,点5就显示34567
startPage = pageNum-2;
endPage = pageNum+2;
}
}
}
}
}
二.dao层
logindao
package com.jf.dao;
import com.jf.domain.Login;
import com.jf.domain.Page;
import javax.annotation.Resource;
import java.util.List;
@Resource
public interface LoginDao {
List<Login> alluser(Page page);
int count();
}
logindao.xml
<?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">
<mapper namespace="com.jf.dao.LoginDao">
<select id="alluser" parameterType="com.jf.domain.Page" resultType="com.jf.domain.Login">
select id,name,passwd from login Limit #{startIndex} , #{pageSize}
</select>
<select id="count" resultType="int">
select count(*) from login
</select>
</mapper>
三.service层
LoginService
package com.jf.service;
import com.jf.domain.Page;
public interface LoginService {
Page splitPage(int PageNum, String url);
}
LoginServiceImpl
package com.jf.service.impl;
import com.jf.dao.LoginDao;
import com.jf.domain.Login;
import com.jf.domain.Page;
import com.jf.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class LoginServiceImpl implements LoginService {
@Autowired
private LoginDao loginDao;
@Override
public Page splitPage(int pageNum, String url) {
//总记录数
int totalNum = loginDao.count();
Page page = new Page(pageNum, totalNum, url);
//从数据库取到的7条数据
List<Login> list = loginDao.alluser(page);
page.setList(list);
return page;
}
}
四.controller
LoginController
package com.jf.controller;
import com.jf.domain.Page;
import com.jf.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller()
public class LoginController {
@Autowired
private LoginService loginService;
@RequestMapping("showPerson")
public String showPerson(int pageNum,Model model) {
Page page = loginService.splitPage(pageNum,"showPerson.action");
model.addAttribute("page", page);
return "tt.jsp";
}
}
五. resources
splication-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.alibaba.com/schema/stat"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd">
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="${jdbc.maxActiv}"/>
</bean>
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
<!--告诉数据库分页-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
<property name="basePackage" value="com.jf.dao"/>
</bean>
<context:component-scan base-package="com.jf.service"/>
</beans>
springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.jf.controller"/>
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!-- <property name="prefix" value="/WEB-INF/view/"/>-->
<!-- <property name="suffix" value=".jsp"/>-->
<!-- </bean>-->
<mvc:annotation-driven/>
</beans>
jdbc.properties
jdbc.url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC
jdbc.username=root
jdbc.password=自己数据库的密码
jdbc.maxActiv=20
mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<package name="com.jf.dao"/>
</mappers>
</configuration>
六.webapp
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>myweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/splication-spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<welcome-file-list>
<welcome-file>tt.jsp</welcome-file>
</welcome-file-list>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
tt.jsp
<%--
Created by IntelliJ IDEA.
User: Liyang
Date: 2022/11/10
Time: 9:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Title</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/showPerson.action?pageNum=1">显示</a>
<table border="1" width="80%" align="center">
<tr><th>id</th><th>账号</th><th>密码</th></tr>
<c:forEach items="${page.list }" var="person">
<tr>
<td>${person.id }</td>
<td>${person.name }</td>
<td>${person.passwd }</td>
</tr>
</c:forEach>
</table>
<div align="center">
《共<span>-${page.totalPageNum }-</span>页》 当前 《第<span>-${page.pageNum}-</span>页》
<a href="${pageContext.request.contextPath}/showPerson.action?pageNum=1">首页</a>
<c:if test="${page.pageNum>1 }">
<a href="${pageContext.request.contextPath}/showPerson.action?pageNum=${page.pageNum-1}">上一页</a>
</c:if>
<c:forEach begin="${page.startPage}" end="${page.endPage}" var="pageNum">
<a href="${pageContext.request.contextPath}/showPerson.action?pageNum=${pageNum}">${pageNum }</a>
</c:forEach>
<c:if test="${page.pageNum<page.totalPageNum }">
<a href="${pageContext.request.contextPath}/showPerson.action?pageNum=${page.pageNum+1}">下一页</a>
</c:if>
<a href="${pageContext.request.contextPath}/showPerson.action?pageNum=${page.totalPageNum}">尾页</a>
</div>
</body>
</html>