首页 > 其他分享 >springboot~mybatis-pagehelper原理与使用

springboot~mybatis-pagehelper原理与使用

时间:2024-07-19 10:52:55浏览次数:9  
标签:分页 spring pagehelper PageHelper SQL mybatis 查询 springboot

原理

PageHelper是一个用于MyBatis的分页插件,pagehelper-spring-boot-starter是其在Spring Boot中的集成组件。下面简要介绍PageHelper的分页原理:

PageHelper的分页原理

  1. 拦截器机制PageHelper通过MyBatis的拦截器机制实现分页功能。它会在SQL执行前拦截并修改SQL语句,添加分页相关的信息。

  2. ThreadLocal存储分页参数:在调用分页查询之前,会将分页参数(如页码、每页数量)存储在当前线程的ThreadLocal中,确保每次查询都能获取到正确的分页信息。

  3. 自动构建分页SQL:根据存储在ThreadLocal中的分页参数,在拦截器中自动构建带有分页逻辑的SQL语句,例如使用LIMITOFFSET来限制返回结果集。

  4. 执行分页查询:当执行带有分页参数的查询时,PageHelper会拦截该查询并根据分页参数重新构建SQL语句,然后执行查询操作。

  5. 封装分页结果:在查询完成后,PageHelper会将查询结果封装成包含分页信息的对象,方便在业务逻辑中使用。

PageHelper-Spring-Boot-Starter的集成原理

  1. 自动配置pagehelper-spring-boot-starter提供了自动配置类,可以根据配置文件中的属性自动配置PageHelper的相关参数,简化了在Spring Boot项目中集成PageHelper的步骤。

  2. 注入拦截器:在自动配置过程中,会向MyBatis的SqlSessionFactory中注入PageInterceptor,这个拦截器负责拦截SQL并处理分页逻辑。

  3. 配置参数:通过在application.propertiesapplication.yml中配置pagehelper相关属性,可以定制化地设置分页参数,如页码参数名、每页数量等。

总的来说,PageHelper通过拦截器机制、ThreadLocal存储分页参数以及自动构建分页SQL来实现对MyBatis的分页支持,而pagehelper-spring-boot-starter则在Spring Boot中简化了PageHelper的集成和配置过程。

实战

下面是一个简单的示例,演示如何在Spring Boot项目中使用pagehelper-spring-boot-starter来实现分页查询:

1. 添加依赖

首先,在pom.xml文件中添加pagehelper-spring-boot-starter的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>{version}</version>
</dependency>

2. 配置属性

application.propertiesapplication.yml中配置pagehelper相关属性,例如:

# PageHelper配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

3. 编写Mapper接口和XML文件

编写MyBatis的Mapper接口和对应的XML文件,定义分页查询的方法。

4. 在Service中调用分页查询

在Service类中调用分页查询方法,示例代码如下:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public PageInfo<User> findUsers(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<User> userList = userMapper.selectUsers();
        return new PageInfo<>(userList);
    }
}

5. Controller层调用Service进行分页查询

在Controller层调用Service中的方法进行分页查询,并返回分页结果给前端。示例代码如下:

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public PageInfo<User> getUsers(@RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
        return userService.findUsers(pageNum, pageSize);
    }
}

通过以上步骤,你就可以在Spring Boot项目中使用pagehelper-spring-boot-starter来实现分页查询功能。记得根据具体的业务需求和数据库类型配置相应的pagehelper属性。

标签:分页,spring,pagehelper,PageHelper,SQL,mybatis,查询,springboot
From: https://www.cnblogs.com/lori/p/18311038

相关文章

  • springboot+vue+mybatis销售评价系统+PPT+论文+讲解+售后
    随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,销售评价系统当然也不能排除在外。销售评价系统是以实际运用为开发背景,运用软件工程开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分......
  • 基于SpringBoot+Vue的短视频广告发布系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 【2024】springboot O2O生鲜食品订购
     博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大......
  • 【2024】springboot O2O生鲜食品订购
     博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大......
  • Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
    创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去创建TestController@RestController@RequestMapping("/test")publicclassTestController{    @GetMapping("/hello")    publicStringsayHelloJenkins(){        ret......
  • SpringBoot增加验证码
    一、加入验证码依赖包com.github.whvcseeasy-captcha1.6.2二、实现验证码控制层@GetMapping("/common/kaptcha")publicvoiddefaultKaptcha(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse)throwsException{httpServletRespo......
  • 基于springboot的小区物业管理系统
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SpringBoot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能物业人员管理:负责物业员工的信息录入、编辑、权限分......
  • 基于SpringBoot的宠物领养系统-07863(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对宠物领养系统......
  • SpringBoot增加管理后台登录拦截器验证用户登录
    一、增加拦截器@ComponentpublicclassAdminLoginInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecto)throwsException{StringrequestServletPath=request.getS......
  • springboot整合mqtt
    安装emqxhttps://blog.csdn.net/weixin_41542513/article/details/134328627springboot整合mqtt1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration&l......