ssm+maven+pageHelper搭建maven项目实现快速分页


ssm+maven+pageHelper搭建maven项目实现快速分页

 

PageHelper分页使用:

插件的环境引入:

1.pom文件中引入分页插件的资源位置:

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
</dependency>

 

 

2.在mybatis的spring配置文件中引入插件:

 

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:com/ithaha/mapper/*.xml"></property>
        <!-- 配置分页插件 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <value> dialect=mysql reasonable=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

 

 

 

 

项目结构如下:

 

 

 

pom.xml :

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
          http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dengwei</groupId>
    <artifactId>demo2</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

            <!-- spring版本号 -->
            <spring.version>4.2.5.RELEASE</spring.version>

            <!-- mybatis版本号 -->
            <mybatis.version>3.2.8</mybatis.version>

            <!-- mysql驱动版本号 -->
            <mysql-driver.version>5.1.29</mysql-driver.version>

            <!-- log4j日志包版本号 -->
            <slf4j.version>1.7.18</slf4j.version>
            <log4j.version>1.2.17</log4j.version>

        </properties>


        <dependencies>
            <!-- 添加jstl依赖 -->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>

            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <version>7.0</version>
            </dependency>

            <!-- 添加junit4依赖 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <!-- 指定范围,在测试时才会加载 -->
                <scope>test</scope>
            </dependency>

            <!-- 添加spring核心依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- 添加mybatis依赖 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!-- 添加mybatis/spring整合包依赖 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.2.2</version>
            </dependency>

            <!-- 添加mysql驱动依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-driver.version}</version>
            </dependency>
            <!-- 添加数据库连接池依赖 -->
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.2.2</version>
            </dependency>

            <!-- 添加fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.1.41</version>
            </dependency>

            <!-- 添加日志相关jar包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <!-- log end -->
            <!-- 映入JSON -->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.13</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.8.0</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.0</version>
            </dependency>

            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
            </dependency>

            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.9</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>compile</scope>
            </dependency>
            <!--分页插件-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>4.1.6</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.7</version>
            </dependency>

        </dependencies>

</project>
View Code

 

 

 

springConfig.xm:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:tx="http://www.springframework.org/schema/tx"
 6        xmlns:mvc="http://www.springframework.org/schema/mvc"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8                             http://www.springframework.org/schema/beans/spring-beans.xsd
 9                             http://www.springframework.org/schema/context
10                             http://www.springframework.org/schema/context/spring-context.xsd
11                             http://www.springframework.org/schema/tx
12                             http://www.springframework.org/schema/tx/spring-tx.xsd
13                             http://www.springframework.org/schema/mvc
14                             http://www.springframework.org/schema/mvc/spring-mvc.xsd">
15     <!--开启注解-->
16     <mvc:annotation-driven/>
17     <!-- 自动扫描 -->
18     <context:component-scan base-package="com.dengwei.controller,com.dengwei.service.impl"/>
19 
20     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
21         <property name="locations">
22             <list>
23                 <value>classpath*:jdbc.properties</value>
24             </list>
25         </property>
26     </bean>
27 
28     <!-- 配置数据源 -->
29     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
30           destroy-method="close">
31         <property name="driverClassName" value="${driverClasss}"/>
32         <property name="url" value="${jdbcUrl}"/>
33         <property name="username" value="${username}"/>
34         <property name="password" value="${password}"/>
35         <!-- 初始化连接大小 -->
36         <property name="initialSize" value="${initialSize}"></property>
37         <!-- 连接池最大数量 -->
38         <property name="maxActive" value="${maxActive}"></property>
39         <!-- 连接池最大空闲 -->
40         <property name="maxIdle" value="${maxIdle}"></property>
41         <!-- 连接池最小空闲 -->
42         <property name="minIdle" value="${minIdle}"></property>
43         <!-- 获取连接最大等待时间 -->
44         <property name="maxWait" value="${maxWait}"></property>
45     </bean>
46 
47     <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
48     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
49         <property name="dataSource" ref="dataSource"/>
50         <!-- 自动扫描mapping.xml文件 -->
51         <property name="mapperLocations" value="classpath:mapping/*Mapper.xml"></property>
52 
53         <!-- 配置分页插件 -->
54         <property name="plugins">
55             <array>
56                 <bean class="com.github.pagehelper.PageHelper">
57                     <property name="properties">
58                         <value>
59                             dialect=mysql
60                             reasonable=true
61                         </value>
62                     </property>
63                 </bean>
64             </array>
65         </property>
66     </bean>
67 
68     <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
69     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
70         <property name="basePackage" value="com.dengwei.dao"/>
71         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
72     </bean>
73 
74 
75     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
76     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
77         <property name="dataSource" ref="dataSource"/>
78     </bean>
79 
80     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
81     <tx:annotation-driven transaction-manager="transactionManager"/>
82 </beans>
View Code

 

jdbc.properties :

 1 driverClasss=com.mysql.jdbc.Driver
 2 jdbcUrl=jdbc:mysql://localhost:3306/testsql
 3 username=root
 4 password=admin
 5 
 6 #定义初始连接数
 7 initialSize=0
 8 #定义最大连接数
 9 maxActive=20
10 #定义最大空闲
11 maxIdle=20
12 #定义最小空闲
13 minIdle=1
14 #定义最长等待时间
15 maxWait=60000
View Code

 

log4j.properties :

 1 log4j.rootLogger=INFO,Console,File
 2 
 3 #控制台日志
 4 log4j.appender.Console=org.apache.log4j.ConsoleAppender
 5 log4j.appender.Console.Target=System.out
 6 log4j.appender.Console.layout=org.apache.log4j.PatternLayout
 7 log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
 8 
 9 #普通文件日志
10 log4j.appender.File=org.apache.log4j.RollingFileAppender
11 log4j.appender.File.File=logs/ssm.log
12 log4j.appender.File.MaxFileSize=10MB
13 #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
14 log4j.appender.File.Threshold=ALL
15 log4j.appender.File.layout=org.apache.log4j.PatternLayout
16 log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
View Code

 

web.xml :

注意:在idea我的web.xml中有爆红的,但是不影响程序运行。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5          version="3.1">
 6     <!--添加过滤器-->
 7     <filter>
 8         <filter-name>characterEncodingFilter</filter-name>
 9         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
10         <init-param>
11             <param-name>encoding</param-name>
12             <param-value>UTF-8</param-value>
13         </init-param>
14         <init-param>
15             <param-name>forceEncoding</param-name>
16             <param-value>true</param-value>
17         </init-param>
18     </filter>
19     <filter-mapping>
20         <filter-name>characterEncodingFilter</filter-name>
21         <url-pattern>/*</url-pattern>
22     </filter-mapping>
23     <!--配置spring-->
24     <servlet>
25         <servlet-name>dispatcherServlet</servlet-name>
26         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
27         <init-param>
28             <param-name>contextConfigLocation</param-name>
29             <param-value>classpath:springConfig.xml</param-value>
30         </init-param>
31     </servlet>
32     <servlet-mapping>
33         <servlet-name>dispatcherServlet</servlet-name>
34         <url-pattern>/</url-pattern>
35     </servlet-mapping>
36     <!--自定义首页-->
37     <!--  <welcome-file-list>
38           <welcome-file>/first/page</welcome-file>
39       </welcome-file-list>-->
40 
41     <!--读取静态文件-->
42     <servlet-mapping>
43         <servlet-name>default</servlet-name>
44         <url-pattern>*.js</url-pattern>
45         <url-pattern>*.css</url-pattern>
46         <url-pattern>*.woff</url-pattern>
47         <url-pattern>*.woff2</url-pattern>
48         <url-pattern>*.ttf</url-pattern>
49         <url-pattern>*.png</url-pattern>
50         <url-pattern>*.jpg</url-pattern>
51         <url-pattern>*.ogg</url-pattern>
52         <url-pattern>*.mp4</url-pattern>
53     </servlet-mapping>
54 
55 
56 </web-app>
View Code

 

 

下面我们看一下分页的实现,这里我只贴了Cotroller层的代码:

 

 

 

 

 controller:

package com.dengwei.controller;

import com.dengwei.model.ProductAndResource;
import com.dengwei.service.IProductService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller @RequestMapping("/list") public class ProductController { @Autowired private IProductService productService; @RequestMapping("/product") @ResponseBody public PageInfo<ProductAndResource> productList(Integer currentPage, Integer pageSize){ // PageHelper.startPage(currentPage,currentPage);必须在上面才能实现分页
 PageHelper.startPage(currentPage,pageSize);
       List<ProductAndResource> list = productService.queryProductInfo();
           PageInfo pageInfo= new PageInfo(list); return  pageInfo; 
}
}

 

 最终返回给前端的是PageInfo对象:

3.PageInfo类说明

  1 public class PageInfo<T> implements Serializable {  
  2     private static final long serialVersionUID = 1L;  
  3     //当前页  
  4     private int pageNum;  
  5     //每页的数量  
  6     private int pageSize;  
  7     //当前页的数量  
  8     private int size;  
  9   
 10     //由于startRow和endRow不常用,这里说个具体的用法  
 11     //可以在页面中"显示startRow到endRow 共size条数据"  
 12   
 13     //当前页面第一个元素在数据库中的行号  
 14     private int startRow;  
 15     //当前页面最后一个元素在数据库中的行号  
 16     private int endRow;  
 17     //总记录数  
 18     private long total;  
 19     //总页数  
 20     private int pages;  
 21     //结果集  
 22     private List<T> list;  
 23   
 24     //前一页  
 25     private int prePage;  
 26     //下一页  
 27     private int nextPage;  
 28   
 29     //是否为第一页  
 30     private boolean isFirstPage = false;  
 31     //是否为最后一页  
 32     private boolean isLastPage = false;  
 33     //是否有前一页  
 34     private boolean hasPreviousPage = false;  
 35     //是否有下一页  
 36     private boolean hasNextPage = false;  
 37     //导航页码数  
 38     private int navigatePages;  
 39     //所有导航页号  
 40     private int[] navigatepageNums;  
 41     //导航条上的第一页  
 42     private int navigateFirstPage;  
 43     //导航条上的最后一页  
 44     private int navigateLastPage;  
 45   
 46     public PageInfo() {  
 47     }  
 48   
 49     /** 
 50      * 包装Page对象 
 51      * 
 52      * @param list 
 53      */  
 54     public PageInfo(List<T> list) {  
 55         this(list, 8);  
 56     }  
 57   
 58     /** 
 59      * 包装Page对象 
 60      * 
 61      * @param list          page结果 
 62      * @param navigatePages 页码数量 
 63      */  
 64     public PageInfo(List<T> list, int navigatePages) {  
 65         if (list instanceof Page) {  
 66             Page page = (Page) list;  
 67             this.pageNum = page.getPageNum();  
 68             this.pageSize = page.getPageSize();  
 69   
 70             this.pages = page.getPages();  
 71             this.list = page;  
 72             this.size = page.size();  
 73             this.total = page.getTotal();  
 74             //由于结果是>startRow的,所以实际的需要+1  
 75             if (this.size == 0) {  
 76                 this.startRow = 0;  
 77                 this.endRow = 0;  
 78             } else {  
 79                 this.startRow = page.getStartRow() + 1;  
 80                 //计算实际的endRow(最后一页的时候特殊)  
 81                 this.endRow = this.startRow - 1 + this.size;  
 82             }  
 83         } else if (list instanceof Collection) {  
 84             this.pageNum = 1;  
 85             this.pageSize = list.size();  
 86   
 87             this.pages = this.pageSize > 0 ? 1 : 0;  
 88             this.list = list;  
 89             this.size = list.size();  
 90             this.total = list.size();  
 91             this.startRow = 0;  
 92             this.endRow = list.size() > 0 ? list.size() - 1 : 0;  
 93         }  
 94         if (list instanceof Collection) {  
 95             this.navigatePages = navigatePages;  
 96             //计算导航页  
 97             calcNavigatepageNums();  
 98             //计算前后页,第一页,最后一页  
 99             calcPage();  
100             //判断页面边界  
101             judgePageBoudary();  
102         }  
103     }  
104   
105   
106 .......  
107 } 

 

 


 

 

 二、上述在方法是在方法内部针对当前方法进行分页,如果想针对指定以某个单词结尾的所有方法分页,可以使用拦截器:

1:上面的配置不变(导入依赖、spring配置文件中引入插件)

 2:   编写拦截器(规定以paging结尾的方法就是分页的方法,拦截controller层中以paging为结尾的方法)

依赖:

 

 <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.7</version>
            </dependency>

 

 

 

          

PageInterceptor :
@Aspect @Component public class PageInterceptor { @Around("execution(* com.ithaha.controller..*.*Paging(..))") public Object process(ProceedingJoinPoint point) throws Throwable { Object[] args = point.getArgs(); if(args.length<2) { //规定原方法的参数最后两个是当前页和每页条数
            throw new Exception("参数不够分页"); } PageHelper.startPage((Integer)args[args.length-2],(Integer)args[args.length-1]); List list = (List) point.proceed(); PageInfo pageInfo = new PageInfo(list); return pageInfo; } }

 

 只要你想分页,只需满足:1.方法名字以paging结尾 .2.方法参数最后两个是当前页和每页条数

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM