• 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.方法参数最后两个是当前页和每页条数

  • 相关阅读:
    深度优先搜索初尝试-DFS-LakeCounting POJ No.2386
    hdoj-2053-Switch Game
    《算法竞赛入门经典》习题及反思 -<2>
    高精度N的阶乘-N!
    列举一些有所帮助的blog和文章
    hdoj-2039-三角形
    hdoj-2035-人见人爱a^b
    hdoj-2028-Lowest common multiple plus
    hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b
    程序设计第三次作业---C++计算器雏形
  • 原文地址:https://www.cnblogs.com/dw3306/p/9643143.html
Copyright © 2020-2023  润新知