spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
2017-11-04 00:30
1356 查看
分页插件PageHelper
参看了pagehelper-spring-boot,使用起来非常放方便,关于更多PageHelper可以点击https://github.com/pagehelper/Mybatis-PageHelper。
添加maven依赖
根据上面地址中的说明,只需要添加如下依赖,并且可以不再mybatis的依赖<!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency>
拦截器PageInterceptor
PageInterceptor是PageHelper-5.0版本中新的拦截器,com.github.pagehelper.PageHelper则成为了接口Dialect的一个实现类在拦截器PageInterceptor中可以看到如下内容
private Dialect dialect; private String default_dialect_class = "com.github.pagehelper.PageHelper"; public void setProperties(Properties properties) { this.msCountMap = CacheFactory.createCache(properties.getProperty("msCountCache"), "ms", properties); String dialectClass = properties.getProperty("dialect"); if(StringUtil.isEmpty(dialectClass)) { dialectClass = this.default_dialect_class; } try { Class e = Class.forName(dialectClass); this.dialect = (Dialect)e.newInstance(); } catch (Exception var5) { throw new PageException(var5); } this.dialect.setProperties(properties); try { this.additionalParametersField = BoundSql.class.getDeclaredField("additionalParameters"); this.additionalParametersField.setAccessible(true); } catch (NoSuchFieldException var4) { throw new PageException(var4); } }可以看出,com.github.pagehelper.PageHelper是拦截器默认的Dialect。也可以选择其它的Dialect实现,可以在application.properties中如下配置。
pagehelper.dialect=com.github.pagehelper.dialect.helper.MySqlDialect其它的Dialect实现在com.github.pagehelper.dialect下找到,不过一般不需要进行特殊配置,使用默认的com.github.pagehelper.PageHelper即可。
而在com.github.pagehelper.PageHelper中有以下两个参数。
private PageParams pageParams; private PageAutoDialect autoDialect; public void setProperties(Properties properties) { this.pageParams = new PageParams(); this.autoDialect = new PageAutoDialect(); this.pageParams.setProperties(properties); this.autoDialect.setProperties(properties); }其中PageParams中有以下属性。
protected boolean offsetAsPageNum = false; protected boolean rowBoundsWithCount = false; protected boolean pageSizeZero = false; protected boolean reasonable = false; protected boolean supportMethodsArguments = false;PageAutoDialect中有以下属性。
private boolean autoDialect = true; private boolean closeConn = true;以上内容都可以在application.properties中进行修改,如下所示。
pagehelper.autoDialect=true pagehelper.closeConn=false pagehelper.reasonable=true
Pagehelper的使用
我增加了如下测试代码。@RequestMapping("/find/mybatis/page") public String findUserPageFromMybatis(HttpServletRequest request, Integer pageNum, Integer pageSize) { pageNum = pageNum == null ? 1 : pageNum; pageSize = pageSize == null ? 10 : pageSize; PageHelper.startPage(pageNum, pageSize); List<UserMo> list = userMapper.selectUserList(); PageInfo pageInfo = new PageInfo(list); Page page = (Page) list; return "PageInfo: " + JSON.toJSONString(pageInfo) + ", Page: " + JSON.toJSONString(page); }运行程序后在浏览器输入 http://127.0.0.1:8080/find/mybatis/page,会看到如下输出。
PageInfo: { "endRow": 1, "firstPage": 1, "hasNextPage": true, "hasPreviousPage": false, "isFirstPage": true, "isLastPage": false, "lastPage": 8, "list": [ { "createDate": 1483586613000, "id": 1, "isDeleted": 0, "modifyDate": 1483586613000, "money": 1.20, "name": "sss" } ], "navigateFirstPage": 1, "navigateLastPage": 8, "navigatePages": 8, "navigatepageNums": [1,2,3,4,5,6,7,8], "nextPage": 2, "pageNum": 1, "pageSize": 1, "pages": 11, "prePage": 0, "size": 1, "startRow": 1, "total": 11 }, Page: [ { "createDate": 1483586613000, "id": 1, "isDeleted": 0, "modifyDate": 1483586613000, "money": 1.20, "name": "sss" } ]
对于其它的调用方式,可以参看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依赖及插件
<!-- Mybatis generator. --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator</artifactId> <version>1.3.5</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> </dependency> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <!-- 配置这个依赖主要是为了等下在配置MG的时候可以不用配置classPathEntry这样的一个属性 --> <!-- 避免代码的耦合度太高 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> </dependencies> </plugin> </plugins> </build>
添加Mybatis Generator的配置文件
在resources下增加generatorConfig.properties和generatorConfig.xml两个文件。首先是generatorConfig.xml,如下所示。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 配置文件路径 --> <properties resource="generatorConfig.properties"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" /> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="false"/> <property name="javaFileEncoding" value="UTF-8"/> </commentGenerator> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"> </jdbcConnection> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> <property name="javaExampleTargetPackage" value="${model.package}"/> <property name="javaExampleTargetProject" value="${target.project}"/> </javaModelGenerator> <sqlMapGenerator targetPackage="${xml.package}" targetProject="${xml.target.project}"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="${mapper.package}" targetProject="${target.project}"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <table tableName="test_user" > <generatedKey column="id" sqlStatement="Mysql" type="post" identity="true"/> </table> </context> </generatorConfiguration>
然后是generatorConfig.properties,如下所示。
# 数据库连接参数 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://ip:3306/db?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=xxxxxx # 包路径配置 model.package=com.generator.model mapper.package=com.generator.mapper xml.package=mybatis/mapper target.project=src/main/java xml.target.project=src/main/resources
生成代码
通过选中如下图片中的插件运行来生成代码。运行结束可看到生成的代码。
生成的TestUserMapper中需要自己手动加上@Mapper注解。
测试
对上面的代码稍作修改,如下所示。@Autowired private TestUserMapper testUserMapper; @RequestMapping("/find/mybatis/page") public String findUserPageFromMybatis(HttpServletRequest request, Integer pageNum, Integer pageSize) { pageNum = pageNum == null ? 1 : pageNum; pageSize = pageSize == null ? 10 : pageSize; PageHelper.startPage(pageNum, pageSize); List<TestUser> list = testUserMapper.selectByExample(new TestUserExample()); PageInfo pageInfo = new PageInfo(list); Page page = (Page) list; return "PageInfo: " + JSON.toJSONString(pageInfo) + ", Page: " + JSON.toJSONString(page); }运行后结果与上面的测试结果一致。
对于有特殊需求的可以修改mybatis-generator的源码来实现,比如自动添加@Mapper注解。
相关文章推荐
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- spring-boot 集成mybatis的分页插件PageHelper和Generator
- Spring Boot : 集成mybatis、pagehelper插件、开启事务、druid数据源配置、mybatis-generator(十一)
- SpringBoot集成MyBatis的分页插件PageHelper(回头草)
- [置顶] MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- springboot如何集成mybatis的pagehelper分页插件
- SpringBoot集成MyBatis的分页插件PageHelper(回头草)
- Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
- spring boot集成开源分页插件pagehelper
- SpringBoot Mybatis PageHelper分页插件的两种用法(一)
- 记录问题:springboot中使用Mybatis-pagehelper分页插件遇到的版本兼容问题
- Mybatis分页插件 - PageHelper与springBoot的整合
- SpringBoot集成Mybatis并具有分页功能PageHelper
- Spring Boot系列教程十一: Mybatis使用分页插件PageHelper
- SpringBoot Mybatis PageHelper分页插件的两种用法(二)
- spring boot +Thymeleaf+mybatis 集成通用PageHelper,做分页
- SpringBoot集成分页插件PageHelper
- spring boot和mybatis集成分页插件
- Maven+Spring + Mybatis 使用 PageHelper 插件分页
- SpringBoot之分页插件PageHelper的使用