Mybatis自定义数据库分页查询

该博客介绍了如何在后端使用Mybatis进行自定义数据库分页查询。首先创建了一个PageBean工具类来存储分页信息,接着在serviceImpl中实现了分页查询方法,通过mapper接口获取数据并进行封装。在mapper的XML文件中定义了分页查询和获取总数的SQL。最后,在接口层通过参数获取分页信息并返回给前端。前端使用Element UI的pagination组件展示分页结果。

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

Mybatis自定义数据库分页查询

后端部分

第一步:在util包下定义PageBean<T>工具类用于接受一个分页查询结果

import lombok.Data;

import java.util.List;

//数据库自定义分页查询的工具类

@Data
public class PageBean<T> {
    private int currPage;//当前页数
    private int pageSize;//每页的数据条数
    private int totalCount;//总记录数
    private int totalPage;//总页数
    private List<T> lists;//每页的显示的数据

    public PageBean() {
        super();
    }

    @Override
    public String toString() {
        return "PageBean{" +
                "currPage=" + currPage +
                ", pageSize=" + pageSize +
                ", totalCount=" + totalCount +
                ", totalPage=" + totalPage +
                ", lists=" + lists +
                '}';
    }
}

第二步具体业务实现serviceImpl

    /**
     * 分页查询短信历史纪录
     * @param currPage 第几页
     * @param pageSize 每页显示的条数
     * @return PageBean<Map<String,Object>> 这里我用map来接收数据库返回的信息,你也可以用你的实体类来接收PageBean<User>
     */
    @Resource
    private UserDaoMapper userDaoMapper; //这里改为你自己的mapper接口

    public PageBean<User> findAllUser(int currPage,int pageSize){
        HashMap<String, Object> map = new HashMap<>();//哈希集合存储不重复的数据
        PageBean<User> pageBean = new PageBean<>();
        //每页显示的数据条数
        pageBean.setPageSize(pageSize);
        //封装总记录数,获取总数
        int totalCount = userDaoMapper.getUserNumber();  //改为你自己的接口
        pageBean.setTotalCount(totalCount);
        //如果没有数据,直接返回
        if(totalCount==0){
            return pageBean;
        }
        //封装总页数
        double tc = totalCount;
        Double num = Math.ceil(tc / pageSize);//向上取整
        pageBean.setTotalPage(num.intValue());
        //传入的当前页小于1时则等于1,大于总页数则等于总页数也就是最后一页
        if(currPage<1) currPage=1;
        else if(currPage>pageBean.getTotalPage()) currPage = pageBean.getTotalPage();
        //封装当前页数
        pageBean.setCurrPage(currPage);
        map.put("start", (currPage - 1) * pageSize);
        map.put("size", pageBean.getPageSize());
        //封装每页显示的数据
        List<User> lists = userDaoMapper.findAllUser(map);  //改为你自己的接口
        for(User user:lists){
            user.setPassword("");
        }
        pageBean.setLists(lists);
        return pageBean;
    }

第三步:mapper的XML文件

<!--分页查找所有用户 这里我简单用了一个map来接收结果,也可以用你的实体类来接收 resultType="user"-->
    <select id="findAllUser" parameterType="Map" resultType="map">
        select *
        from users
        limit #{start},#{size}
    </select>
 
<!--获取用户的总数-->
    <select id="getUserNumber" resultType="int">
        select count(*)
        from users
    </select>

第四步:接口层

    /**
     * 获取历史记录
     * limit 每页显示多少条数据
     * page  第几页
     * @return
     */
    @GetMapping("/sms/getsmsloglist")
    public Result getSmslogList(@RequestParam("limit") Integer limit,@RequestParam("page") Integer page) {
        return userService.findAllUser(page,limit); //调用业务实现,返回结果根据你自己的返回结构封装
    }

前端部分

前端我用的element的table很简单,就贴个简单示例

<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
//totle : 数据总条数
//listQuery.page :第几页
//listQuery.limit : 每页显示几条数据
//@pagination="getList" : 获取后端数据列表的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值