圆咕噜咕噜 发表于 2024-7-19 09:55:53

springboot~mybatis-pagehelper原理与使用

原理

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


[*]拦截器机制:PageHelper通过MyBatis的拦截器机制实现分页功能。它会在SQL实行前拦截并修改SQL语句,添加分页相关的信息。
[*]ThreadLocal存储分页参数:在调用分页查询之前,会将分页参数(如页码、每页数目)存储在当前线程的ThreadLocal中,确保每次查询都能获取到正确的分页信息。
[*]自动构建分页SQL:根据存储在ThreadLocal中的分页参数,在拦截器中自动构建带有分页逻辑的SQL语句,例如使用LIMIT和OFFSET来限制返回结果集。
[*]实行分页查询:当实行带有分页参数的查询时,PageHelper会拦截该查询并根据分页参数重新构建SQL语句,然后实行查询操作。
[*]封装分页结果:在查询完成后,PageHelper会将查询结果封装成包含分页信息的对象,方便在业务逻辑中使用。
PageHelper-Spring-Boot-Starter的集成原理


[*]自动设置:pagehelper-spring-boot-starter提供了自动设置类,可以根据设置文件中的属性自动设置PageHelper的相关参数,简化了在Spring Boot项目中集成PageHelper的步骤。
[*]注入拦截器:在自动设置过程中,会向MyBatis的SqlSessionFactory中注入PageInterceptor,这个拦截器负责拦截SQL并处理分页逻辑。
[*]设置参数:通过在application.properties或application.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.properties或application.yml中设置pagehelper相关属性,例如:
# PageHelper配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql3. 编写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属性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: springboot~mybatis-pagehelper原理与使用