【简介】: 分页查询则是在页面上将本来很多的数据分段显不,每页显示用户自定义的行数,同时减少一次性加载,内存溢出风险。
【简介】: 一次性查询所有数据存入内存,翻页从内存中获取数据。
【优点】: 实现简单,性能高。
【缺点】: 一旦数据量过大,会造成内存泄漏。
【介绍】: 每次翻页都是从数据库中查询数据。
【优点】: 不容易造成内存溢出。
【缺点】: 实现复杂,性能相对较低。

SELECT cOUNT(*)FROM表名[WHERE条件]
# 第一个?:从哪一个索引的数据开始查询(默认从O开始)
# 第二个 ?:查询多少条数据
SELECT *FROM表名[WHERE条件]LIMIT ?,?
int totalPage = rows % pagesize == 0 ? rows / pagesize : rows / pagesize + 1;
//优先计算
int prevPage = currentPage - 1 >= 1 ? currentPage - 1 : 1;
int nextPage = currentPage + 1 <= tota7Page ? currentPage + 1 : totalPage;

package cn.simplelife.results;
/**
* @ClassName PageResult
* @Description
* @Author simplelife
* @Date 2022/11/1 9:13
* @Version 1.0
*/
import lombok.*;
import java.util.ArrayList;
import java.util.List;
/**
* 用来封装分页的结果数据
*/
@Getter
@Setter
public class PageResult {
private int currentPage;// 当前页
private int pageSize; // 每页要显示的条数
private List data; // 当前页的数据
private int totalCount; // 总条数
private int totalPage; // 总页数
private int prevPage; // 上一页
private int nextPage; // 下一页
public PageResult(int currentPage, int pageSize, List data, int totalCount) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.data = data;
this.totalCount = totalCount;
// 计算上一页 总条数、下一页、
this.prevPage = currentPage - 1 >= 1 ? currentPage - 1 : 1;
this.totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
this.nextPage = currentPage + 1 <= this.totalPage ? currentPage + 1 : this.totalPage;
}
/**
* 表中没有数据的时候
* @param currentPage 当前页
* @param pageSize 页面大小
*/
public PageResult(int currentPage, int pageSize) {
this(currentPage, pageSize, new ArrayList(), 0);
}
}
package cn.simplelife.query;
import lombok.*;
/**
* @ClassName QueryObject
* @Description
* @Author simplelife
* @Date 2022/11/1 9:38
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
public class QueryObject {
private int currentPage = 1;// 当前页 需要默认值
private int pageSize = 3; // 每页要显示的条数 需要默认值
public int getBeginIndex() {
return (currentPage - 1) * pageSize;
}
}
/**
* 根据条件查询当前页数据
*
* @param queryObject 查询对象条件
* @return 返回满足条件的数据集合
*/
List<Product> selectForList(QueryObject queryObject);
/**
* 查询满足条件的总数
*
* @return 返回数据的总条数
*/
int selectForCount(QueryObject queryObject);
@Override
public List<Product> selectForList(QueryObject queryObject) {
SqlSession sqlSession = MyBatisUtils.openSession();
List<Product> list = sqlSession.selectList("cn.simplelife.dao.IProductDAO.selectForList",queryObject);
sqlSession.commit();
sqlSession.close();
return list;
}
@Override
public int selectForCount(QueryObject queryObject) {
SqlSession sqlSession = MyBatisUtils.openSession();
int totalCount = sqlSession.selectOne("cn.simplelife.dao.IProductDAO.selectForCount",queryObject);
sqlSession.commit();
sqlSession.close();
return totalCount;
}
<select id="selectForList" resultType="cn.simplelife.domain.Product">
SELECT *
FROM product
LIMIT #{beginIndex},#{pageSize}
</select>
<select id="selectForCount" resultType="int">
SELECT COUNT(*)
FROM product
</select>
【备注】: 业务层和表现层的实现这里不做演示。