参看了pagehelper-spring-boot,使用起来非常放方便,关于更多PageHelper可以点击https://github.com/pagehelper/Mybatis-PageHelper。
根据上面地址中的说明,只需要添加如下依赖,并且可以不再mybatis的依赖
com.github.pagehelper
pagehelper-spring-boot-starter
1.0.0
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
我增加了如下测试代码。
@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 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"
}
]
更多信息可以查看http://www.mybatis.org/,http://generator.sturgeon.mopaas.com/,以及https://github.com/mybatis/generator/releases。
org.mybatis.generator
mybatis-generator
1.3.5
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
Generate MyBatis Artifacts
generate
mysql
mysql-connector-java
6.0.5
在resources下增加generatorConfig.properties和generatorConfig.xml两个文件。
首先是generatorConfig.xml,如下所示。
然后是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 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注解。