MyBatis:解決找不到綁定的mapper問題,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)


產生原因

默認情況下,MyBatis會去接口文件所在的目錄尋找xml文件。當xml文件與接口文件目錄不在同一目錄時,會報錯:

org.apache.ibatis.builder.IncompleteElementException: Could not find a parent resultmap with id 'top.testops.mall.mbg.mapper.CheckGroupMapper'
	at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:188) ~[mybatis-3.5.7.jar:3.5.7]
	at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47) ~[mybatis-3.5.7.jar:3.5.7]
	at org.apache.ibatis.session.Configuration.parsePendingResultMaps(Configuration.java:909) ~[mybatis-3.5.7.jar:3.5.7]
	at org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:873) ~[mybatis-3.5.7.jar:3.5.7]
	at com.baomidou.mybatisplus.core.MybatisConfiguration.hasStatement(MybatisConfiguration.java:303) ~[mybatis-plus-core-3.4.3.4.jar:3.4.3.4]
	at org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:853) ~[mybatis-3.5.7.jar:3.5.7]
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.resolveMappedStatement(MapperMethod.java:257) ~[mybatis-3.5.7.jar:3.5.7]

解決方案

方法一:

把接口文件與xml文件放在同一目錄

方法二

application.yml文件配置mapper-locations,即:

mybatis-plus:
  mapper-locations: classpath:top/testops/**/*.xml

注意一:
此處的配置,不是classpath:path/to/mappers/*.xml,而是classpath:com/my/package/persistence/*.xml。即:不是xml文件的路徑,而是包名對應的目錄(如:src/main/java/example/mapper/.xml),而是Java中的包名(如:top/testops/mapper/.xml,xml所在的包名為:top.testops.mapper)

注意二:
當mapper不是放在resources目錄時,xml文件不會編譯到target文件夾。需要在pom.xml文件中添加配置:

    <build>
        <resources>
            <!-- 編譯 src/main/java 目錄下的 mapper 文件 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM