package com.bc.exam.config; import com.bc.exam.aspect.mybatis.QueryInterceptor; import com.bc.exam.aspect.mybatis.UpdateInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * MyBatis框架全局配置类 *
* 负责配置MyBatis的核心组件: * 1. 通过@MapperScan注解自动扫描指定包路径下的Mapper接口,避免逐个注册 * 2. 注册查询拦截器(QueryInterceptor),用于自动填充通用查询条件(如用户ID过滤) * 3. 注册更新拦截器(UpdateInterceptor),用于自动填充createTime和updateTime字段 *
*注意:拦截器的注册顺序很重要,QueryInterceptor继承自分页拦截器,需要优先注册以保证分页逻辑正常执行。
* * @Description 描述:Mybatis过滤器配置 注意:必须按顺序进行配置,否则容易出现业务异常 * @Author A贾宇婷034244310 * @Date 20260616 */ @Configuration @MapperScan("com.bc.exam.modules.**.mapper") // 自动扫描所有模块下的mapper包,注册为MyBatis Mapper接口 public class MybatisConfig { /** * 注册数据查询拦截器 ** 该拦截器继承自MyBatis-Plus的分页拦截器(PaginationInterceptor), * 同时扩展了自定义的查询条件自动填充功能(如将SQL中的{{userId}}占位符替换为当前登录用户ID)。 * limit设置为-1表示默认不限制查询条数,由业务层自行控制分页。 *
* @return 配置完成的查询拦截器实例 */ @Bean public QueryInterceptor queryInterceptor() { QueryInterceptor query = new QueryInterceptor(); // 设置默认查询条数限制为-1(不限制),实际分页由业务层Page对象控制 query.setLimit(-1L); return query; } /** * 注册数据更新拦截器 ** 拦截所有INSERT和UPDATE操作,自动为实体对象的createTime和updateTime字段赋值。 * INSERT时同时设置createTime和updateTime,UPDATE时仅设置updateTime。 *
* @return 配置完成的更新拦截器实例 */ @Bean public UpdateInterceptor updateInterceptor() { return new UpdateInterceptor(); } }