sprongboot分页实现:MyBaitsPageHelper分页+自定义类型分页+sql传入参数分页+mybatis分页拦截器底层实现

MyBatis分页插件:

引入pagehelp pom文件:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>

只需要一句编码即可实现分页:

    ResponseVo<List<ProductVo>> list(Integer categoryId,Integer pageNum,Integer pageSize){
        Set<Integer> categoryIdSet = new HashSet<>();
        if(categoryId!=null) {
            categoryService.findSubCategoryId(categoryId, categoryIdSet);
            categoryIdSet.add(categoryId);
        }
        //只需传入pageNum和pageSize即可完成分页
        PageHelper.startPage(pageNum,pageSize);

        List<ProductVo> productVos = productMapper.selectByCategoryIdSet(categoryIdSet);
        //构建分页返回完整信息
        PageInfo pageInfo = new PageInfo(productVos);  //查询的对象
        pageInfo.setList(productVos);  //返回的Vo对象
        return ResponseVo.successByCommonData(productVos);
    }

此分页插件原理是我们在执行配置中拦截器多执行了内容,分析了我们的sql语句,先执行了“select count(0) from 表明 where 判断条件”。查出一共多少条数据,在完成封装。

自定义分页结构体实现分页

实现分页实体类

@Data
@ApiModel("分页查询")
public class PageBean<T> {
    @ApiModelProperty("数据总数")
    private long total;
    @ApiModelProperty("当前页码")
    private int pageNum;
    @ApiModelProperty("总页数")
    private int pages;
    @ApiModelProperty("数据列表")
    private T result;
}

使用实例:

@Service
public class ScheduleItemService {

    @Autowired
    private MeetStatusRepository meetStatusRepository;

    //传入分页数据和pageNum,pageSize,自行计算实现分页
    private List queryPaging(List dataList, int pageNum, int pageSize) {
        List list = new ArrayList<>();
        if (dataList != null && dataList.size() > 0) {
            list = (List) dataList.stream().skip(pageSize * (pageNum - 1)).limit(pageSize).collect(Collectors.toList());
        }
        return list;
    }

    public PageBean<List<MeetStatusVO>> getMeetStatus(String meetStatus, int pageNum, int pageSize) {
        List<MeetStatusDTO> list = meetStatusRepository.getMeetStatus(meetStatus);
        List<MeetStatusVO> collect = list.stream().map(MeetStatusVO::new).collect(Collectors.toList());

        //封装PageBean结构体返回
        PageBean<List<MeetStatusVO>> pageBean = new PageBean<>();
        pageBean.setTotal(collect.size());
        pageBean.setPageNum(pageNum);
        pageBean.setPages(collect.size() % pageSize > 0 ? collect.size() / pageSize + 1 : collect.size() / pageSize);
        collect = queryPaging(collect, pageNum, pageSize);
        pageBean.setResult(collect);

        return pageBean;
    }
}

sql传入实现分页

    /**
     *通过sql语句进行分页
     */
    @Override
    public List<User> selectUserBySql(int currentPage, int pageSize) {
        Map<String,Object> map=new HashMap<>();
        int startCurrentPage=(currentPage-1)*pageSize;        //从第几个数据开始
        int count=selectCount();
        int totalPage=count/pageSize;                   //总页数
        if (currentPage>totalPage || currentPage<=0){
            return null;
        }else{
            map.put("currentPage",startCurrentPage);
            map.put("pageSize",pageSize);
            List<User> list = userMapper.selectBySql(map);
            return list;
        }
    }

 sql查询实现:

    @Select(select count(*) from user)
    int selectCount();    

    @Select("select * from user limit #{currentPage} , #{pageSize}")
    List<User> selectBySql(Map<String, Object> map);
Or:
    <select id="selectCount" resultType="integer">
    select count(*) from user
    </select>

    <select id="selectBySql" parameterType="map" resultType="com.hao.springboot.entity.User">
    select * from user limit #{currentPage} , #{pageSize}
    </select>

mybatis拦截器分页底层

(五)SpringBoot配置mybatis分页拦截器_lanhezhong的博客-CSDN博客_springboot分页拦截器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于MyBatis和动态数据源的结合,以及PageHelper分页失效的问题,我可以给你提供一些建议。 首先,确保你已经正确配置了动态数据源,并且能够正确切换数据源。你可以使用像Druid这样的连接池和AbstractRoutingDataSource来实现动态数据源的切换。 然后,确保你已经正确配置了PageHelper插件。在MyBatis的配置文件中,需要添加如下配置: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="your_dialect"/> </plugin> </plugins> ``` 其中,`your_dialect`需要替换为你正在使用的数据库方言,例如MySQL、Oracle等。 另外,如果你在使用PageHelper时,还使用了MyBatis的动态SQL(例如使用了`<if>`标签),请确保你在PageHelper插件的前面使用了`<script>`标签,例如: ```xml <select id="queryUsers" parameterType="map" resultMap="userResultMap"> <script> SELECT * FROM users WHERE 1=1 <if test="username != null and username != ''"> AND username = #{username} </if> </script> </select> ``` 最后,如果以上步骤都正确配置了,但仍然无法实现分页功能,你可以尝试以下解决方案: 1. 确保你的查询语句返回的结果是一个List类型的对象,而不是其他类型(如数组)。 2. 确保在调用分页查询方法时,传入了正确的参数(例如页码、每页条数等)。 3. 如果你在使用PageHelper插件之前已经使用了其他的拦截器插件,可能会导致PageHelper失效。尝试调整插件的顺序,将PageHelper插件放在前面。 4. 如果你在使用Spring Boot框架,可能需要在配置类上添加`@MapperScan`注解,以确保扫描到MyBatis的Mapper接口。 希望以上建议对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值