学习记录-mybatis+vue+elementUi实现分页查询(后端部分)

这一部分的实现确实让我学到不少东西。不管是后端还是前端部分的实现。

  1. 首先需要明确的是,实现分页查询,我们需要从前端获取到几个参数?第一个是当前在第几页,第二个是每一页有多少个值。分别叫做:currentPage和pageSize。

  2. 其次,明确我们从后端拿到哪些数据给前端输出?第一个是当前页的数据内容,这个结果是一个集合;第二个是所有数据的总数,这个结果就是一个数字。

  3. 最后,怎么把它们封装成一个东西传给后端呢?答案是用对象来,新增一个pageBean对象,这个对象里面就装两个属性,一个集合,一个数字。接下来是实现部分。

后端的实现我分为4步来实现

步骤一 ①准备好PageBean

以后这里面就用来存储返回给前端的内容。


import java.util.List;

//分页查询的JavaBean
public class PageBean<T> {

    //总记录数
    private  int totalCount;

    //当前页数据
    private List<T> rows;

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public List<T> getRows() {
        return rows;
    }

    public void setRows(List<T> rows) {
        this.rows = rows;
    }


}

但是这里也有小细节需要注意。


那就是集合的类型。
在这里插入图片描述

集合需要传递什么类型呢?brand表用brand对象,user表用user对象,为了代码的复用性,这里干脆不设置类型,直接设置一个泛型,以后什么表就用什么类型。那当然,这里使用了泛型,类名的地方就需要有。
在这里插入图片描述

步骤二 ②写SQL代码

SQL就需要查询两个内容,第一个是当前页的数据,另一个是总数。总数好查,直接就一个方法count(*)就🆗,这个根据页面来进行查询确实在学习MySQL时忘了,其实就是:查询索引从1开始的5条数据。这种题改造过来的。

代码:

 /**
     * 分页查询
     * @param begin
     * @param size
     * @return
     */
    @Select("select * from tb_brand limit #{begin}, #{size}")
    @ResultMap("brandResultMap")
    List<Brand> selectByPage(@Param("begin") int begin, @Param("size")int size);

    /**
     * 查询总记录数
     * @return
     */
    @Select("select count(*) from tb_brand")
    int selectTotalCount();

SQL语句中主要就是limit这个关键字,一般用的少,所以没有记住。传进来一个起始值,和一个大小,返回这个区间的一个结果集合。

步骤三 ③service层代码

  1. 老规矩,还是接口这部分的内容。

这里写的代码还确实跟以前不一样,让我不看代码来回忆回忆。首先看返回的类型–PageBean对象,其次确定泛型的值,是brand类型。最后是需要传入的值,分析好几遍了就不分析了。下面是代码:

/**
     * 分页查询
     * @param currentPage 当前页码
     * @param pageSize  每页展示条数
     * @return
     */
    PageBean<Brand> selectByPage(int currentPage, int pageSize);
  1. 实现部分代码:
    这里和之前也是有许多需要注意的点,能确定的是最后我们返回的是一个pagebean对象,那挨个分析。
    ① 第一个是根据当前页和大小来获取一个集合结果,当前页是currentPage,这里需要计算一下,开始的索引是多少,我们要将开始的索引传给SQL,这里是计算方法:int begin = (currentPage -1) * pageSize;,索引的大小等于现在我们处于多少页减去一,再乘以这个页面的大小。比如说我们每一页展示5个数据,现在我们正处于第一页,那索引就是0,将0和5这两个数据传给SQL去执行,返回的就是第一到第五条数据。同理,假如我们现在每一页还是展示5个数据,现在处于第二页,那索引就是2减一再乘以5,等于5,那么我们需要传给SQL的就是,1和5这两个值。
    ② 第二个是查询有多少条数据,这个不需要任何参数,只单纯是一个查询。
    最后将结果进行封装和返回就可以了。
    代码:
@Override
   public PageBean<Brand> selectByPage(int currentPage, int pageSize) {

       SqlSession sqlSession = sqlSessionFactory.openSession();
       BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

       //计算开始索引
       int begin = (currentPage -1) * pageSize;
       //查询的条目数(总数)
       int size = pageSize;

       //查询当前页数据
       List<Brand> rows = mapper.selectByPage(begin, size);

       //查询总记录数
       int totalCount = mapper.selectTotalCount();

       //封装成PageBean对象
       PageBean<Brand> PageBean = new PageBean<>();
       PageBean.setRows(rows);
       PageBean.setTotalCount(totalCount);

       //释放资源
       sqlSession.close();

       return PageBean;
   }

步骤四 ④ servlet代码

这部分代码也是跟以前不一样。

  1. 首先就是,前端怎么把值穿过来?之前只传对象和值,现在怎么传递这个变动的值?我想的是传递一个数组到servlet,这个数组就负责告诉servlet我现在的pagesize以及目前处于的索引。但是跟着老师学是使用在url中进行传值 url?currentPage=1&pageSize=5,最后通过request,来取值。也是开拓了一个思路。

  2. 之后需要将取到的值转换成int类型的。最后调用方法,转json,还是以前的套路。就是返回的是pagebean对象以及将pagebean对象转为json对象,一下子还没有适应过来。

/**
     * 分页查询
     * @param request
     * @param response
     * @throws IOException
     */
    public void selectByPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
       //1.接收参数: 当前页码 和 每页分的条目数  url?currentPage=1&pageSize=5
        String _currentPage = request.getParameter("currentPage");
        String _pageSize = request.getParameter("pageSize");

        //转换成int类型的
        int currentPage = Integer.parseInt(_currentPage);
        int pageSize = Integer.parseInt(_pageSize);

        //调用service进行查询
        PageBean<Brand> pageBean = brandService.selectByPage(currentPage, pageSize);

        //2. 转为json
        String jsonString = JSON.toJSONString(pageBean);

        //3. 防止乱码以及写数据
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

总结

总的来说,这里更多的是开拓思路,分页查询的SQL、存储pageBean、泛型的使用、索引的计算、从前端通过request取值的思想这一切都感觉很新奇,但是这一切其实让我们去做都应该是在能力之内的事。还是,多进行学习,开拓思路。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值