Mybatis中遇到的一个bug

本文介绍了一个在使用IDEA进行MyBatis开发时遇到的问题:使用特定类型的注释会导致where和trim标签失效。文章详细解释了问题出现的原因及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyn

在使用where和trim标签时,发现他们并不能达到自己的作用来清除对应多余的and和or。
错误原因:我一直都使用的是idea,而导致的原因是因为,idea在where和trim标签内部使用注释快捷键加注释,其使用的是/*666*/而不是<!--666-->,若在内部使用前者注释符会导致where和trim标签失效,而使用后者则没有问题。

### 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 使用过程中的障碍及其对应处理办法。希望这些经验能够帮助广大开发者快速定位并排除故障!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值