spring-boot 集成mybatis的分页插件PageHelper和Generator

原文地址:http://blog.csdn.net/zl18310999566/article/details/54097273

分页插件PageHelper

参看了pagehelper-spring-boot,使用起来非常放方便,关于更多PageHelper可以点击https://github.com/pagehelper/Mybatis-PageHelper

添加maven依赖

根据上面地址中的说明,只需要添加如下依赖,并且可以不再mybatis的依赖

[html]  view plain  copy
 print ?
  1. <!--分页插件-->  
  2. <dependency>  
  3.       <groupId>com.github.pagehelper</groupId>  
  4.       <artifactId>pagehelper-spring-boot-starter</artifactId>  
  5.       <version>1.0.0</version>  
  6. </dependency>  

拦截器PageInterceptor

PageInterceptor是PageHelper-5.0版本中新的拦截器,com.github.pagehelper.PageHelper则成为了接口Dialect的一个实现类

在拦截器PageInterceptor中可以看到如下内容

[java]  view plain  copy
 print ?
  1. private Dialect dialect;  
  2. private String default_dialect_class = "com.github.pagehelper.PageHelper";  
  3.   
  4. public void setProperties(Properties properties) {  
  5.     this.msCountMap = CacheFactory.createCache(properties.getProperty("msCountCache"), "ms", properties);  
  6.     String dialectClass = properties.getProperty("dialect");  
  7.     if(StringUtil.isEmpty(dialectClass)) {  
  8.         dialectClass = this.default_dialect_class;  
  9.     }  
  10.   
  11.     try {  
  12.         Class e = Class.forName(dialectClass);  
  13.         this.dialect = (Dialect)e.newInstance();  
  14.     } catch (Exception var5) {  
  15.         throw new PageException(var5);  
  16.     }  
  17.   
  18.     this.dialect.setProperties(properties);  
  19.   
  20.     try {  
  21.         this.additionalParametersField = BoundSql.class.getDeclaredField("additionalParameters");  
  22.         this.additionalParametersField.setAccessible(true);  
  23.     } catch (NoSuchFieldException var4) {  
  24.         throw new PageException(var4);  
  25.     }  
  26. }  
可以看出,com.github.pagehelper.PageHelper是拦截器默认的Dialect。也可以选择其它的Dialect实现,可以在application.properties中如下配置。

[plain]  view plain  copy
 print ?
  1. pagehelper.dialect=com.github.pagehelper.dialect.helper.MySqlDialect  
其它的Dialect实现在com.github.pagehelper.dialect下找到,不过一般不需要进行特殊配置,使用默认的com.github.pagehelper.PageHelper即可。

而在com.github.pagehelper.PageHelper中有以下两个参数。

[java]  view plain  copy
 print ?
  1. private PageParams pageParams;  
  2. private PageAutoDialect autoDialect;  
  3. public void setProperties(Properties properties) {  
  4.     this.pageParams = new PageParams();  
  5.     this.autoDialect = new PageAutoDialect();  
  6.     this.pageParams.setProperties(properties);  
  7.     this.autoDialect.setProperties(properties);  
  8. }  
其中PageParams中有以下属性。

[java]  view plain  copy
 print ?
  1. protected boolean offsetAsPageNum = false;  
  2. protected boolean rowBoundsWithCount = false;  
  3. protected boolean pageSizeZero = false;  
  4. protected boolean reasonable = false;  
  5. protected boolean supportMethodsArguments = false;  
PageAutoDialect中有以下属性。

[java]  view plain  copy
 print ?
  1. private boolean autoDialect = true;  
  2. private boolean closeConn = true;  
以上内容都可以在application.properties中进行修改,如下所示。

[plain]  view plain  copy
 print ?
  1. pagehelper.autoDialect=true  
  2. pagehelper.closeConn=false  
  3. pagehelper.reasonable=true  

Pagehelper的使用

我增加了如下测试代码。

[plain]  view plain  copy
 print ?
  1. @RequestMapping("/find/mybatis/page")  
  2. public String findUserPageFromMybatis(HttpServletRequest request, Integer pageNum, Integer pageSize) {  
  3.     pageNum = pageNum == null ? 1 : pageNum;  
  4.     pageSize = pageSize == null ? 10 : pageSize;  
  5.     PageHelper.startPage(pageNum, pageSize);  
  6.     List<UserMo> list = userMapper.selectUserList();  
  7.     PageInfo pageInfo = new PageInfo(list);  
  8.     Page page = (Page) list;  
  9.     return "PageInfo: " + JSON.toJSONString(pageInfo) + ", Page: " + JSON.toJSONString(page);  
  10. }  
运行程序后在浏览器输入 http://127.0.0.1:8080/find/mybatis/page,会看到如下输出。

[plain]  view plain  copy
 print ?
  1. PageInfo: {  
  2.     "endRow": 1,  
  3.     "firstPage": 1,  
  4.     "hasNextPage": true,  
  5.     "hasPreviousPage": false,  
  6.     "isFirstPage": true,  
  7.     "isLastPage": false,  
  8.     "lastPage": 8,  
  9.     "list": [  
  10.         {  
  11.             "createDate": 1483586613000,  
  12.             "id": 1,  
  13.             "isDeleted": 0,  
  14.             "modifyDate": 1483586613000,  
  15.             "money": 1.20,  
  16.             "name": "sss"  
  17.         }  
  18.     ],  
  19.     "navigateFirstPage": 1,  
  20.     "navigateLastPage": 8,  
  21.     "navigatePages": 8,  
  22.     "navigatepageNums": [1,2,3,4,5,6,7,8],  
  23.     "nextPage": 2,  
  24.     "pageNum": 1,  
  25.     "pageSize": 1,  
  26.     "pages": 11,  
  27.     "prePage": 0,  
  28.     "size": 1,  
  29.     "startRow": 1,  
  30.     "total": 11  
  31. },  
  32. Page: [  
  33.     {  
  34.         "createDate": 1483586613000,  
  35.         "id": 1,  
  36.         "isDeleted": 0,  
  37.         "modifyDate": 1483586613000,  
  38.         "money": 1.20,  
  39.         "name": "sss"  
  40.     }  
  41. ]  

对于其它的调用方式,可以参看 https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

重要提示

  • 只有紧跟在 PageHelper.startPage 方法后的第一个 MyBatis 的查询(select)方法会被分页。
  • 请不要在系统中配置多个分页插件(使用 spring 时,mybatis-config.xml 和 Spring<bean> 配置方式,请选择其中一种,不要同时配置多个分页插件)。
  • 对于带有 for update 的 sql,会抛出运行时异常,对于这样的 sql 建议手动分页,毕竟这样的 sql 需要重视。
  • 由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。

Mybatis-Generator

更多信息可以查看http://www.mybatis.org/http://generator.sturgeon.mopaas.com/,以及https://github.com/mybatis/generator/releases

添加maven依赖及插件

[html]  view plain  copy
 print ?
  1. <!-- Mybatis generator. -->  
  2.     <dependency>  
  3.         <groupId>org.mybatis.generator</groupId>  
  4.         <artifactId>mybatis-generator</artifactId>  
  5.         <version>1.3.5</version>  
  6.     </dependency>  
  7.     <dependency>  
  8.         <groupId>org.mybatis.generator</groupId>  
  9.         <artifactId>mybatis-generator-maven-plugin</artifactId>  
  10.         <version>1.3.5</version>  
  11.     </dependency>  
  12. <build>  
  13.     <plugins>  
  14.         <plugin>  
  15.             <groupId>org.mybatis.generator</groupId>  
  16.             <artifactId>mybatis-generator-maven-plugin</artifactId>  
  17.             <version>1.3.5</version>  
  18.             <executions>  
  19.                 <execution>  
  20.                     <id>Generate MyBatis Artifacts</id>  
  21.                     <goals>  
  22.                         <goal>generate</goal>  
  23.                     </goals>  
  24.                 </execution>  
  25.             </executions>  
  26.             <dependencies>  
  27.                 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->  
  28.                 <!-- 配置这个依赖主要是为了等下在配置MG的时候可以不用配置classPathEntry这样的一个属性 -->  
  29.                 <!-- 避免代码的耦合度太高 -->  
  30.                 <dependency>  
  31.                     <groupId>mysql</groupId>  
  32.                     <artifactId>mysql-connector-java</artifactId>  
  33.                     <version>6.0.5</version>  
  34.                 </dependency>  
  35.             </dependencies>  
  36.         </plugin>  
  37.     </plugins>  
  38. </build>  

添加Mybatis Generator的配置文件

在resources下增加generatorConfig.properties和generatorConfig.xml两个文件。

首先是generatorConfig.xml,如下所示。

[html]  view plain  copy
 print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE generatorConfiguration  
  3.         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
  4.         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
  5.   
  6. <generatorConfiguration>  
  7.     <!-- 配置文件路径 -->  
  8.     <properties resource="generatorConfig.properties"/>  
  9.   
  10.     <context id="DB2Tables" targetRuntime="MyBatis3">  
  11.   
  12.         <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />  
  13.   
  14.         <commentGenerator>  
  15.             <property name="suppressDate" value="true"/>  
  16.             <property name="suppressAllComments" value="false"/>  
  17.             <property name="javaFileEncoding" value="UTF-8"/>  
  18.         </commentGenerator>  
  19.   
  20.         <jdbcConnection driverClass="${jdbc.driver}"  
  21.                         connectionURL="${jdbc.url}"  
  22.                         userId="${jdbc.username}"  
  23.                         password="${jdbc.password}">  
  24.         </jdbcConnection>  
  25.   
  26.         <javaTypeResolver >  
  27.             <property name="forceBigDecimals" value="false" />  
  28.         </javaTypeResolver>  
  29.   
  30.         <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}">  
  31.             <property name="enableSubPackages" value="true"/>  
  32.             <property name="trimStrings" value="true"/>  
  33.             <property name="javaExampleTargetPackage" value="${model.package}"/>  
  34.             <property name="javaExampleTargetProject" value="${target.project}"/>  
  35.         </javaModelGenerator>  
  36.   
  37.         <sqlMapGenerator targetPackage="${xml.package}"  targetProject="${xml.target.project}">  
  38.             <property name="enableSubPackages" value="true" />  
  39.         </sqlMapGenerator>  
  40.   
  41.         <javaClientGenerator type="XMLMAPPER"  
  42.                              targetPackage="${mapper.package}"  
  43.                              targetProject="${target.project}">  
  44.             <property name="enableSubPackages" value="true" />  
  45.         </javaClientGenerator>  
  46.   
  47.         <table tableName="test_user" >  
  48.             <generatedKey column="id" sqlStatement="Mysql" type="post" identity="true"/>  
  49.         </table>  
  50.   
  51.     </context>  
  52. </generatorConfiguration>  


然后是generatorConfig.properties,如下所示。

[plain]  view plain  copy
 print ?
  1. # 数据库连接参数  
  2. jdbc.driver=com.mysql.jdbc.Driver  
  3. jdbc.url=jdbc:mysql://ip:3306/db?useUnicode=true&characterEncoding=utf-8  
  4. jdbc.username=root  
  5. jdbc.password=xxxxxx  
  6.   
  7. # 包路径配置  
  8. model.package=com.generator.model  
  9. mapper.package=com.generator.mapper  
  10. xml.package=mybatis/mapper  
  11.   
  12. target.project=src/main/java  
  13. xml.target.project=src/main/resources  

生成代码

通过选中如下图片中的插件运行来生成代码。


运行结束可看到生成的代码。

生成的TestUserMapper中需要自己手动加上@Mapper注解。

测试

对上面的代码稍作修改,如下所示。

[java]  view plain  copy
 print ?
  1. @Autowired  
  2. private TestUserMapper testUserMapper;  
  3.   
  4. @RequestMapping("/find/mybatis/page")  
  5. public String findUserPageFromMybatis(HttpServletRequest request, Integer pageNum, Integer pageSize) {  
  6.     pageNum = pageNum == null ? 1 : pageNum;  
  7.     pageSize = pageSize == null ? 10 : pageSize;  
  8.     PageHelper.startPage(pageNum, pageSize);  
  9.     List<TestUser> list = testUserMapper.selectByExample(new TestUserExample());  
  10.     PageInfo pageInfo = new PageInfo(list);  
  11.     Page page = (Page) list;  
  12.     return "PageInfo: " + JSON.toJSONString(pageInfo) + ", Page: " + JSON.toJSONString(page);  
  13. }  
运行后结果与上面的测试结果一致。

对于有特殊需求的可以修改mybatis-generator的源码来实现,比如自动添加@Mapper注解。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值