分页实现
- 前端基于
element
封装的分页组件 pagination(opens new window) - 后端基于
mybatis
的轻量级分页插件pageHelper(opens new window)
#前端调用实现
1、前端定义分页流程
#后台逻辑实现
@PostMapping("/list") //定义/list接口,用于查询出列表 @ResponseBody //返回非页面数据 public TableDataInfo list(User user) //TableDataInfo 可以理解为分页后的数据结构,user用于条件查询
{ startPage(); // 此方法配合前端完成自动分页,前端会发送当前页和页面大小,这里会保存该数据, List<User> list = userService.selectUserList(user); //要分页的list return getDataTable(list);//将list分页 }
常见坑点1:selectPostById莫名其妙的分页。例如下面这段代码
startPage();
List<User> list;
if(user != null){
list = userService.selectUserList(user);
} else {
list = new ArrayList<User>();
}
Post post = postService.selectPostById(1L);
return getDataTable(list);
原因分析:这种情况下由于user存在null的情况,就会导致pageHelper生产了一个分页参数,但是没有被消费,这个参数就会一直保留在这个线程上。 当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。
上面这个代码,应该写成下面这个样子才能保证安全。
List<User> list;
if(user != null){
startPage();
list = userService.selectUserList(user);
} else {
list = new ArrayList<User>();
}
Post post = postService.selectPostById(1L);
return getDataTable(list);
常见坑点2:添加了startPage方法。也没有正常分页。例如下面这段代码
startPage();
Post post = postService.selectPostById(1L);
List<User> list = userService.selectUserList(user);
return getDataTable(list);
原因分析:只对该语句以后的第一个查询(Select)语句得到的数据进行分页。
上面这个代码,应该写成下面这个样子才能正常分页。
Post post = postService.selectPostById(1L);
startPage();
List<User> list = userService.selectUserList(user);
return getDataTable(list);
注意
如果改为其他数据库需修改配置application.yml文件中的属性helperDialect=你的数据库
标签:vue,java,分页,list,---,startPage,user,return,selectUserList From: https://www.cnblogs.com/GKLBB/p/17500450.html