多模块开发基于ssm的商城系统04

注:这是根据老师上课的内容做的课程项目笔记,项目资源是老师发的,不是本人的项目资源
上个博客完成了所有商品类型的查找,最后展示的页面是所有商品类型展示在同一个页面中。但是当商品类型多到一页放不下时就会出现问题,这个时候需要对数据库中查询的数据进行分页。
在线商城系统04——列表分页

分页查询:查询数据,限制一页上出现数据的条数

select * from t_product_type limit 1,3;

使用limit实现分页查询
limit 开始索引,显示的条数
列表分页其实就是在原来查询的基础上拼接一个这样的分页条件,分页的条件可以是自己设定的也可以是默认的。

导入支持分页的jar包

想要实现列表分页要导入分页的依赖,因为分页是与数据相关的,所以在dao模块中导入最为合适,web模块中导入了service模块的依赖,service中导入了dao的依赖,因此在web模块中可以使用分页。
在这里插入图片描述
要使用分页就要在配置文件spring-dao.xml中添加分页查询的插件:
通用分页拦截器可以对多种数据库语言进行拦截,每种数据库语言都有方言,这里用的是MySQL数据库,所以要指定MySQL数据库的方言
在这里插入图片描述

修改service模块代码实现分页

未添加分页时,查询所有商品类型的语句是这样的:
在这里插入图片描述
现在要对这个方法进行几点修改:

  1. 添加参数“开始页”和“每页展示的数据条数”
    findAll(Integer page,Integer pageSize);
    page:当前页,pageSize:每页显示的数据条数
  2. 返回值改为PageInfo类型的,因为PageInto包装类里面有许多封装好的方法,用起来很方便,比如查看页头页尾等方法,PageInfo中也包含了List,功能比List强大很多。这样返回的不仅仅就只有数据列表,还有其他的信息
    在这里插入图片描述
  3. 注意:因为在dao配置文件中添加了分页拦截,PageHelper作为拦截的条件,会拦截从PageHelper调用dao方法之间的所有语句,所以PageHelper和调用语句要写在一起
    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
    @Override
    public PageInfo<ProductType> findAll(Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);
        List<ProductType> productTypes = productTypeDao.selectAll();
        PageInfo<ProductType> pageInfo = new PageInfo<>(productTypes);
        return pageInfo;
    }

修改Controller层代码

controller层调用service层的方法,service模块中查询所有商品类型的方法中设置了两个参数,当前页数和页大小,页大小可以写一个固定的数,当前页数如果前端没有指定就默认显示第一页,如果指定了就显示指定的页数。
在公共模块中创建存放常量的包,定义一个专门存放常量的类,定义两个常量:
在这里插入图片描述
修改controller中的productTypeController类:

 @RequestMapping("/findAll")
    public String manage( Integer page,Model model) {
        //如果没有传入当前页的参数,就取默认值
        if (ObjectUtils.isEmpty(page)) {
            page = Constant.PAGE_NUM;
        }
        PageInfo<ProductType> pageInfo = productTypeService.findAll(page,Constant.PAGE_SIZE );
        model.addAttribute("data", pageInfo);
        return "productTypeManager";
    }

注意:返回的是一个pageInfo对象,不是查询结果list,在前端获取的时候要获取pageInfo中的list数据
在这里插入图片描述
运行结果:
在这里插入图片描述

在这里插入图片描述
这样写的弊端是每次都要在网址上加上参数page,过于繁琐,可以在页面上添加分页栏
使用bootstrap-pageinator插件分页:

  1. 创建分页栏存放的ul
    要添加在放数据的table下面在这里插入图片描述

  2. 在productTypeManage页面加上bootstrap-pageinator的js
    在这里插入图片描述

  3. 重写bootstrap-paginator.js中的方法bootstrapPaginator,使点击的时候就开始调用该方法
    在这个方法中加入几个我们需要的参数:指定版本号、总页数、当前页、返回访问路径和分页栏格式等

<script src="${pageContext.request.contextPath}/js/bootstrap-paginator.js"></script>
    <script>
        $(function () {
            $('#pagination').bootstrapPaginator({
                //版本
                bootstrapMajorVersion: 3,
                //当前页
                currentPage: ${data.pageNum},
                //总页数
                totalPages: ${data.pages},
                //点击分页栏返回的请求路径(带参数)
                pageUrl: function (type, page, current) {
                    return '${pageContext.request.contextPath}/backend/productType/findAll?page='+page;
                },
                //分页栏的首页、尾页、下一页、上一页
                itemTexts: function (type, page, current) {
                    switch (type) {
                        case "first":
                            return "首页";
                        case "prev":
                            return "上一页";
                        case "next":
                            return "下一页";
                        case "last":
                            return "尾页";
                        case "page":
                            return page;
                    }
                }
            })

        });
    </script>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值