SSM 使用 mybatis 分页插件 pagehepler 实现分页
使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性。
Mybatis分页插件 demo 项目地址:https://gitee.com/free/Mybatis_PageHelper
我这里使用 maven 工程实现:
1.首先导入分页插件的依赖:
1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId>pagehelper</artifactId> 4 <version>5.0.0</version> 5 </dependency>
2.配置分页拦截器插件
官方文档有两种配置分页拦截器插件
1. 在 MyBatis 配置 xml 中配置拦截器插件
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
2. 在 Spring 配置文件中配置拦截器插件
使用 spring 的属性配置方式,可以使用 plugins
属性像下面这样配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注意其他配置 --> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置参数,一行配置一个 --> <value> params=value1 </value> </property> </bean> </array> </property> </bean>
这里我项目中使用的是第二种,里面的参数根据实际情况配置,也可以不配置
3.调用方法
mapper 层 sql 语句按照一般查询写法,不用写分页:
1 <!-- 分页查询 --> 2 <select id="finds" resultType="country"> 3 SELECT 4 id, 5 countryname, 6 countrycode 7 FROM 8 country 9 </select>
mapper 层接口:
1 /** 2 * 查询 3 * @param params 4 * @return 5 */ 6 public List<Country> finds();
service 业务层接口:
1 /** 2 * 分页查询 3 * @param params 分页参数 pageNo(页码),pageSize(每页查询数目) 4 * @return 5 */ 6 public PageInfo<Country> finds(Params params);
service 业务层实现类:PageHelper.startPage(1, 10);
第一个参数表示第几页,第二个参数表示每页显示的记录数
执行完 PageHelper.startPage(1, 10);语句后,紧跟着的第一个select方法会被分页:List<Country> blogs = countryMapper.finds();
然后再用 PageInfo 对查询结果进行包装,PageInfo<Country> pageInfo = new PageInfo<Country>(blogs);
并将 pageInfo 返回到控制层
1 /** 2 * 查询 3 */ 4 public PageInfo<Country> finds(Params params) { 5 6 //查询 7 int pageNo = params.getPageNo(); 8 int pageSize = params.getPageSize(); 9 10 PageHelper.startPage(pageNo, pageSize); 11 List<Country> blogs = countryMapper.finds(); 12 //用PageInfo对结果进行包装 13 PageInfo<Country> pageInfo = new PageInfo<Country>(blogs); 14 15 return pageInfo; 16 17 }
这里返回 pageInfo 后,在 controller 层传入 params 分页参数 和 解析 pageInfo:
List<Country> clist = pageInfo.getList(); 再将 clist 放进作用域,在前台页面利用<c:forEach></c:forEach>可循环获得分页数据
1 /** 2 * 首页,并且分页查询 3 * @return 4 */ 5 @RequestMapping("/index") 6 public ModelAndView index(Params params){ 7 8 ModelAndView modelAndView = new ModelAndView(); 9 //一开始第一页,查询10条 10 params.setPageNo(1); 11 params.setPageSize(10); 12 PageInfo<Country> pageInfo = countryService.finds(params); 13 14 List<Country> clist = pageInfo.getList(); 15 16 //查询数量 17 long couts = countryService.counts(); 18 19 modelAndView.addObject("clist", clist); 20 modelAndView.addObject("couts", couts); 21 modelAndView.setViewName("index"); 22 23 return modelAndView; 24 }
上面说的都是关键分页的实现代码,现在看看全部配置和实现的代码:
pom.xml
1 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.krry</groupId> 5 <artifactId>maven_pagehepler_ora</artifactId> 6 <packaging>war</packaging> 7 <version>1.0-SNAPSHOT</version> 8 <name>maven_pagehepler_ora</name> 9 <url>http://maven.apache.org</url> 10 11 <properties> 12 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 13 <!-- MyBatis Generator --> 14 <!-- Java接口和实体类 --> 15 <targetJavaProject>${basedir}/src/main/java</targetJavaProject> 16 <targetMapperPackage>com.isea533.mybatis.mapper</targetMapperPackage> 17 <targetModelPackage>com.isea533.mybatis.model</targetModelPackage> 18 <!-- XML生成路径 --> 19 <targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject> 20 <targetXMLPackage>mapper</targetXMLPackage> 21 <!-- 编译jdk版本 --> 22 <jdk.version>1.6</jdk.version> 23 <!-- 依赖版本 --> 24 <mybatis.version>3.3.1</mybatis.version> 25 <mapper.version>3.3.6</mapper.version> 26 <pagehelper.version>5.0.0</pagehelper.version> 27 <mysql.version>5.1.29</mysql.version> 28 <spring.version>4.1.2.RELEASE</spring.version> 29 <mybatis.spring.version>1.2.4</mybatis.spring.version> 30 </properties> 31 32 <dependencies> 33 <dependency> 34 <groupId>junit</groupId> 35 <artifactId>junit</artifactId> 36 <version>4.11</version> 37 <scope>test</scope> 38 </dependency> 39 <dependency> 40 <groupId>log4j</groupId> 41 <artifactId>log4j</artifactId> 42 <version>1.2.17</version> 43 </dependency> 44 45 <!--web--> 46 <dependency> 47 <groupId>javax.servlet</groupId> 48 <artifactId>servlet-api</artifactId> 49 <version>2.5</version> 50 <scope>provided</scope> 51 </dependency> 52 <dependency> 53 <groupId>javax.servlet.jsp</groupId> 54 <artifactId>jsp-api</artifactId> 55 <version>2.1</version> 56 <scope>provided</scope> 57 </dependency> 58 <dependency> 59 <groupId>javax.servlet</groupId> 60 <artifactId>jstl</artifactId> 61 <version>1.2</version> 62 </dependency> 63 <dependency> 64 <groupId>javax.ws.rs</groupId> 65 <artifactId>javax.ws.rs-api</artifactId> 66 <version>2.0</version> 67 </dependency> 68 <dependency> 69 <groupId>javax.websocket</groupId> 70 <artifactId>javax.websocket-api</artifactId> 71 <version>1.0</version> 72 </dependency> 73 <dependency> 74 <groupId>javax.annotation</groupId> 75 <artifactId>javax.annotation-api</artifactId> 76 <version>1.2</version> 77 </dependency> 78 <dependency> 79 <groupId>javax.transaction</groupId> 80 <artifactId>javax.transaction-api</artifactId> 81 <version>1.2</version> 82 </dependency> 83 84 <!--Spring--> 85 <dependency> 86 <groupId>org.springframework</groupId> 87 <artifactId>spring-context</artifactId> 88 </dependency> 89 <dependency> 90 <groupId>org.springframework</groupId> 91 <artifactId>spring-orm</artifactId> 92 </dependency> 93 <dependency> 94 <groupId>org.springframework</groupId> 95 <artifactId>spring-oxm</artifactId> 96 </dependency> 97 <dependency> 98 <groupId>org.springframework</groupId> 99 <artifactId>spring-jdbc</artifactId> 100 </dependency> 101 <dependency> 102 <groupId>org.springframework</groupId> 103 <artifactId>spring-tx</artifactId> 104 </dependency> 105 <dependency> 106 <groupId>org.springframework</groupId> 107 <artifactId>spring-web</artifactId> 108 </dependency> 109 <dependency> 110 <groupId>org.springframework</groupId> 111 <artifactId>spring-webmvc</artifactId> 112 </dependency> 113 <dependency> 114 <groupId>org.springframework</groupId> 115 <artifactId>spring-aop</artifactId> 116 </dependency> 117 <dependency> 118 <groupId>org.springframework</groupId> 119 <artifactId>spring-test</artifactId> 120 </dependency> 121 122 <!--spring-oxm依赖--> 123 <dependency> 124 <groupId>org.codehaus.castor</groupId> 125 <artifactId>castor-xml</artifactId> 126 <version>1.3.3</version> 127 </dependency> 128 <!--spring-json依赖--> 129 <dependency> 130 <groupId>com.fasterxml.jackson.core</groupId> 131 <artifactId>jackson-databind</artifactId> 132 <version>2.4.2</version> 133 </dependency> 134 <dependency> 135 <groupId>com.fasterxml.jackson.dataformat</groupId> 136 <artifactId>jackson-dataformat-xml</artifactId> 137 <version>2.4.2</version> 138 </dependency> 139 <!--spring-aop依赖--> 140 <dependency> 141 <groupId>org.aspectj</groupId> 142 <artifactId>aspectjweaver</artifactId> 143 <version>1.8.2</version> 144 </dependency> 145 146 <!--上传文件--> 147 <dependency> 148 <groupId>commons-fileupload</groupId> 149 <artifactId>commons-fileupload</artifactId> 150 <version>1.3.1</version> 151 </dependency> 152 153 <!--mysql--> 154 <dependency> 155 <groupId>mysql</groupId> 156 <artifactId>mysql-connector-java</artifactId> 157 <version>${mysql.version}</version> 158 </dependency> 159 160 <!--druid--> 161 <dependency> 162 <groupId>com.alibaba</groupId> 163 <artifactId>druid</artifactId> 164 <version>1.0.11</version> 165 </dependency> 166 167 <!--Mybatis--> 168 <dependency> 169 <groupId>org.mybatis</groupId> 170 <artifactId>mybatis</artifactId> 171 <version>${mybatis.version}</version> 172 </dependency> 173 <dependency> 174 <groupId>org.mybatis</groupId> 175 <artifactId>mybatis-spring</artifactId> 176 <version>${mybatis.spring.version}</version> 177 </dependency> 178 <!-- Mybatis Generator --> 179 <dependency> 180 <groupId>org.mybatis.generator</groupId> 181 <artifactId>mybatis-generator-core</artifactId> 182 <version>1.3.2</version> 183 <scope>compile</scope> 184 <optional>true</optional> 185 </dependency> 186 <!--分页插件--> 187 <dependency> 188 <groupId>com.github.pagehelper</groupId> 189 <artifactId>pagehelper</artifactId> 190 <version>${pagehelper.version}</version> 191 </dependency> 192 <!--通用Mapper--> 193 <dependency> 194 <groupId>tk.mybatis</groupId> 195 <artifactId>mapper</artifactId> 196 <version>${mapper.version}</version> 197 </dependency> 198 199 <dependency> 200 <groupId>org.apache.commons</groupId> 201 <artifactId>commons-lang3</artifactId> 202 <version>3.3.2</version> 203 </dependency> 204 205 206 </dependencies> 207 <dependencyManagement> 208 <dependencies> 209 <dependency> 210 <groupId>org.springframework</groupId> 211 <artifactId>spring-framework-bom</artifactId> 212 <version>${spring.version}</version> 213 <type>pom</type> 214 <scope>import</scope> 215 </dependency> 216 </dependencies> 217 </dependencyManagement> 218 <repositories> 219 <repository> 220 <id>nexus</id> 221 <name>local private nexus</name> 222 <url>http://maven.oschina.net/content/groups/public/</url> 223 <releases> 224 <enabled>true</enabled> 225 </releases> 226 <snapshots> 227 <enabled>false</enabled> 228 </snapshots> 229 </repository> 230 <repository> 231 <id>sonatype-nexus-releases</id> 232 <name>Sonatype Nexus Releases</name> 233 <url>http://oss.sonatype.org/content/repositories/releases</url> 234 <releases> 235 <enabled>true</enabled> 236 </releases> 237 <snapshots> 238 <enabled>false</enabled> 239 </snapshots> 240 </repository> 241 <repository> 242 <id>sonatype-nexus-snapshots</id> 243 <name>Sonatype Nexus Snapshots</name> 244 <url>http://oss.sonatype.org/content/repositories/snapshots</url> 245 <releases> 246 <enabled>false</enabled> 247 </releases> 248 <snapshots> 249 <enabled>true</enabled> 250 </snapshots> 251 </repository> 252 </repositories> 253 <build> 254 <plugins> 255 <plugin> 256 <groupId>org.apache.maven.plugins</groupId> 257 <artifactId>maven-compiler-plugin</artifactId> 258 <version>3.2</version> 259 <configuration> 260 <source>1.7</source> 261 <target>1.7</target> 262 </configuration> 263 </plugin> 264 </plugins> 265 </build> 266 </project>
applicationContext.xml
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" xmlns:aop="http://www.springframework.org/schema/aop" 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 5 xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/aop 9 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 10 http://www.springframework.org/schema/tx 11 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context-3.0.xsd 14 http://www.springframework.org/schema/util 15 http://www.springframework.org/schema/util/spring-util-3.0.xsd 16 "> 17 18 19 <!-- 配置包扫描 --> 20 <context:component-scan base-package="com.krry"></context:component-scan> 21 22 <!-- 导入外部资源文件 --> 23 <context:property-placeholder location="classpath:jdbc.properties" /> 24 25 26 <!-- 配置druid数据源 --> 27 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 28 init-method="init" destroy-method="close"> 29 <property name="driverClassName" value="${db.driver}" /> 30 <property name="url" value="${db.url}" /> 31 <property name="username" value="${db.username}" /> 32 <property name="password" value="${db.password}" /> 33 </bean> 34 35 <!-- 注册事务管理器 --> 36 <bean id="txMgr" 37 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 38 <property name="dataSource" ref="dataSource"></property> 39 </bean> 40 41 <!-- 开启事务注解驱动 --> 42 <tx:annotation-driven transaction-manager="txMgr" /> 43 44 <!-- 配置mybatis的sqlSessionFactory --> 45 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 46 <property name="dataSource" ref="dataSource"/> 47 <property name="configLocation" value="classpath:mybatis-config.xml"></property> 48 <property name="typeAliasesPackage" value="com.krry.entity"/> 49 <property name="plugins"> 50 <array> 51 <bean class="com.github.pagehelper.PageInterceptor"> 52 <!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 --> 53 <property name="properties"> 54 <value> 55 56 </value> 57 </property> 58 </bean> 59 </array> 60 </property> 61 </bean> 62 63 <!-- 配置可以整体扫描Mapper的一个扫描器 --> 64 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 65 <!--如果有多个报路径,用逗号分开即可 --> 66 <property name="basePackage" value="com.krry.mapper"></property> 67 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 68 </bean> 69 70 </beans>
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 6 <configuration> 7 <settings> 8 <!-- 全局映射器启用缓存 --> 9 <setting name="cacheEnabled" value="true" /> 10 <!-- 查询时,关闭关联对象即时加载以提高性能 --> 11 <setting name="lazyLoadingEnabled" value="true" /> 12 <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 --> 13 <setting name="aggressiveLazyLoading" value="false" /> 14 <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> 15 <setting name="multipleResultSetsEnabled" value="true" /> 16 <!-- 允许使用列标签代替列名 --> 17 <setting name="useColumnLabel" value="true" /> 18 <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> 19 <setting name="useGeneratedKeys" value="true" /> 20 <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> 21 <setting name="autoMappingBehavior" value="FULL" /> 22 <!-- 对于批量更新操作缓存SQL以提高性能 --> 23 <setting name="defaultExecutorType" value="BATCH" /> 24 <!-- 数据库超过25000秒仍未响应则超时 --> 25 <setting name="defaultStatementTimeout" value="25" /> 26 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> 27 </settings> 28 29 <typeAliases> 30 <!--自定义user对象的别名 --> 31 <!-- <typeAlias type="com.krry.mybatis.sysmanage.entity.User" alias="user"/> --> 32 <!-- 批量定义别名 --> 33 <package name="com.krry.entity" /> 34 </typeAliases> 35 36 </configuration>
springmvc.xml
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:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:util="http://www.springframework.org/schema/util" 7 xmlns:mvc="http://www.springframework.org/schema/mvc" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context-3.0.xsd 12 http://www.springframework.org/schema/util 13 http://www.springframework.org/schema/util/spring-util-3.0.xsd 14 http://www.springframework.org/schema/mvc 15 http://www.springframework.org/schema/mvc/spring-mvc.xsd 16 "> 17 18 <!-- 开启注解模式驱动 --> 19 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 20 <!-- 开启mvc的注解模式 user 还会注册一个ConversionService 子类FormattingConversionServiceFactoryBean--> 21 <mvc:annotation-driven> 22 <mvc:message-converters register-defaults="true"> 23 <bean class="com.krry.core.UTF8StringHttpMessageConverter"> 24 <property name="supportedMediaTypes"> 25 <list> 26 <value>text/plain;charset=UTF-8</value> 27 <value>text/html;charset=UTF-8</value> 28 </list> 29 </property> 30 </bean> 31 <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/> 32 <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> 33 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 34 <property name="prefixJson" value="false" /> 35 <property name="objectMapper"> 36 <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 37 <!-- 处理responseBody 里面日期类型 --> 38 <property name="dateFormat"> 39 <bean class="java.text.SimpleDateFormat"> 40 <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> 41 </bean> 42 </property> 43 <!-- 为null字段时不显示 --> 44 <property name="serializationInclusion"> 45 <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value> 46 </property> 47 </bean> 48 </property> 49 <property name="supportedMediaTypes"> 50 <list> 51 <value>application/json;charset=UTF-8</value> 52 <value>application/x-www-form-urlencoded;charset=UTF-8</value> 53 </list> 54 </property> 55 </bean> 56 </mvc:message-converters> 57 </mvc:annotation-driven> 58 59 60 <!-- 扫包 --> 61 <context:component-scan base-package="com.krry.controller"></context:component-scan> 62 63 <!--对静态资源文件的访问 必须要设置,因为在springmvc的配置中配置了/匹配所有请求, 64 此工程所有的请求(.do ,addUser,js/image/css)都会被springmvc解析, 65 必须对所有的静态资源文件进行过滤放行 --> 66 <!-- 静态资源过滤 下面二选一--> 67 <!--<mvc:default-servlet-handler/> --> 68 <mvc:resources mapping="/resource/**" location="/resource/" /> 69 70 71 72 <!-- 视图渲染 jsp/freemaker/velocity--> 73 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 74 <!-- 制定页面存放的路径 --> 75 <property name="prefix" value="/WEB-INF/pages/"></property> 76 <!-- 文件的后缀 --> 77 <property name="suffix" value=".jsp"></property> 78 </bean> 79 80 </beans>
jdbc.properties 和 log4j.properties 就不用展示了,都差不多的
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 3 <display-name>maven_pagehepler</display-name> 4 <welcome-file-list> 5 <welcome-file>index/index</welcome-file> 6 </welcome-file-list> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:applicationContext.xml</param-value> 10 </context-param> 11 <listener> 12 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 13 </listener> 14 <listener> 15 <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 16 </listener> 17 <filter> 18 <filter-name>encoding</filter-name> 19 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 20 <init-param> 21 <param-name>encoding</param-name> 22 <param-value>UTF-8</param-value> 23 </init-param> 24 </filter> 25 <filter-mapping> 26 <filter-name>encoding</filter-name> 27 <url-pattern>/*</url-pattern> 28 </filter-mapping> 29 <servlet> 30 <servlet-name>maven_pagehepler</servlet-name> 31 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 32 <init-param> 33 <param-name>contextConfigLocation</param-name> 34 <param-value>classpath:springmvc.xml</param-value> 35 </init-param> 36 </servlet> 37 <servlet-mapping> 38 <servlet-name>maven_pagehepler</servlet-name> 39 <url-pattern>/index/index</url-pattern> 40 </servlet-mapping> 41 <servlet-mapping> 42 <servlet-name>maven_pagehepler</servlet-name> 43 <url-pattern>/</url-pattern> 44 </servlet-mapping> 45 </web-app>
实体类:Country.java
1 package com.krry.entity; 2 3 public class Country { 4 5 6 /** 7 * 主键 8 */ 9 private Integer id; 10 11 /** 12 * 名称 13 */ 14 private String countryname; 15 16 /** 17 * 代码 18 */ 19 private String countrycode; 20 21 22 23 public Country(Integer id, String countryname, String countrycode) { 24 this.id = id; 25 this.countryname = countryname; 26 this.countrycode = countrycode; 27 } 28 29 /** 30 * 获取主键 31 * 32 * @return Id - 主键 33 */ 34 public Integer getId() { 35 return id; 36 } 37 38 /** 39 * 设置主键 40 * 41 * @param id 主键 42 */ 43 public void setId(Integer id) { 44 this.id = id; 45 } 46 47 /** 48 * 获取名称 49 * 50 * @return countryname - 名称 51 */ 52 public String getCountryname() { 53 return countryname; 54 } 55 56 /** 57 * 设置名称 58 * 59 * @param countryname 名称 60 */ 61 public void setCountryname(String countryname) { 62 this.countryname = countryname; 63 } 64 65 /** 66 * 获取代码 67 * 68 * @return countrycode - 代码 69 */ 70 public String getCountrycode() { 71 return countrycode; 72 } 73 74 /** 75 * 设置代码 76 * 77 * @param countrycode 代码 78 */ 79 public void setCountrycode(String countrycode) { 80 this.countrycode = countrycode; 81 } 82 }
Params.java
1 package com.krry.entity; 2 3 /** 4 * 5 * Params 6 * @author krry 7 * @version 1.0.0 8 * 9 */ 10 public class Params { 11 12 private Integer pageSize = 10; 13 private Integer pageNo = 0; 14 15 16 public Integer getPageNo() { 17 return pageNo; 18 } 19 20 public void setPageNo(Integer pageNo) { 21 this.pageNo = pageNo; 22 } 23 24 public Integer getPageSize() { 25 return pageSize; 26 } 27 28 public void setPageSize(Integer pageSize) { 29 this.pageSize = pageSize; 30 } 31 32 }
持久层:CountryMapper.java
1 package com.krry.mapper; 2 3 import java.util.List; 4 5 import com.krry.entity.Country; 6 7 /** 8 * 9 * Mapper:操作数据库 10 * @author krry 11 * @version 1.0.0 12 * 13 */ 14 public interface CountryMapper { 15 16 /** 17 * 查询 18 * @param params 19 * @return 20 */ 21 public List<Country> finds(); 22 23 /** 24 * 计算 25 * com.krry.dao.admin 26 * 方法名:countBlogs 27 * @author krry 28 * @param params 29 * @return int 30 * @exception 31 * @since 1.0.0 32 */ 33 public long counts(); 34 35 36 }
CountryMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 5 <mapper namespace="com.krry.mapper.CountryMapper" > 6 7 <!-- 分页查询 --> 8 <select id="finds" resultType="country"> 9 SELECT 10 id, 11 countryname, 12 countrycode 13 FROM 14 country 15 </select> 16 17 <!-- 查询博客数量 --> 18 <select id="counts" resultType="long"> 19 SELECT 20 count(*) 21 FROM 22 country 23 </select> 24 25 26 </mapper>
业务层接口:
1 package com.krry.service; 2 3 import java.util.HashMap; 4 import java.util.List; 5 6 import javax.servlet.http.HttpServletRequest; 7 8 import org.apache.ibatis.annotations.Param; 9 10 import com.github.pagehelper.PageInfo; 11 import com.krry.entity.Country; 12 import com.krry.entity.Params; 13 14 /** 15 * service层:处理业务逻辑(impl里面实现) 16 * @author asusaad 17 * 18 */ 19 public interface ICountryService { 20 21 /** 22 * 分页查询所有博客 23 * @param params 分页参数 pageNo(页码),pageSize(每页查询数目) 24 * @return 25 */ 26 public PageInfo<Country> finds(Params params); 27 28 /** 29 * 计算博客数量 30 * @param params 31 * @return 32 */ 33 public long counts(); 34 35 }
业务层实现类
1 package com.krry.service.impl; 2 3 import java.util.HashMap; 4 import java.util.List; 5 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 import org.springframework.web.servlet.ModelAndView; 9 10 import com.github.pagehelper.PageHelper; 11 import com.github.pagehelper.PageInfo; 12 import com.krry.entity.Country; 13 import com.krry.entity.Params; 14 import com.krry.mapper.CountryMapper; 15 import com.krry.service.ICountryService; 16 17 /** 18 * 实现service层接口 19 * @author asusaad 20 * 21 */ 22 @Service 23 public class CountryService implements ICountryService{ 24 25 @Autowired 26 private CountryMapper countryMapper; 27 28 /** 29 * 查询 30 */ 31 public PageInfo<Country> finds(Params params) { 32 33 //查询 34 int pageNo = params.getPageNo(); 35 int pageSize = params.getPageSize(); 36 37 PageHelper.startPage(pageNo, pageSize); 38 List<Country> blogs = countryMapper.finds(); 39 //用PageInfo对结果进行包装 40 PageInfo<Country> pageInfo = new PageInfo<Country>(blogs); 41 42 return pageInfo; 43 44 } 45 46 /** 47 * 计算 48 * @param params 49 * @return 50 */ 51 public long counts(){ 52 53 long couts = countryMapper.counts(); 54 55 return couts; 56 } 57 58 59 60 }
控制层:KrryController.java
1 package com.krry.controller; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 import org.junit.Test; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.stereotype.Controller; 10 import org.springframework.web.bind.annotation.RequestMapping; 11 import org.springframework.web.bind.annotation.ResponseBody; 12 import org.springframework.web.servlet.ModelAndView; 13 14 import com.github.pagehelper.PageInfo; 15 import com.krry.entity.Country; 16 import com.krry.entity.Params; 17 import com.krry.service.ICountryService; 18 19 /** 20 * KrryController 21 * controller层,作为请求转发 22 * @author asusaad 23 * 24 */ 25 @Controller //表示是多例模式,每个用户返回的web层是不一样的 26 @RequestMapping("/index") 27 public class KrryController { 28 29 @Autowired 30 private ICountryService countryService; 31 32 /** 33 * 首页,并且分页查询 34 * @return 35 */ 36 @RequestMapping("/index") 37 public ModelAndView index(Params params){ 38 39 ModelAndView modelAndView = new ModelAndView(); 40 //一开始第一页,查询10条 41 params.setPageNo(1); 42 params.setPageSize(10); 43 PageInfo<Country> pageInfo = countryService.finds(params); 44 45 List<Country> clist = pageInfo.getList(); 46 47 //查询数量 48 long couts = countryService.counts(); 49 50 modelAndView.addObject("clist", clist); 51 modelAndView.addObject("couts", couts); 52 modelAndView.setViewName("index"); 53 54 return modelAndView; 55 } 56 57 /** 58 * ajax请求 的 分页查询 59 * @param params 60 * @return 61 */ 62 @ResponseBody 63 @RequestMapping("/loadData") 64 public HashMap<String, Object> loadData(Params params){ 65 66 67 HashMap<String, Object> map = new HashMap<String, Object>(); 68 PageInfo<Country> pageInfo = countryService.finds(params); 69 List<Country> clist = pageInfo.getList(); 70 map.put("clist", clist); 71 72 return map; 73 } 74 // 75 76 }