自己随便做的SpringBoot项目里整合了MyBaits-Plus,实际使用过程中却发现分页的结果并不正确,现把代码和解决办法贴出来。
/**
* 返回用户分页信息
* @param currentPage 当前页
* @param pageSize pagesize
* @return 结果
*/
@RequestMapping("/all/page")
@ResponseBody
public ResultBean<IPage<User>> getUserByPage(Long currentPage,Long pageSize){
ResultBean<IPage<User>> resultBean=new ResultBean<>();
try{
Page<User> userPage=new Page<>(currentPage,pageSize);
IPage<User> userIPage=userService.page(userPage);
resultBean.setData(userIPage);
resultBean.setMsg("查询成功");
resultBean.setCode(ResultBean.SUCCESS);
}catch (Exception e){
resultBean.setData(null);
resultBean.setMsg(e.getMessage());
resultBean.setCode(ResultBean.FAIL);
}
return resultBean;
}
PostMan测试的结果如下:
{
"code": 0,
"msg": "查询成功",
"data": {
"records": [
{
"id": 1,
"username": "Eli",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T01:37:11.000+0000"
},
{
"id": 2,
"username": "王一",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T01:49:59.000+0000"
},
{
"id": 3,
"username": "李四",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T16:01:36.000+0000"
},
{
"id": 4,
"username": "王二小",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:23:56.000+0000"
},
{
"id": 5,
"username": "王1",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:23.000+0000"
},
{
"id": 6,
"username": "王2",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:27.000+0000"
},
{
"id": 7,
"username": "王3",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:33.000+0000"
},
{
"id": 8,
"username": "王4",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:42.000+0000"
},
{
"id": 9,
"username": "王5",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:49.000+0000"
}
],
"total": 0,
"size": 3,
"current": 1,
"searchCount": true,
"pages": 0
}
}
可以看到并没有分页,查看log4j日志:
==> Preparing: SELECT id,username,nickname,password,enabled,email,avatar,regTime FROM user
==> Parameters:
<== Columns: id, username, nickname, password, enabled, email, avatar, regTime
<== Row: 1, Eli, Eli, 1, 1, null, null, 2018-12-13 19:37:11
<== Row: 2, 王一, Eli, 1, 1, null, null, 2018-12-13 19:49:59
<== Row: 3, 李四, Eli, 1, 1, null, null, 2018-12-14 10:01:36
<== Row: 4, 王二小, Eli, 1, 1, null, null, 2018-12-14 11:23:56
<== Row: 5, 王1, Eli, 1, 1, null, null, 2018-12-14 11:46:23
<== Row: 6, 王2, Eli, 1, 1, null, null, 2018-12-14 11:46:27
<== Row: 7, 王3, Eli, 1, 1, null, null, 2018-12-14 11:46:33
<== Row: 8, 王4, Eli, 1, 1, null, null, 2018-12-14 11:46:42
<== Row: 9, 王5, Eli, 1, 1, null, null, 2018-12-14 11:46:49
<== Total: 9
后来看了一下MP的官网,才发现需要配置分页插件=。=(本萌新不知道啊)。添加配置类:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* MyBatis-Plus配置类
* @author Eli
* @date 2018/12/14
*/
@EnableTransactionManagement
@Configuration
@MapperScan("com.eli.etool.dao")
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
重新run一遍,发现结果正常。
{
"code": 0,
"msg": "查询成功",
"data": {
"records": [
{
"id": 4,
"username": "王二小",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:23:56.000+0000"
},
{
"id": 5,
"username": "王1",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:23.000+0000"
},
{
"id": 6,
"username": "王2",
"nickname": "Eli",
"password": "1",
"enabled": true,
"email": null,
"avatar": null,
"regTime": "2018-12-14T17:46:27.000+0000"
}
],
"total": 9,
"size": 3,
"current": 2,
"searchCount": true,
"pages": 3
}
}
JsqlParserCountOptimize sql=SELECT id,username,nickname,password,enabled,email,avatar,regTime FROM user
==> Preparing: SELECT COUNT(1) FROM user
==> Parameters:
<== Columns: COUNT(1)
<== Row: 9
==> Preparing: SELECT id,username,nickname,password,enabled,email,avatar,regTime FROM user LIMIT ?,?
==> Parameters: 3(Long), 3(Long)
<== Columns: id, username, nickname, password, enabled, email, avatar, regTime
<== Row: 4, 王二小, Eli, 1, 1, null, null, 2018-12-14 11:23:56
<== Row: 5, 王1, Eli, 1, 1, null, null, 2018-12-14 11:46:23
<== Row: 6, 王2, Eli, 1, 1, null, null, 2018-12-14 11:46:27
<== Total: 3
这里也可以看到实际上使用了MySql的LIMIT。