Java手写PageBean实现分页
手写PageBean分页对象
提示:
本次测试使用环境为:SpringBoot +Mybatis Plus Mysql,如使用纯servlet可自行修改代逻辑。
思路:
需要创建个PageBean泛型对象进行存储分页数据。
查询总页数
查询分页数据,并封装分页对象数据
返回分页数据
步骤:
Controller接收才当前页参数和取多少条参数
调用Service处理数据
Dao获取并返回PageBean分页数据对象
1. PageBean泛型对象
把需要用到的属性进行封装,T泛型为可传入任意对象。
/**
* PageBean 分页工具对象
*
* @param 数据类型
*/
public class PageBean<T> {
private Integer totalPage;//总页码
private Integer totalCount;//总记录数
private Integer currentPage; //当前页码
private Integer pageSize; //每页显示的记录数
private List list; //每页的数据List集合
}
返回个给页面的参数对象就是该PageBean对象,包含分页数据。
2. Controlle层
此处直接调用Dao层,不写Service,有需要可自己写。
/**
* controller层
* 返回json数据
*
* @Author 黄柏茗
* @Date 2021-11-14
*/
@RestController
@RequestMapping("/test")
public class TestController {
//注入Dao层
@Autowired
private UserDao userDao;
/**
* 获取分页数据
*
* @param currentPage 当前页
* @param pageSize 获取多少条
* @return
*/
@GetMapping("/getPagingData")
public PageBean getPagingData(Integer currentPage, Integer pageSize) {
System.err.println("当前页:" + currentPage + ",获取" + pageSize + "条数据");
return userDao.getPaging(currentPage, pageSize);
}
}
3. Service层
本文不写service层,按需自写。
4. Dao数据访问层
获取分页数据关键部分在此处,注意看步骤就行。
/**
* Dao层
*
* @Author 黄柏茗
* @Date 2021-11-14
*/
@Repository
public class UserDao {
//注入mapper
@Autowired
private UserMapper userMapper;
/**
* 获取总记录条数
*
* @return 总记录条数
*/
public Integer getTotalCount() {
QueryWrapper wrapper = new QueryWrapper<>();
//获取总记录条数
Integer count = userMapper.selectCount(wrapper);
return count;
}
/**
* 获取分页数据
*
* @param currentPage 当前页
* @param pageSize 显示条数
* @return
*/
public PageBean getPaging(Integer currentPage, Integer pageSize) {
//1.创建空PageBean对象
PageBean pageBean = new PageBean<>();
//2.查询总记录数
Integer totalCount = getTotalCount();
//3.计算总页数
//总记录数量/每页数量=总页数
double total = (double)totalCount / pageSize;
//向上取整 如23/10=2.3 取整为3页
total = Math.ceil(total);
//4.设置从哪开始获取数据
Integer start = (currentPage - 1) * pageSize;
//5.获取分页数据列表
List list = userMapper.getPagingMapper(start, pageSize);
//要返回的数据
pageBean.setTotalCount(totalCount);//总记录数
pageBean.setCurrentPage(currentPage);//当前页
pageBean.setPageSize(pageSize);//取多少条数据
pageBean.setTotalPage((int) total);//总页数
pageBean.setList(list);//分页数据
//6.返回PageBean分页对象
return pageBean;
}
}
5. Mapper层
操作数据库,使用的是Mybats Plus,如不是Mybatis可忽略mapper,在Dao层直接获取数据,在此为了方便获取数据,使用MP进行测试。
/**
* Mapper层
* 使用的 Mybatis Plus
* @Author 黄柏茗
* @Date 2021-11-14
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 获取分页数据列表
*
* @param start 开始位置
* @param pageSize 获取条数
* @return
*/
@Select("select * from tb_User limit ${start},${pageSize}")
public List getPagingMapper(@Param("start") Integer start, @Param("pageSize") Integer pageSize) ;
}
注意:此处传入的 start 和 pageSize 参数在表字段中是没有的,在mybatis中需要使用 @Param("start") 标注,才可正常传入数据,如果不是mybatis,则可以不使用。
测试:
页面数据展示:
页面数据渲染在此不做测试,可自行获取到数据进行渲染。
总结:
核心部分在Dao,注意看嗷,分页功能已实现,开熏。
评论