分页实现
- 前端基于
element封装的分页组件 pagination(opens new window) - 后端基于
mybatis的轻量级分页插件pageHelper(opens new window)
#前端调用实现
前端
html:
// 页面添加分页组件,传入分页变量
<pagination
v-show="total>0" //整个分页组件中,通过 v-show 属性来判断是否展示分页组件,如果后端返回的总记录数 total 大于 0,就展示分页组件。
:total="total" //分页组件中,通过 total 属性来获取后端返回的总记录数,从而计算出总页数,并在分页中展示。:表示传递给组件的参数
:page.sync="queryParams.pageNum" //同样的,通过 :page.sync 和 :limit.sync 属性,来绑定当前页码和每页数据数量。这些属性是和组件内部的状态进行双向绑定的,当页码或每页数据数量发生变化时,组件内部会自动刷新。
:limit.sync="queryParams.pageSize"
@pagination="getList" //最后,通过 @pagination 属性,绑定一个自定义回调函数 getList,当用户点击分页组件中的页码时,将会调用该函数,来重新获取当前页码的数据。
/>
js:// 定义分页变量
queryParams: {
pageNum: 1,
pageSize: 10
},methods: {
getList(newPage) { // 定义 getList 函数
this.queryParams.pageNum = newPage; // 更新页码参数
listUser(this.queryParams).then(response => { // 调用接口获取数据
this.userList = response.rows;
this.total = response.total;
});
}// 调用后端api方法,传入参数 获取结果查询结构
listUser(this.queryParams).then(response => {
this.userList = response.rows; //这里面保存着响应的分页后的数据
this.total = response.total; //总数
}
);}
后台
@PostMapping("/list") //定义/list接口,用于查询出列表
@ResponseBody //返回非页面数据
public TableDataInfo list(User user) //TableDataInfo 可以理解为分页后的数据结构,user用于条件查询{
startPage(); // 此方法配合前端完成自动分页pagehelper,前端会发送当前页和页面大小,这里会保存该数据,
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生产了一个分页参数,但是没有被selectUserList执行时消费,这个参数就会一直保留在这个线程上。 当这个线程的参数再次被selectPostById错误的使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。因此分页函数startPage应该与要分页的list紧密结合
上面这个代码,应该写成下面这个样子才能保证安全。
List<User> list;
if(user != null){
startPage();
list = userService.selectUserList(user);
} else {
list = new ArrayList<User>();
}
Post post = postService.selectPostById(1L);
return getDataTable(list);
注意
如果改为其他数据库需修改配置application.yml文件中的属性helperDialect=你的数据库
















