完美解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lm.servicee

这篇博客主要讨论了Maven项目中遇到的XML配置文件加载异常问题,推荐了四种解决方案。首选是在pom.xml中配置资源路径,其次可以在application.properties中添加相应设置。此外,还提到了将XML文件放在指定目录的备选方案。

首先这是一个绑定异常,这时maven默认的加载机制造成的
在这里插入图片描述解决方法:
一共有四种,推荐使用第三种
(第一种)复制你的xml文件到你的target中对应的位置上
(第二种)把xml文件放到resource文件中(不推荐使用,破坏了项目原有的结构)
(第三种)pom.xml文件中配置以下代码

在这里插入图片描述

application.properties中添加以下代码
在这里插入图片描述

(第四种)如果以上都不行,只能把xml和接口放在一起 ,如下
在这里插入图片描述

### 问题分析 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 是 MyBatis 中常见的异常之一,通常表示 MyBatis 在执行 SQL 映射时无法找到对应的 Mapper 文件或方法。根据提供的引用内容[^1]和上下文信息,可以推测该问题可能由以下原因引起: - Mapper 接口未正确绑定到 XML 文件。 - Mapper 文件路径配置错误或未被加载。 - 缺少必要的依赖项或配置文件。 - 方法签名与 XML 文件中的 `id` 不匹配。 以下是针对该问题的详细解决方案。 --- ### 解决方案 #### 1. 检查 Mapper 接口与 XML 文件的绑定 确保 Mapper 接口的全限定名与 XML 文件的命名空间一致。例如,如果 Mapper 接口为 `com.example.mapper.CacheServiceMapper`,则对应的 XML 文件应包含以下声明: ```xml <mapper namespace="com.example.mapper.CacheServiceMapper"> ``` 同时,确认 XML 文件位于正确的目录下,并且其路径符合项目配置[^2]。 #### 2. 配置 SqlSessionFactory 在 Spring Boot 项目中,需要通过 `SqlSessionFactoryBean` 正确加载 Mapper 文件。以下是一个示例配置: ```java @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setTypeAliasesPackage("com.example.model"); // 设置实体类包路径 sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml")); // 加载 Mapper 文件 return sessionFactoryBean.getObject(); } ``` 确保 `setMapperLocations` 方法指定的路径与实际 Mapper 文件存放位置一致。例如,如果 Mapper 文件存放在 `src/main/resources/mapper/` 目录下,则路径应为 `classpath*:mapper/*.xml`[^2]。 #### 3. 添加必要的依赖 检查项目的 `pom.xml` 文件,确保包含 MyBatis-Plus 的相关依赖。例如: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> <!-- 根据实际版本调整 --> </dependency> ``` 如果缺少上述依赖,可能导致 Mapper 文件无法正确加载[^3]。 #### 4. 检查方法签名 确认调用的 SQL 方法是否存在于 Mapper 接口中,并且其名称与 XML 文件中的 `id` 属性一致。例如,如果调用的是 `CacheService.selectById` 方法,则 XML 文件中应包含如下定义: ```xml <select id="selectById" resultType="com.example.model.Cache"> SELECT * FROM cache WHERE id = #{id} </select> ``` #### 5. 启用组件扫描 如果使用注解方式开发,需确保 Mapper 接口被正确扫描。可以在启动类或配置类上添加以下注解: ```java @MapperScan("com.example.mapper") ``` 此注解会自动扫描指定包下的所有 Mapper 接口并注册为 Bean。 --- ### 示例代码 以下是一个完整的配置示例,展示如何解决 `BindingException` 问题: #### 1. Mapper 接口 ```java package com.example.mapper; import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.model.Cache; @Mapper public interface CacheServiceMapper extends BaseMapper<Cache> { Cache selectById(Long id); } ``` #### 2. 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.example.mapper.CacheServiceMapper"> <select id="selectById" resultType="com.example.model.Cache"> SELECT * FROM cache WHERE id = #{id} </select> </mapper> ``` #### 3. Spring Boot 配置 ```java @Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setTypeAliasesPackage("com.example.model"); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml")); return sessionFactoryBean.getObject(); } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值