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