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 :

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5           http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6     <modelVersion>4.0.0</modelVersion>
  7 
  8     <groupId>com.dengwei</groupId>
  9     <artifactId>demo2</artifactId>
 10     <packaging>pom</packaging>
 11     <version>1.0-SNAPSHOT</version>
 12 
 13     <properties>
 14             <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 15             <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 16 
 17             <!-- spring版本号 -->
 18             <spring.version>4.2.5.RELEASE</spring.version>
 19 
 20             <!-- mybatis版本号 -->
 21             <mybatis.version>3.2.8</mybatis.version>
 22 
 23             <!-- mysql驱动版本号 -->
 24             <mysql-driver.version>5.1.29</mysql-driver.version>
 25 
 26             <!-- log4j日志包版本号 -->
 27             <slf4j.version>1.7.18</slf4j.version>
 28             <log4j.version>1.2.17</log4j.version>
 29 
 30         </properties>
 31 
 32 
 33         <dependencies>
 34             <!-- 添加jstl依赖 -->
 35             <dependency>
 36                 <groupId>jstl</groupId>
 37                 <artifactId>jstl</artifactId>
 38                 <version>1.2</version>
 39             </dependency>
 40 
 41             <dependency>
 42                 <groupId>javax</groupId>
 43                 <artifactId>javaee-api</artifactId>
 44                 <version>7.0</version>
 45             </dependency>
 46 
 47             <!-- 添加junit4依赖 -->
 48             <dependency>
 49                 <groupId>junit</groupId>
 50                 <artifactId>junit</artifactId>
 51                 <version>4.11</version>
 52                 <!-- 指定范围,在测试时才会加载 -->
 53                 <scope>test</scope>
 54             </dependency>
 55 
 56             <!-- 添加spring核心依赖 -->
 57             <dependency>
 58                 <groupId>org.springframework</groupId>
 59                 <artifactId>spring-core</artifactId>
 60                 <version>${spring.version}</version>
 61             </dependency>
 62             <dependency>
 63                 <groupId>org.springframework</groupId>
 64                 <artifactId>spring-web</artifactId>
 65                 <version>${spring.version}</version>
 66             </dependency>
 67             <dependency>
 68                 <groupId>org.springframework</groupId>
 69                 <artifactId>spring-oxm</artifactId>
 70                 <version>${spring.version}</version>
 71             </dependency>
 72             <dependency>
 73                 <groupId>org.springframework</groupId>
 74                 <artifactId>spring-tx</artifactId>
 75                 <version>${spring.version}</version>
 76             </dependency>
 77             <dependency>
 78                 <groupId>org.springframework</groupId>
 79                 <artifactId>spring-jdbc</artifactId>
 80                 <version>${spring.version}</version>
 81             </dependency>
 82             <dependency>
 83                 <groupId>org.springframework</groupId>
 84                 <artifactId>spring-webmvc</artifactId>
 85                 <version>${spring.version}</version>
 86             </dependency>
 87             <dependency>
 88                 <groupId>org.springframework</groupId>
 89                 <artifactId>spring-context</artifactId>
 90                 <version>${spring.version}</version>
 91             </dependency>
 92             <dependency>
 93                 <groupId>org.springframework</groupId>
 94                 <artifactId>spring-context-support</artifactId>
 95                 <version>${spring.version}</version>
 96             </dependency>
 97             <dependency>
 98                 <groupId>org.springframework</groupId>
 99                 <artifactId>spring-aop</artifactId>
100                 <version>${spring.version}</version>
101             </dependency>
102 
103             <dependency>
104                 <groupId>org.springframework</groupId>
105                 <artifactId>spring-test</artifactId>
106                 <version>${spring.version}</version>
107             </dependency>
108 
109             <!-- 添加mybatis依赖 -->
110             <dependency>
111                 <groupId>org.mybatis</groupId>
112                 <artifactId>mybatis</artifactId>
113                 <version>${mybatis.version}</version>
114             </dependency>
115 
116             <!-- 添加mybatis/spring整合包依赖 -->
117             <dependency>
118                 <groupId>org.mybatis</groupId>
119                 <artifactId>mybatis-spring</artifactId>
120                 <version>1.2.2</version>
121             </dependency>
122 
123             <!-- 添加mysql驱动依赖 -->
124             <dependency>
125                 <groupId>mysql</groupId>
126                 <artifactId>mysql-connector-java</artifactId>
127                 <version>${mysql-driver.version}</version>
128             </dependency>
129             <!-- 添加数据库连接池依赖 -->
130             <dependency>
131                 <groupId>commons-dbcp</groupId>
132                 <artifactId>commons-dbcp</artifactId>
133                 <version>1.2.2</version>
134             </dependency>
135 
136             <!-- 添加fastjson -->
137             <dependency>
138                 <groupId>com.alibaba</groupId>
139                 <artifactId>fastjson</artifactId>
140                 <version>1.1.41</version>
141             </dependency>
142 
143             <!-- 添加日志相关jar包 -->
144             <dependency>
145                 <groupId>log4j</groupId>
146                 <artifactId>log4j</artifactId>
147                 <version>${log4j.version}</version>
148             </dependency>
149             <dependency>
150                 <groupId>org.slf4j</groupId>
151                 <artifactId>slf4j-api</artifactId>
152                 <version>${slf4j.version}</version>
153             </dependency>
154             <dependency>
155                 <groupId>org.slf4j</groupId>
156                 <artifactId>slf4j-log4j12</artifactId>
157                 <version>${slf4j.version}</version>
158             </dependency>
159 
160             <!-- log end -->
161             <!-- 映入JSON -->
162             <dependency>
163                 <groupId>org.codehaus.jackson</groupId>
164                 <artifactId>jackson-mapper-asl</artifactId>
165                 <version>1.9.13</version>
166             </dependency>
167             <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
168             <dependency>
169                 <groupId>com.fasterxml.jackson.core</groupId>
170                 <artifactId>jackson-core</artifactId>
171                 <version>2.8.0</version>
172             </dependency>
173             <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
174             <dependency>
175                 <groupId>com.fasterxml.jackson.core</groupId>
176                 <artifactId>jackson-databind</artifactId>
177                 <version>2.8.0</version>
178             </dependency>
179 
180             <dependency>
181                 <groupId>commons-fileupload</groupId>
182                 <artifactId>commons-fileupload</artifactId>
183                 <version>1.3.1</version>
184             </dependency>
185 
186             <dependency>
187                 <groupId>commons-io</groupId>
188                 <artifactId>commons-io</artifactId>
189                 <version>2.4</version>
190             </dependency>
191 
192             <dependency>
193                 <groupId>commons-codec</groupId>
194                 <artifactId>commons-codec</artifactId>
195                 <version>1.9</version>
196             </dependency>
197             <dependency>
198                 <groupId>junit</groupId>
199                 <artifactId>junit</artifactId>
200                 <version>4.12</version>
201                 <scope>compile</scope>
202             </dependency>
203             <!--分页插件-->
204             <dependency>
205                 <groupId>com.github.pagehelper</groupId>
206                 <artifactId>pagehelper</artifactId>
207                 <version>4.1.6</version>
208             </dependency>
209 
210         </dependencies>
211 
212 </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.方法参数最后两个是当前页和每页条数

猜你喜欢

转载自www.cnblogs.com/dw3306/p/9643143.html