mybatisgenerator生成器报错Invalid bound statement (not found): com.example.mapper.*.selectByExample

文章介绍了如何配置MyBatisGenerator在SpringBoot项目中使用,包括在pom.xml和mybatis-generator-config.xml中的设置,以及遇到的XML文件未被加载的问题。解决方法是在application.yml中指定mapper文件位置。

在使用myabtisgenerator配置:

pom.xml

       <!--mybatis 逆向生成-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis-generator.version}</version>
                <configuration>
                    <overwrite>true</overwrite>    <!-- 是否覆盖 -->
                    <configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.27</version>
                    </dependency>
                </dependencies>
            </plugin>

mybatis-generator-config.xml

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE generatorConfiguration
                PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
                "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
<context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

    <!-- 自动检查关键字,为关键字增加反引号 -->
    <property name="autoDelimitKeywords" value="true"/>
    <property name="beginningDelimiter" value="`"/>
    <property name="endingDelimiter" value="`"/>

    <!--覆盖生成XML文件-->
    <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
    <!-- 生成的实体类添加toString()方法 -->
    <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

    <!-- 不生成注释 -->
    <!--        <commentGenerator>-->
    <!--            <property name="suppressAllComments" value="true"/>-->
    <!--        </commentGenerator>-->

    <!---数据库连接信息-->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/db"
                    userId="root"
                    password="123456">
    </jdbcConnection>

    <!--自动 domain[Bean]类的位置 -->
    <javaModelGenerator targetProject="src\main\java"
                        targetPackage="com.example.bean.pojo"/>

    <!--自动 mapper xml的位置 -->
    <sqlMapGenerator targetProject="src\main\resources"
                     targetPackage="mapper"/>

    <!--自动 mapper类[接口]的位置 -->
    <javaClientGenerator targetProject="src\main\java"
                         targetPackage="com.example.bean.mapper"
                         type="XMLMAPPER"/>

    <table tableName="student" domainObjectName="Student"></table>
</context>
</generatorConfiguration>

 运行后报错

 原因是找不到sql查询语句所对应的xml文件;

默认情况下springboot会加载resource下mapper中的xml文件,如果出现如上问题可以进行如下配置:

再application.yml中手动配置springboot加载静态文件:

 

mybatis:
  mapper-locations: classpath:mapper/*.xml

<think>嗯,用户遇到了MyBatis的BindingException异常,具体是找不到UserInfMapper的selectById方法。这个问题看起来是MyBatis的经典错误,通常是因为Mapper接口和XML文件没正确映射。我需要根据用户提供的引用资料来分析可能的原因和解决方案。 首先,用户提供的引用[1]提到可能是pom.xml里缺少MyBatis-Plus的依赖。这时候应该检查项目的依赖是否正确引入,尤其是MyBatis-Plus的starter和annotation处理器。如果用户用的是多模块项目,可能还要确认模块间的依赖是否正确。 接下来,引用[2]和[4]指出,问题可能出在Mapper接口与XML文件的方法名或命名空间不匹配。比如,UserInfMapper接口中的方法名是否和XML中的id一致,XML的namespace是否对应接口的全限定名。还有,XML文件是否被正确放置在资源目录下的对应路径中,比如com/example/mapper/UserInfMapper.xml。有时候Maven的构建会忽略XML文件,需要在pom.xml中配置资源包含。 然后,引用[3]提到多数据源的情况可能需要特别配置。如果用户配置了多数据源,需要检查每个数据源的配置是否正确指向对应的Mapper接口和XML文件,避免扫描包或路径错误导致部分Mapper未被加载。 另外,用户的问题具体到selectById方法,这可能涉及到MyBatis-Plus的BaseMapper是否被正确继承。如果UserInfMapper继承了BaseMapper,需要确认是否有对应的XML文件或者是否使用了MyBatis-Plus的默认实现。因为MyBatis-Plus的BaseMapper自带一些通用方法,可能不需要XML,但如果用户自定义了selectById,就需要确保XML中有对应的SQL语句,或者使用注解方式。 还有可能的是,MyBatis的配置文件中没有正确扫描Mapper接口,或者没有启用MyBatis-Plus的自动配置。需要检查配置类是否有@MapperScan注解,或者application.properties中是否正确配置了mapper-locations。 最后,可能是一些低级错误,比如方法名拼写错误、XML文件没有放在正确的资源目录下,或者构建工具没有将XML文件打包到target目录中。这时候建议用户清理项目并重新构建,检查生成的target目录中是否存在对应的XML文件。 总结下来,解决步骤应该是检查依赖、核对接口与XML的映射关系、确认资源路径和构建配置、多数据源配置以及清理构建产物。需要一步步排除可能性,找出具体的原因。</think>针对`org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)`异常,以下是分步解决方案: --- ### **1. 检查基础依赖配置** - **确认是否添加`mybatis-plus-boot-starter`依赖** 在`pom.xml`中添加以下依赖(若使用MyBatis原生则替换为`mybatis-spring-boot-starter`): ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> ``` 若使用代码生成器插件,还需添加`mybatis-plus-generator`[^1]。 --- ### **2. 验证Mapper接口与XML映射关系** - **命名空间匹配** XML文件中的`namespace`必须与Mapper接口的全限定名一致。例如: ```xml <!-- UserInfMapper.xml --> <mapper namespace="com.example.mapper.UserInfMapper"> <select id="selectById" resultType="com.example.entity.UserInf"> SELECT * FROM user_inf WHERE id = #{id} </select> </mapper> ``` - **方法名一致性** Mapper接口方法名(如`selectById`)必须与XML中SQL标签的`id`属性完全一致,区分大小写[^4]。 --- ### **3. 检查XML文件路径** - **资源目录规范** 确保XML文件位于`src/main/resources`下的**相同包路径**,例如: `resources/com/example/mapper/UserInfMapper.xml` 若使用Maven,需在`pom.xml`中添加资源过滤配置: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` --- ### **4. 多数据源配置验证** 若项目使用多数据源,需在配置类中明确指定`SqlSessionFactoryBean`的映射路径: ```java @Bean @ConfigurationProperties(prefix = "spring.datasource.db1") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean public SqlSessionFactory db1SqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(db1DataSource()); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/example/mapper/db1/*.xml")); // 指定XML路径 return factoryBean.getObject(); } ``` --- ### **5. 清理构建缓存** 执行以下操作后重启服务: 1. 删除项目`target`目录 2. Maven执行`clean install` 3. IDE清理缓存(如IntelliJ的`File > Invalidate Caches`) --- ### **6. 其他可能原因** - **MyBatis-Plus注解冲突** 若使用`@Select`等注解与XML混合编程,需确保两者无重复定义。 - **JDK版本兼容性** 确认JDK版本与MyBatis/MyBatis-Plus兼容(推荐JDK 8+)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值