mybatis plus分页插件配置

一、配置类上的注解

  • @Configuration:标记这是一个 Spring 配置类,相当于 XML 配置文件,会被 Spring 自动扫描并加载。
  • @EnableTransactionManagement:开启 Spring 的事务管理功能,允许使用 @Transactional 注解控制事务(如 @Transactional(rollbackFor = Exception.class))。

二、分页插件配置

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    // 创建 MyBatis-Plus 拦截器管理器
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    
    // 向管理器中添加分页插件(PaginationInnerInterceptor)
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    
    // 返回配置好的拦截器管理器
    return interceptor;
}

作用

  • 注册 MyBatis-Plus 的分页插件,让你可以通过简单的 API 实现分页查询,无需手动编写复杂的 SQL 分页语句(如 LIMITOFFSET)。
  • 分页插件会自动拦截 SQL 查询,根据传入的分页参数(页码、每页条数),自动生成分页 SQL。

三、使用方式示例

配置完成后,你可以在 Service 层这样使用分页功能:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    
    public IPage getUserPage(int pageNum, int pageSize) {
        // 创建分页对象(页码、每页条数)
        Page page = new Page<>(pageNum, pageSize);
        
        // 调用 mapper 方法,传入分页对象
        // 插件会自动生成分页 SQL(如 LIMIT ?, ?)
        return userMapper.selectPage(page, null);  // null 表示无查询条件
    }
}

四、注意事项

  1. 默认方言
    分页插件会根据数据库类型(如 MySQL、Oracle)自动选择合适的分页方言。如果使用特殊数据库,可能需要指定方言:

    // 指定数据库方言(例如 PostgreSQL)
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
    
  2. 性能优化
    对于大数据量分页,可配置 maxLimit 参数限制单次查询的最大条数,防止 OOM:

    PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
    paginationInterceptor.setMaxLimit(1000L);  // 限制每页最大 1000 条数据
    interceptor.addInnerInterceptor(paginationInterceptor);
    
  3. 事务支持
    @EnableTransactionManagement 配合 @Transactional 注解,可实现事务控制:

    @Transactional(rollbackFor = Exception.class)
    public void updateUser(User user) {
        // 业务逻辑,失败自动回滚
    }
    

作用:

  1. 简化分页查询:直接调用 selectPage() 方法,无需手动处理分页 SQL。
  2. 管理事务:使用 @Transactional 注解控制事务的提交和回滚。
  3. 提升开发效率:避免重复编写分页逻辑和事务模板代码。

你可能感兴趣的:(mybatis)