前幾天在這里分享了手寫 sql 分頁查詢實現分頁,現在來看看使用 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 }