美文网首页springboot
springboot实现MyBatis分页

springboot实现MyBatis分页

作者: 勇于自信 | 来源:发表于2021-01-20 17:27 被阅读0次

    1.在 pom.xml 文件中添加分页插件依赖包

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.5</version>
    </dependency>
    

    2.application.yml 配置文件中添加分页插件有关的配置

    pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql
    

    3.编写分页代码
    1)DAO层添加selectPage方法

    package com.zgjy.dao;
    
    import com.zgjy.entity.SysUser;
    import com.zgjy.entity.OrderInfo;
    import com.zgjy.entity.orderInfoExample;
    import java.util.List;
    import org.apache.ibatis.annotations.Param;
    
    public interface OrderInfoMapper {
        int countByExample(orderInfoExample example);
    
        int deleteByExample(orderInfoExample example);
    
        int insert(OrderInfo record);
    
        int insertSelective(OrderInfo record);
    
        List<OrderInfo> selectByExample(orderInfoExample example);
    
        int updateByExampleSelective(@Param("record") OrderInfo record, @Param("example") orderInfoExample example);
    
        int updateByExample(@Param("record") OrderInfo record, @Param("example") orderInfoExample example);
    
        /**
         * 查询全部订单
         * @return
         */
        List<OrderInfo> selectAll();
    
        /**
         * 分页查询订单
         * @return
         */
        List<OrderInfo> selectPage();
    }
    

    2)OrderInfoMapper.xml 中加入selectPage的实现

    <select id="selectPage"  resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from dwd_fact_order
      </select>
    

    3)服务层通过调用DAO层代码完成分页查询,这里统一封装分页查询的请求和结果类,从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会影响服务层以上的分页接口,起到了解耦的作用。

    package com.zgjy.service;
    
    import com.zgjy.entity.OrderInfo;
    import com.zgjy.util.PageRequest;
    import com.zgjy.util.PageResult;
    
    import java.util.List;
    
    public interface OrderInfoService {
    
        /**
         * 查找所有用户
         * @return
         */
        List<OrderInfo> findAll();
    
        /**
         * 分页查询接口
         * 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
         * 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会
         * 影响服务层以上的分页接口,起到了解耦的作用
         * @param pageRequest 自定义,统一分页查询请求
         * @return PageResult 自定义,统一分页查询结果
         */
        PageResult findPage(PageRequest pageRequest);
    }
    
    

    4)服务实现类通过调用分页插件完成最终的分页查询,关键代码是 PageHelper.startPage(pageNum, pageSize),将前台分页查询参数传入并拦截MyBtis执行实现分页效果。

    package com.zgjy.service.impl;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.zgjy.dao.OrderInfoMapper;
    import com.zgjy.entity.OrderInfo;
    import com.zgjy.entity.SysUser;
    import com.zgjy.service.OrderInfoService;
    import com.zgjy.util.PageRequest;
    import com.zgjy.util.PageResult;
    import com.zgjy.util.PageUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class OrderInfoServiceImpl implements OrderInfoService {
        @Autowired
        private OrderInfoMapper orderInfoMapper;
    
    
        @Override
        public List<OrderInfo> findAll() {
            return orderInfoMapper.selectAll();
        }
    
        @Override
        public PageResult findPage(PageRequest pageRequest) {
            return PageUtils.getPageResult(pageRequest,getPageInfo(pageRequest));
        }
    
        /**
         * 调用分页插件完成分页
         * @param pageRequest
         * @return
         */
        private PageInfo<?> getPageInfo(PageRequest pageRequest) {
            int pageNum = pageRequest.getPageNum();
            int pageSize = pageRequest.getPageSize();
            PageHelper.startPage(pageNum,pageSize);
            List<OrderInfo> sysMenus = orderInfoMapper.selectPage();
            return new PageInfo<>(sysMenus);
        }
    }
    
    

    5)在控制器SysUserController中添加分页查询方法,并调用服务层的分页查询方法。

    package com.zgjy.controller;
    
    import com.zgjy.service.OrderInfoService;
    import com.zgjy.util.PageRequest;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("order")
    public class OrderInfoController {
        @Autowired
        private OrderInfoService orderInfoService;
    
        @GetMapping(value = "findAll")
        public Object findAll(){
            return orderInfoService.findAll();
        }
    
        @PostMapping(value="/findPage")
        public Object findPage(@RequestBody PageRequest pageQuery) {
            return orderInfoService.findPage(pageQuery);
        }
    }
    
    

    分页查询请求封装类。
    PageRequest.java

    package com.zgjy.util;
    
    import lombok.Getter;
    import lombok.Setter;
    
    /**
     * 分页请求
     */
    @Setter
    @Getter
    public class PageRequest {
        /**
         * 当前页码
         */
        private int pageNum;
        /**
         * 每页数量
         */
        private int pageSize;
    }
    
    

    分页查询结果封装类。
    PageResult.java

    package com.zgjy.util;
    
    import lombok.Getter;
    import lombok.Setter;
    
    import java.util.List;
    
    @Setter
    @Getter
    public class PageResult {
        /**
         * 当前页码
         */
        private int pageNum;
        /**
         * 每页数量
         */
        private int pageSize;
        /**
         * 记录总数
         */
        private long totalSize;
        /**
         * 页码总数
         */
        private int totalPages;
    
        /**
         * 数据模型
         */
        private List<?> content;
    
    
    }
    
    

    分页查询相关工具类。
    PageUtils.java

    package com.zgjy.util;
    
    import com.github.pagehelper.PageInfo;
    
    public class PageUtils {
        /**
         * 将分页信息封装到统一的接口
         * @param pageRequest
         * @param pageInfo
         * @return
         */
        public static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo){
            PageResult pageResult = new PageResult();
            pageResult.setPageNum(pageInfo.getPageNum());
            pageResult.setPageSize(pageInfo.getPageSize());
            pageResult.setTotalSize(pageInfo.getTotal());
            pageResult.setTotalPages(pageInfo.getPages());
            pageResult.setContent(pageInfo.getList());
            return pageResult;
        }
    }
    
    

    4.启动应用,访问:localhost:8088/swagger-ui.html,找到对应接口,模拟测试,结果如下。


    参数:pageNum: 1, pageSize: 5

    相关文章

      网友评论

        本文标题:springboot实现MyBatis分页

        本文链接:https://www.haomeiwen.com/subject/ngqkzktx.html