mybatis后端分页

最近做的一个项目需要显示表格数据,当表格数据量逐渐多起来的时候,肯定需要进行分页给用户好的体验。因为数据量越来越大,考虑到性能问题以及用户体验,这里选择在后端进行分页处理,持久层框架用的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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。