mybatisplus 和 mybatis 冲突
时间: 2025-05-14 12:01:24 浏览: 20
### MyBatisPlus 与 MyBatis 共存配置及冲突解决方案
在实际项目开发过程中,可能会遇到需要同时使用 MyBatis 和 MyBatisPlus 的情况。这种情况下,如果未正确处理两者之间的关系,则可能导致诸如 `Invalid bound statement (not found)` 或者 BaseMapper 方法不可用等问题[^3]。
#### 解决方案概述
为了实现 MyBatis 和 MyBatisPlus 的共存并解决可能产生的冲突问题,可以采取以下措施:
1. **调整 SqlSessionFactory 实现类**
如果项目中已经存在 MyBatis 的原始实现方式,建议将默认的 `SqlSessionFactory` 替换为支持 MyBatisPlus 的自定义工厂类(如 `MybatisSqlSessionFactoryBean`)。这一步骤能够有效避免因两者的映射文件加载机制不同而导致的问题[^4]。
2. **分离 Mapper 文件命名空间**
确保 MyBatis 和 MyBatisPlus 使用不同的包路径来管理各自的 Mapper 接口及其对应的 XML 映射文件。通过这种方式可防止名称重复引发绑定错误。
3. **禁用自动扫描功能**
对于某些特定场景下可能出现的 Mapper 自动注册失败现象,可以通过关闭 Spring Boot 中针对 MyBatis 的全局扫描选项,并手动指定需加载的目标接口集合来进行规避。
4. **适配分页插件逻辑**
当前版本可能存在 PageHelper 和 MyBatisPlus 内置分页组件间的不兼容状况。对此推荐采用统一化的分页工具链设计思路——即选取其中一种作为主导方完成全部操作流程改造;或者参照已有经验构建专门用于协调二者行为模式的新中间层服务[^2]。
以下是具体代码示例展示如何修改配置以达成上述目标:
```java
@Configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 设置 mapper 扫描路径分开 mybatis 和 mybatis-plus
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath*:mapper/mybatis/*.xml"));
return sessionFactory.getObject();
}
}
// 另外单独创建 mybatis-plus 工厂 bean 定义
@Bean(name="mybatisPlusFactory")
@Primary
public SqlSessionFactory mybatisPlusSqlSessionFactory(DataSource dataSource){
MybatisSqlSessionBuilder builder=new MybatisSqlSessionBuilder ();
...
}
```
以上方法综合考虑了多种潜在风险因素,并提供了切实可行的技术手段加以应对,从而保障整个系统的稳定运行状态。
阅读全文
相关推荐


















