Mybatis分页插件PageHelper & Mybatis-Plus分页插件IPage

本文主要讲述了在从PageHelper3.3.2升级到3.4.3版本后,分页插件配置的变化,以及如何正确使用PageHelper和IPage插件,包括Pom文件依赖引入、拦截器配置和使用方法的更新说明。
摘要由CSDN通过智能技术生成

使用分页插件的时候,分页没有生效,查了一下后发现是自己忘记了配置拦截器;

并且比对原来的代码之后发现,版本更新后,拦截器的配置也有不同。(之前项目中使用的版本是3.3.2,现在使用的是3.4.3)

干脆写个博客,把使用pageHelper插件和使用IPage插件的问题记录一下。

目录

一、PageHelper插件

二、IPage插件

(一)pom文件中依赖引入

(二)拦截器配置

1.老版本

2.新版本

(三)使用

1.Mybatis-Plus内置方法

2.自定义sql


一、PageHelper插件

PageHelper是Mybatis提供的分页插件,语句如下:

Page page = PageHelper.startPage(pageNum, pageSize);
List<Object> list = mapper.selectList(...);
PageInfo pageInfo = page.toPageInfo();

PageHelper是将分页参数放在缓存中,在执行sql时会在sql最后拼接"limit ...",无论是使用Mybatis-Plus的构造器执行sql,还是自定义的sql语句,都无需修改语句及其返回类型,因此使用时非常简单。

但是,把参数放在缓存中会导致一定的问题,在其它无需拼接"limit ..."进行分页查询的sql后仍会拼接,导致查询结果不全,或者在本身已经书写了"limit ..."的sql语句后进行拼接导致报错,在多线程项目中使用有风险。

二、IPage插件

(一)pom文件中依赖引入

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>版本号</version>
        </dependency>

(二)拦截器配置

1.老版本

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求
        // 默认false 为false时 会返回空数据
        paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

}

2.新版本

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求
        // 默认false 为false时 会返回空数据
        paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setOptimizeJoin(true);

        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(paginationInterceptor);
        return mybatisPlusInterceptor;
    }
}

(三)使用

1.Mybatis-Plus内置方法

在服务层直接调用selectPage方法

Page<Object> page = new Page<>(pageNum, pageSize);
IPage<Object> objectPage = mapper.selectPage(page, new LambdaQueryWrapper<Object>.eq(Object::test, test));
List<Object> objectList = objectPage.getRecords();

2.自定义sql

(1)数据访问层

xml中写相应业务的sql,注意无需拼接limit

IPage<Object> selectPageByParam(Page<Object> page, String Param);

(2)服务层

Page<Object> page = new Page<>(pageNum, pageSize);
IPage<Object> objectPage = mapper.selectPageByParam(page,test);

如果在项目中,还有一个业务需要实现同样的查询条件,但是要返回所有结果,则在xml、mapper中应再写一个方法用于返回List<Object>。(使用IPage比PageHelper麻烦的点就在这里,相同的筛选条件,因为分页与不分页的区别,需要写两个方法区分开来)

spring boot整合mybatis-pluspagehelper分页插件是一种常见的开发方式,可以实现数据库的分页查询功能。下面是一个简单示例项目的源码,以供参考: 首先,需要在pom.xml文件中添加相关依赖: ```xml <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <!-- PageHelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> </dependencies> ``` 在application.properties(或application.yml)文件中配置数据库连接信息: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis-plus.configuration.map-underscore-to-camel-case=true ``` 创建一个简单的实体类User: ```java public class User { private Long id; private String username; private String password; // 省略getter和setter方法 } ``` 创建一个Mapper接口UserMapper: ```java @Mapper public interface UserMapper extends BaseMapper<User> { // 省略其他方法 List<User> getUsersByPage(Page<User> page, @Param("username") String username); } ``` 创建一个Service接口UserService以及其实现类UserServiceImpl: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUsersByPage(Page<User> page, String username) { return userMapper.getUsersByPage(page, username); } } ``` 在Controller中注入UserService,并进行分页查询操作: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public IPage<User> getUsers(@RequestParam(value = "page", defaultValue = "1") Integer pageNum, @RequestParam(value = "size", defaultValue = "10") Integer pageSize, @RequestParam(value = "username", required = false) String username) { Page<User> page = new Page<>(pageNum, pageSize); return userService.getUsersByPage(page, username); } } ``` 至此,就完成了spring boot整合mybatis-pluspagehelper分页插件的配置和使用。 请注意,这是一个简单示例项目,实际使用中可能需要根据需求进行适当调整和修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值