最近做的一个项目需要显示表格数据,当表格数据量逐渐多起来的时候,肯定需要进行分页给用户好的体验。因为数据量越来越大,考虑到性能问题以及用户体验,这里选择在后端进行分页处理,持久层框架用的mybatis,前端Vue.js组件库用的element-ui
1.先看一下最终想要达到的效果图
<!--分页查询-->
<select id="getAllTruckByPage" resultMap="BaseResultMap">
select * from truck
<if test="page!=null and size!=null">
limit #{page},#{size}
</if>
</select>
limit #{page},#{size} 查询的是从第page个记录开始,向后的size个记录。比如我这里有7条记录,每一页显示5条记录,当我查询第2页的记录时,应该查询的是从5开始(记录的index从0开始)的后面2条(size就是前端分页组件传来的每一页显示的记录条数)记录。所以这里的page不是真正意义上的page,page应该是limit需要跳过的记录数,因此要在service层对page进行处理。
public List<Truck> getAllTruckByPage(Integer page, Integer size) {
if (page != null && size != null){
page = (page - 1) * size;
}
return truckMapper.getAllTruckByPage(page,size);
}
3.controller
@GetMapping("/")
public RespPageBean getAllTruckByPage(Integer page, Integer size) {
RespPageBean respPageBean = new RespPageBean();
respPageBean.setData(truckService.getAllTruckByPage(page, size));
respPageBean.setTotal(truckService.getTotal());
return respPageBean;
}
4.为了更好的区分数据和记录数,这里将其放入RespPageBean,这样分页和记录总数都可以放在分页组件里面
public class RespPageBean {
private List<?> data;
private Long total;
//省略get,set方法
}
5.total的sql
<select id="getTotal" resultType="java.lang.Long">
select count(*) from truck
</select>