spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
来源:互联网 发布:澳洲国立大学博士知乎 编辑:程序博客网 时间:2024/05/17 02:58
分页插件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=truepagehelper.closeConn=falsepagehelper.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.Driverjdbc.url=jdbc:mysql://ip:3306/db?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=xxxxxx# 包路径配置model.package=com.generator.modelmapper.package=com.generator.mapperxml.package=mybatis/mappertarget.project=src/main/javaxml.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注解。
阅读全文
0 0
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- Spring Boot 集成mybatis的分页拦截器:PageHelper
- Spring Boot : 集成mybatis、pagehelper插件、开启事务、druid数据源配置、mybatis-generator(十一)
- Spring中集成Mybatis分页插件PageHelper
- Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
- spring boot和mybatis集成分页插件
- SpringBoot集成MyBatis的分页插件PageHelper
- MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- Mybatis集成分页插件pageHelper
- Spring Boot+Mybatis+Pagehelper分页
- Spring Boot+Mybatis+Pagehelper分页
- 关于Spring+mybatis+PageHelper分页插件PageHelper的使用策略
- Spring+mybatis+PageHelper分页插件PageHelper的使用
- Spring Boot系列教程十一: Mybatis使用分页插件PageHelper
- Spring Boot系列教程八: Mybatis使用分页插件PageHelper
- Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
- Spring Boot集成MyBatis与分页插件
- 设计模式学习笔记
- 文章标题
- 输出1-64二进制中1位奇数个的二进制代码
- PyQt5学习教程16:文件打开对话框的使用
- VIM高级配置III#YouCompleteMe
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- python中cssselect参数的说明
- Win7下基于Anaconda安装dlib与face_recognition
- 将本地git仓库上传到github仓库时出现error: src refspec master does not match any报错无法上传
- 多元复合函数的求导法则
- 欢迎使用CSDN-markdown编辑器
- Python IDE for Windows pycharm的安装与配置
- 出现错误 No resource found that matches the given name '@style/Theme.AppCompat.Light'
- Android Studio报错-->Re-download dependencies and sync project (requires network)