Mybatis和SpringMVC拦截器区别

在 Spring Boot 中,PaginationInterceptor 是 MyBatis-Plus 的分页插件拦截器,用于自动处理分页逻辑。它的配置方式与 Spring MVC 的 HandlerInterceptor(处理 HTTP 请求的拦截器)不同,需通过 MyBatis 的插件机制 注册,而非添加到 Web 配置中。以下是具体配置步骤:

  1. 正确配置 PaginationInterceptor

步骤 1:创建 MyBatis-Plus 配置类

在 Spring Boot 项目中创建一个配置类,通过 @Configuration 注解标记,并在其中定义 PaginationInterceptor 的 Bean。

java
复制

import com.baomidou.mybatisplus.annotation.DbType;
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() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件
        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
        paginationInterceptor.setDbType(DbType.MYSQL); // 根据数据库类型设置
        paginationInterceptor.setOverflow(true);       // 溢出时允许跳转首页
        interceptor.addInnerInterceptor(paginationInterceptor);
        return interceptor;
    }
}

说明

MyBatis-Plus 从 3.4.0 版本开始,推荐使用 MybatisPlusInterceptor 统一管理插件。
PaginationInnerInterceptor 是分页插件的核心实现类,需添加到拦截器链中。
2. 常见误区:与 Spring MVC 拦截器的区别

PaginationInterceptor 的本质

MyBatis 插件:作用于 SQL 执行层面,用于分页逻辑处理(如自动拼接 LIMIT 语句)。
配置位置:需注册到 MyBatis 的插件链 中,而非 Spring MVC 的拦截器链。
Spring MVC 的 HandlerInterceptor

HTTP 请求拦截器:用于拦截 Controller 层的请求(如日志、权限校验)。
配置方式:通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法添加。
错误示例:将分页插件添加到 Web 配置

以下代码是错误的,会导致分页功能失效:

java
复制

@Configuration
public class WebConfig implements WebMvcConfigurer {
    // ❌ 错误!PaginationInterceptor 不是 HTTP 拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new PaginationInterceptor());
    }
}
  1. 验证分页插件是否生效

测试代码

在 Controller 中调用分页查询:

java
复制

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/users")
    public Page<User> getUsers(@RequestParam(defaultValue = "1") int page, 
                               @RequestParam(defaultValue = "10") int size) {
        Page<User> pageParam = new Page<>(page, size);
        return userMapper.selectPage(pageParam, null);
    }
}

预期效果

请求 /users?page=2&size=5 时,SQL 自动拼接 LIMIT 5 OFFSET 5。
返回的 Page 对象包含分页数据及总记录数。
4. 扩展:其他 MyBatis-Plus 插件配置

如果需要添加其他插件(如乐观锁、动态表名),只需在 MybatisPlusInterceptor 中继续追加:

java
复制

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    // 分页插件
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    // 乐观锁插件(需实体类字段标记 @Version)
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}
  1. 总结

正确配置位置:PaginationInterceptor 应通过 MybatisPlusInterceptor 注册到 MyBatis 插件链。
与 Spring MVC 拦截器的区别:MyBatis 插件作用于 SQL 执行过程,而 HandlerInterceptor 作用于 HTTP 请求生命周期。
避免混淆:两者属于不同层次(ORM 层 vs. Web 层),配置方式不可混用。
通过上述步骤,分页功能将正常生效,无需涉及 Web 配置中的 WebMvcConfigurer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值