PageHelper分页查询
Java猫
共 8939字,需浏览 18分钟
· 2021-04-25
SpringBoot使用PageHelper分页插件
使用mybatis进行分页查询
注意:
依赖:
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- SpringBoot/MyBatis使用PageHelper分页控件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
Controller控制器
/**
* Controller控制
*/
@RequestMapping("/book")
@RestController
public class BookController {
//注入业务层
@Autowired
private BookService bookService;
/**
* 获取分页数据
* @param pageNum 第几页
* @param pageSize 每页显示多少条
* @return 返回json数据
*/
@RequestMapping("/fenye/{pageNum}/{pageSize}")
@ResponseBody
public List<Book> fenye(@PathVariable("pageNum") int pageNum,@PathVariable("pageSize")int pageSize){
List<Book> list = bookService.getList(pageNum,pageSize);
return list;
}
}
使用RestFul风格进行数据访问。
Service业务层接口:
/**
* 分页查询
* @param pageNum 第几页
* @param pageSize 每页个数
* @return
*/
@Override
public List<Book> getList(int pageNum,int pageSize) {
//获取sqlSession对象
SqlSession session = sqlSessionFactory.openSession();
//获取mapper接口
BookDao mapper = session.getMapper(BookDao.class);
//分页数据处理 第几页 每页个数
PageHelper.startPage(2,5);
//执行分页查询
Page<Book> books = mapper.getList();
//返回List结果对象,而不是返回Page对象
List<Book> list = new ArrayList<>();
System.out.println("第几页:"+books.getPageNum());
System.out.println("每页数量:"+books.getPageSize());
System.out.println("总页数:"+books.getPages());
System.out.println("总记录数:"+books.getTotal());
for (Book book: books) {
System.out.println("查询结果:"+book);
list.add(book);
}
return list;
}
使用mapper接口进行数据查询,查询之前先进行分页处理。
业务接口实现的方法:
/**
* 业务层接口实现
*/
@Service
public class BookServiceImpl implements BookService {
//mybatis分页需要使用到sqlSession对象
@Autowired
private SqlSessionFactory sqlSessionFactory;
/**
* 分页查询
* @param pageNum 第几页
* @param pageSize 每页个数
* @return List集合
*/
@Override
public List<Book> getList(int pageNum,int pageSize) {
//获取sqlSession对象
SqlSession session = sqlSessionFactory.openSession();
//获取mapper接口
BookDao mapper = session.getMapper(BookDao.class);
//分页数据处理 第几页 每页个数
PageHelper.startPage(pageNum,pageSize);
//执行分页查询
Page<Book> books = mapper.getList();
//返回List结果对象,而不是返回Page对象
List<Book> list = new ArrayList<>();
System.out.println("第几页:"+books.getPageNum());
System.out.println("每页数量:"+books.getPageSize());
System.out.println("总页数:"+books.getPages());
System.out.println("总记录数:"+books.getTotal());
for (Book book: books) {
System.out.println("查询结果:"+book);
list.add(book);
}
return list;
}
}
Dao层接口:
/**
* 图书服务接口
*/
public interface BookService {
public Book findById(Book book);
public List<Book> findAll();
public Integer addBook(Book book);
//分页查询
public List<Book> getList(int pageNum,int pageSize);
}
mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace绑定mapper接口(重要!!!)-->
<mapper namespace="com.hbm.dao.BookDao">
<!--分页查询-->
<select id="getList" resultType="book">
select * from Book
</select>
</mapper>
测试结果:
提示:
本次测试环境为SpringBoot+mybatis。
总结:
注意一下流程就好了,Dao层的接口使用的是分页插件的Page对象,返回的数如果是List集合,可以在业务层取出来再返回给视图层。
评论
MySQL 模糊查询再也不用like+%了
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新项目正在酝酿中
小哈学Java
14387
Paimon 与 Spark 的集成(二):查询优化
Paimon Apache Paimon (incubating) 是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念,可以与 Flink / Spark / Trino 等诸多业...
HBase技术社区
0
一张图带你搞懂SQL四种关联查询
SQL中的各种关联查询对很多初学者来说可以说是一大难关,今天就通过下面一张图来理理四种常见的关联查询。 首先需要清楚的是两个表连接操作会得到一个新表,新表即包含了左表(连接操作左边的表)字段,也会包含右表...
码农有道公众号
0
别再用 offset 和 limit 分页了,性能太差!
来源:toutiao.com/i6860655404431442444 ChatGPT中文网站:https://aigc.cxyquan.com 1、OFFSET 和 LIMIT 有什么问题? 2、替代方案 旁白君:主要去理解 offset 为什么会在大数据量下的查询带来性能问题? 思考完后...
Java后端编程
0
一条查询SQL是如何执行的
作者:捡田螺的小男孩 前言 日常开发中,我们经常需要写查询SQL。但是,大家知道一条查询SQL在mysql内部是如何执行的嘛?比如这条简单的SQL: select * from test_db.user_info_tab where user_id =123; 我们知道在my...
llovebo
0
超过1000w条数据,MySQL查询越来越慢?四种方案帮你解决!
一般分页 在系统中需要进行分页操作时,我们通常会使用 LIMIT 加上偏移量的方式实现,语法格式如下。 SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 在有对应索引的情况下,这种方式一般效率还不错。但它存...
Java技术前线
0
得物面试:MySQL 深度分页如何优化?
JavaGuide 官方网站: javaguide.cn JavaGuide 官方星球 : JavaGuide知识星球 今天分享的是一位读者在去年秋招面试得物被提问的一个问题。 ps:这个数据库优化问题在面试中还是比较常见的, 阿里、腾讯、用友、京东...
JavaGuide
0