分页:
对于数据过多时页面不能完全展示,并且进行分页可以更加直观的了解到有多少条数据,等等
需要参数:
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、核心就是数据库的查询操作,了解公式即可