入坑解决mybatis plus not found mapper(最准确解决办法)

博客详细描述了在遇到mybatis plus not found mapper错误时,常见解决方案的问题,指出更改namespace或依赖并不是理想选择。作者分享了一位博主提供的解决思路,通过理解mbatis-plus-boot-starter的原理和debug下的mapper-locations路径,最终采用重写数据源指定Mybatis Plus文件路径的方式成功解决问题。

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

          具体报错信息报错信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx.mapper.CourseMapper.getCourseTeacherDetail,很多文章说是mapper的namespace 路径不对,或者替换原来mbatis-plus-boot-starter相关依赖等,更换原来依赖确实可以解决,但是项目使用结构也要更换那毫无意义,在下有幸看了一个博主大神写的一篇有关于mbatis-plus-boot-starter依赖的一个坑,通过看底层原理以及debug下的mapper-locations路径与当前配置的路径进行转换使无法找到,后面是怎样解决的请看下面代码,强烈有效,我才用重写数据源指定mybaitsPlus 文件路径。

 

package com.ly.mp.app.config;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.ly.mp.app.common.multiple.MultipleDataSource;
import com.ly.mp.app.common.multiple.enums.DataSourceEnum;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * MybatisPlus配置类
 * @author huangan
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * @description: 配置分页插件
     * @author: gradual
     * @param: []
     * @return: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * @description: SQL执行效率插件
     * @author: gradual
     * @param: []
     * @return: com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }

    /**
     * 逻辑删除用,3.1.1之后的版本可不需要配置该bean,但项目这里用的是3.1.0的
     * @author David Hong
     * @return com.baomidou.mybatisplus.core.injector.ISqlInjector
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return (ISqlInjector) new LogicSqlInjector();
    }

    @Bean(name = "globalConfig")
    @Primary
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        return globalConfig;
    }

    @Bean("sqlSessionFactory")
    @Primary
    public SqlSessionFactory dbSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource, GlobalConfig globalConfig) throws Exception {
        // MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setGlobalConfig(globalConfig());

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 需要在这里指定xml文件的位置,不然自定义的sql会报Invalid bound statement异常
        factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/*Mapper.xml"));

        // 导入mybatis配置 构造方法,解决动态数据源循环依赖问题
        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
        // 配置分页插件
        mybatisConfiguration.addInterceptor(new PaginationInterceptor());
        // 配置打印sql语句
        mybatisConfiguration.setLogImpl(StdOutImpl.class);
        factoryBean.setConfiguration(mybatisConfiguration);

        return factoryBean.getObject();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值