mybatis plus 常见bug
时间: 2025-05-23 19:23:59 浏览: 22
### MyBatis Plus 常见 Bug 及解决方案
#### 一、分页插件无法正常工作
当使用 Spring Boot 集成多数据源并结合 MyBatis-Plus 时,可能会遇到分页功能失效的情况。这是因为默认情况下 `MybatisSqlSessionFactoryBean` 的配置可能未正确加载 MyBatis-Plus 的 Mapper 接口。通过显式声明 `MybatisSqlSessionFactoryBean` 并设置其属性可以有效解决问题[^1]。
```java
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("com.example.entity");
return sessionFactory.getObject();
}
```
---
#### 二、逻辑删除字段冲突
如果项目中启用了全局逻辑删除配置,但在某些实体类上也定义了 `@TableLogic` 注解,则会出现优先级问题。具体表现为:MyBatis-Plus 会优先读取实体类上的注解配置,而忽略全局配置中的逻辑删除字段设定[^3]。
**解决方法**
确保实体类的 `@TableLogic` 注解与全局配置保持一致;或者移除实体类上的注解以统一采用全局配置。
```yaml
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: deleted
```
---
#### 三、自动填充功能异常
在实现自动填充功能时,开发者通常会在实体类中加入 `@TableField(fill = FieldFill.INSERT)` 或其他类似的注解来标记需要自动生成的时间戳或其他字段。然而,在实际运行过程中可能出现字段未能成功赋值的现象[^4]。
**原因分析**
1. 缺少对应的 MetaObjectHandler 实现类。
2. 自动注入机制未生效。
**修复方案**
编写一个继承自 `MetaObjectHandler` 的处理器,并注册到 Spring 容器中:
```java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
```
同时确认已开启自动填充支持:
```yaml
mybatis-plus:
global-config:
db-config:
field-strategy: NOT_EMPTY
```
---
#### 四、关联查询性能低下
对于复杂的业务场景,尤其是涉及多表联查的情况下,单纯依赖 SQL 映射可能导致效率下降甚至内存溢出等问题。此时可考虑引入第三方扩展工具如 **mybatis-plus-join** 来优化查询逻辑[^2]。
安装方式如下:
```xml
<dependency>
<groupId>cn.iocoder</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>最新版本号</version>
</dependency>
```
随后按照官方文档完成初始化操作即可显著提升执行速度。
---
#### 五、权限校验失败 (RuoYi 框架特有)
部分基于 RuoYi 开发的应用程序由于安全策略限制,默认关闭外部网络访问接口的功能。一旦尝试非法调用 API 就会产生类似于 “401 Unauthorized” 这样的错误提示信息[^5]。
**应对措施**
调整应用服务器防火墙规则允许特定 IP 地址范围内的连接请求;另外还需验证 Token 是否合法以及是否携带必要的 Header 参数头文件。
---
### 总结
以上列举了几种较为典型的 MyBatis-Plus 使用过程中的障碍及其对应处理办法。希望这些经验能够帮助广大开发者快速定位并排除故障!
阅读全文
相关推荐



















