Java自定义分页

该博客介绍了如何使用自定义的PageVo工具类在Controller、Service和Mapper层实现分页查询功能。PageVo包含总条数、数据列表、当前页数和每页大小等属性。在Service层中,根据前端传递的参数调整页码并计算总条数,然后通过Mapper查询数据,最后返回封装好的PageVo对象。Mapper层通过SQL查询语句实现动态条件的分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页VO工具类

  1. 根据自己的需求进行属性的修改
/**
 * @ClassName PageVo
 * @Description T0D0
 * @Author cc
 * @Date 2022/3/28 13:00
 * @Version 1.0
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageVo<T> {
    private Integer total;//总条数
    private List<T> dataList;//数据
    private Integer currentPage;//当前页数
    private Integer pageSize;//当前页面条数
}

Controller层

    @GetMapping("/page/search")
    public CommonResult search(@RequestParam(defaultValue = "1")Integer currentPage,
                             @RequestParam(defaultValue = "8") Integer pageSize,
                               @RequestParam(defaultValue = "") String keywords){
        PageVo<Spot> page = spotService.getPage(currentPage, pageSize,keywords);

        if(page!=null){
            return new CommonResult(SysContains.httpOk,"查询成功",page);
        }
        return new CommonResult(SysContains.queryFailed,"查询失败");
    }

Service层

 @Override
    public PageVo<Spot> getPage(Integer currentPage, Integer pageSize, String keywords) {
    //因为前端传过来的currentPage是从1开始,而数据库limit是从0开始,所以需要减一
        currentPage = currentPage - 1;
        Integer total = spotMapper.selectSpotCount();//根据自己需要,查询总条数
        List<Spot> dataList = spotMapper.getPage(currentPage, pageSize, keywords);
        PageVo<Spot> pageVo = new PageVo<>();
        pageVo.setTotal(total);//设置总条数
        pageVo.setDataList(dataList);//设置查询数据
        pageVo.setCurrentPage(currentPage + 1);//设置页面显示当前页,之前减了1,需要加上,反馈给前端
        pageVo.setPageSize(pageSize);//设置页面当前显示条数
        return pageVo;
    }

Mapper层

   <select id="getPage" resultType="com.cc.entity.Spot">
        select s.id,s.name,s.pic,s.introduction,s.duration,s.director,s.director_phone directorPhone,
        s.resource,s.address,s.created_time createdTime,s.remarks,s.is_hot isHot,s.created_user_id createdUserId from
        spot s
        <where>
            <if test="keywords !=null and keywords !=''">
                or `name` like '%' #{keywords} '%'
            </if>
            <if test="keywords !=null and keywords !=''">
                or `address` like '%' #{keywords} '%'
            </if>
        </where>
        limit #{currentPage},#{pageSize}
    </select>

    <select id="selectSpotCount" resultType="java.lang.Integer">
        select count(1) from spot
        <where>
            <if test="keywords!=null and keywords!=''">
                or address like '%' #{keywords} '%'
            </if>
            <if test="keywords!=null and keywords!=''">
               or `name` like '%' #{keywords} '%'
            </if>
        </where>
    </select>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CC_Waiting

我,大学未工作,感谢您的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值