Java分页(mybatis)

        分页:

                对于数据过多时页面不能完全展示,并且进行分页可以更加直观的了解到有多少条数据,等等

        需要参数:

                currentPage:当前页码

                currentPageSize:当前页显示的条数

        分页的核心:select * from 表 where 分页字段 limit 参数1,参数2

        参数1怎么获取?

                在分页的时候,前端会传过来两个参数,一个就是当前页,一个是当前页的显示条数。也就是这两个条件是已知的。看图:

         可以得出:我们的参数1的公式就得的出来了,也就是可以确定两个参数。

        那么怎么书写它的实体类?

                在类的封装中,我们为了数据的安全会使用private修饰,并且提供set和get方法。那么我们就可以吧第一个参数定义出来,通过get方法,对前端传输过的数据进行修改,从而得到我们的值(return (this.currentPage-1)*this.pageSize;),就可以进行操作了。

代码示例

package com.wzk.pojo;

/**
 * @author wzk
 * @date 2023/9/1
 **/
public class Page {
    private Integer currentPage;  //当前页码(limit的第二个参数)
    private Integer pageSize;     //当前页条数
    private Integer startIndex;   //limit的第一个参数

    public Page() {
    }

    public Page(Integer currentPage, Integer pageSize, Integer startIndex) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.startIndex = startIndex;
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getStartIndex() {
        //当前页-1乘上当前显示的条数
        return (this.currentPage-1)*this.pageSize;
    }

    public void setStartIndex(Integer startIndex) {
        this.startIndex = startIndex;
    }
}

        使用mybatis进行测试

                


/**
 * @author Administrator
 * @date 2023/9/1
 **/
public interface UserMapper {
    //分页查询
    @Select("select * from user limit #{startIndex},#{pageSize}")
    List<User> selectUserPage(Page page);
}

        测试类

   @Test
    public void test06(){
        SqlSession session = DBUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        Page page = new Page();
        page.setCurrentPage(1);   //当前页码
        page.setPageSize(2);      //页面显示条数
        List<User> integer = mapper.selectUserPage(page);
        System.out.println(integer);
        session.close();
    }

使用jdbc实现分页

        实体类

        

package com.wzk.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

//分页工具类
@NoArgsConstructor
@AllArgsConstructor
@Setter  //提供set方法(没有使用@data的原因:工具类用于分页,需要使用get方法进行计算第一个limit的值)
public class PageInfo<T>{  //使用泛型
    //以知的,前端传输过来的
    private Integer currentSize;   // 页面条数(第二个参数值)
    //以知的,前端传输过来的
    private Integer currentPage;   //当前页
    //通过起那面两个参数计算出来的limit的第一个数
    private Integer firstNum;      //第一个limit参数值
    //数据库查询出来的总条数
    private Integer total;         //数据总条数
    //数据库查询出来的分页后的数据
    private List<T> records;


    public Integer getCurrentSize() {
        return currentSize;
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    //获取limit的第一个数,进行计算
    public Integer getFirstNum() {
        return (currentPage-1)*currentSize;  //(当前页-1)* 当前页面显示的条数
    }

    public Integer getTotal() {
        return total;
    }

    public List<T> getRecords() {
        return records;
    }
}

    JDBC连接数据库代码实现分页

        

public List<ItemInfo> selectAllByPage(Integer firstNum, Integer currentSize,String name) {
        try {
            //获取连接
            con = JDBCUtil.getCon();
            String sql = "select * from item_info where name like \"%\"?\"%\" limit ?,?";
            ps = con.prepareStatement(sql);
            //传值给sql对象
            ps.setString(1,name);
            ps.setInt(2,firstNum);
            ps.setInt(3,currentSize);
            rs = ps.executeQuery();
            //
            ArrayList<ItemInfo> itemInfos = new ArrayList<ItemInfo>();
            while (rs.next()){
                //创建对象存储数据
                ItemInfo itemInfo = new ItemInfo();
                //设置对象的值
                itemInfo.setItemId(rs.getInt("item_id"));
                itemInfo.setName(rs.getString("name"));
                itemInfo.setIconPath(rs.getString("icon_path"));
                itemInfo.setPlainText(rs.getString("plain_text"));
                itemInfo.setPrice(rs.getInt("price"));
                itemInfo.setSell(rs.getInt("sell"));
                //添加到集合中
                itemInfos.add(itemInfo);
            }
            return itemInfos;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            //关闭资源
            JDBCUtil.closeAll(rs,ps,con);
        }
        return null;
    }

        总结:

                1、对于分页可以根据需求自己修改代码,相对简单

                2、理清当前页码不是是limit的第一个参数

                3、核心就是数据库的查询操作,了解公式即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值