mybatis+springboot启动异常:Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statemen

本文介绍了一种常见的MyBatis XML映射文件加载失败的问题及解决方案。通过调整application.properties配置文件中的mybatis.mapperLocations属性,从使用单个classpath关键字改为使用classpath*关键字,成功解决了XML映射文件无法被MyBatis正确加载的问题。此外,文章还提到了将XML文件导入项目并重新构建也是解决问题的有效方法。

按照网上的匹配一遍,没发现问题,最修改application.properties配置文件中mybatis.mapperLocations=classpath:mapper/*.xml 
为 
mybatis.mapperLocations=classpath*:mapper/*.xml 

可以运行了。后来发现不是这个问题,把XML文件拉过来之后,重新build一下就可以了。

你遇到的异常MyBatis 中常见的错误之一: ``` Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.zy.system.mapper.SysConfigMapper.selectConfigList ``` --- ## ✅ 异常含义 这个异常表示 MyBatis 在执行时找不到对应的 SQL 映射语句,即: - MyBatis 无法在 XML 文件或注解中找到 `com.zy.system.mapper.SysConfigMapper.selectConfigList` 这个方法对应的 SQL 语句。 --- ## ✅ 常见原因及解决方案 ### 1. Mapper 接口与 XML 文件未正确绑定 #### ✅ 检查点: - Mapper 接口的全限定名(包括包名)是否和 XML 文件中的 `namespace` 一致。 #### ✅ 示例: **SysConfigMapper.java** ```java package com.zy.system.mapper; import java.util.List; import com.zy.system.model.SysConfig; public interface SysConfigMapper { List<SysConfig> selectConfigList(); } ``` **SysConfigMapper.xml** ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.system.mapper.SysConfigMapper"> <select id="selectConfigList" resultType="com.zy.system.model.SysConfig"> SELECT * FROM sys_config </select> </mapper> ``` > 注意:`namespace` 必须与接口的全限定类名一致。 --- ### 2. XML 文件未被正确加载到 MyBatis 配置中 #### ✅ 检查点: - XML 文件是否在 `resources` 目录下的正确路径中(如:`resources/mapper/SysConfigMapper.xml`)。 - MyBatis 配置文件中是否正确配置了 `mapperLocations`。 #### ✅ Spring Boot 配置示例(application.yml): ```yaml mybatis: mapper-locations: classpath:mapper/**/*.xml type-aliases-package: com.zy.system.model ``` --- ### 3. Mapper 接口未被 Spring 管理 #### ✅ 检查点: - Mapper 接口是否使用了 `@Mapper` 注解或在启动类上使用了 `@MapperScan`。 #### ✅ 示例 1:使用 `@Mapper` ```java import org.apache.ibatis.annotations.Mapper; @Mapper public interface SysConfigMapper { List<SysConfig> selectConfigList(); } ``` #### ✅ 示例 2:使用 `@MapperScan`(推荐) ```java import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.zy.system.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- ### 4. 方法名拼写错误或大小写不一致 #### ✅ 检查点: - 接口方法名 `selectConfigList` 是否与 XML 中的 `id` 完全一致。 --- ### 5. 使用注解方式时未正确配置 SQL #### ✅ 示例: 如果你使用的是注解而不是 XML,应如下写法: ```java import org.apache.ibatis.annotations.Select; import java.util.List; public interface SysConfigMapper { @Select("SELECT * FROM sys_config") List<SysConfig> selectConfigList(); } ``` --- ## ✅ 调试建议 1. 打印 MyBatis 加载的 Mapper 列表: ```java @Autowired private SqlSessionFactory sqlSessionFactory; @PostConstruct public void printMappers() { Collection<String> mappers = sqlSessionFactory.getConfiguration().getMappedStatementNames(); mappers.forEach(System.out::println); } ``` 2. 检查日志输出中是否有: ``` Mapped Statements collection does not contain value for com.zy.system.mapper.SysConfigMapper.selectConfigList ``` --- ## ✅ 总结 | 原因 | 检查点 | |------|--------| | Mapper 接口与 XML namespace 不一致 | 检查 namespace 是否匹配 | | XML 文件未加载 | 检查 `mapperLocations` 配置 | | Mapper 接口未被扫描 | 使用 `@Mapper` 或 `@MapperScan` | | 方法名不一致 | 检查 `id` 和方法名是否一致 | | 使用注解但未配置 SQL | 检查是否使用了 `@Select` 等注解 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值