springboot使用使用mybatis报错BindingException

本文详细解析了在SpringBoot项目中整合MyBatis时常见的BindingException错误,包括检查名称、命名空间、SQL语句ID、返回值类型及打包配置等问题,并提供了具体的解决步骤。

springboot使用使用mybatis报错BindingException

使用springboot在启动类添加上@MapperScan(“com.jd.mapper”)注解,扫描mapper所在的包,否则springboot无法启动。

使用mybatis的使用报错为:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jd.mapper.UserMapper.getUserList
主要是为绑定Mapper接口和Mapper.xml 异常。

解决方式

1、检查名称

两个文件的名称要完全一致,仅后缀不同。
在这里插入图片描述

2、检查命名空间

在mapper.xml中命名空间是接口的全限定路径。
在这里插入图片描述

3、检查sql语句的id

sql语句中的id要与接口中的方法名一致。

接口中的方法
在这里插入图片描述
mapper.xml 中的sql的id
在这里插入图片描述

4、检查返回值

sql中的resultType是否与接口的返回值一致。

注意:尽量使用resultMap,进行逐一对应。并且如果使用到别名的话,在配置文件中配置

mybatis.type-aliases-package=com.jd.domain

5、查看mapper.xml是否打包到target

使用maven管理项目的话,maven不会打包main/java下的 .xml文件,只会打包 .java。如下图没有打包,需要添加pom文件打包。
在这里插入图片描述
将mapper.xml编译打包有两种方式:
1、添加编译命令,将java包下的xml一同打包。

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
              	    <!--任意包下的任意名称的xml文件-->
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

2、mapper.xml和接口分离
将mapper.xml 与 接口分离,将mapper.xml放在main/resources之下,
并且在配置文件中添加mapper文件的位置信息:

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

在这里插入图片描述

总结

建议使用mybatis的插件,更好的将mapper接口和mapper.xml结合起来。
使用这个插件很好用。
在这里插入图片描述
使用之后会出现蓝色箭头,直接对应找到mapper.xml
在这里插入图片描述
另外:纪录一下mapper.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.jd.mapper.UserMapper">

</mapper>
### Spring Boot 3.2.5 使用 Gradle 构建时解决 MyBatis BindingException 错误 MyBatis 的 `BindingException` 错误通常表示在运行时无法找到绑定的 SQL 语句。这可能是由于 Mapper 接口与对应的 XML 文件未正确映射,或者配置文件中某些路径设置不正确导致的。 #### 1. 检查依赖配置 确保在 `build.gradle` 中正确添加了 MyBatis-Plus 和相关依赖项。以下是推荐的依赖配置: ```gradle dependencies { implementation 'com.baomidou:mybatis-plus-spring-boot3-starter:3.5.5' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' } ``` 上述依赖项分别引入了 MyBatis-Plus 和 MyBatis-Spring 支持[^2]。 #### 2. 配置 `application.yml` 确保 `application.yml` 中的 `mybatis-plus` 配置正确,特别是 `mapper-locations` 和 `type-aliases-package` 的路径设置。以下是一个示例配置: ```yaml mybatis-plus: mapper-locations: classpath*:/mapper/*Mapper.xml type-aliases-package: com.example.arrow_smart_toilet_back_01.mapper configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto ``` 如果项目使用的是自定义包名,请根据实际情况调整 `mapper-locations` 和 `type-aliases-package` 的值[^2]。 #### 3. 确保 Mapper 接口和 XML 文件匹配 `BindingException` 常见原因之一是 Mapper 接口与对应的 XML 文件未正确关联。请检查以下几点: - Mapper 接口是否被标注为 `@Mapper` 或通过 `@MapperScan` 注解注册。 - XML 文件是否放置在正确的目录下(例如 `src/main/resources/mapper/`)。 - XML 文件中的 `namespace` 属性是否与 Mapper 接口的全限定名一致。 例如,假设有一个名为 `UserMapper` 的接口,其 XML 文件应如下配置: ```xml <mapper namespace="com.example.arrow_smart_toilet_back_01.mapper.UserMapper"> <!-- SQL statements --> </mapper> ``` #### 4. 删除冗余配置类 如果项目中存在手动编写的 Druid 数据源配置类(如 `MysqlDruidConfiguration.java` 和 `DruidDataSourceProperties.java`),建议删除这些类。Spring Boot 已经内置了对 Druid 的支持,手动配置可能会导致冲突[^3]。 #### 5. 实现分页功能 如果需要实现分页功能,可以引入 `PageHelper` 相关依赖。以下是 Gradle 配置示例: ```gradle dependencies { implementation 'com.github.pagehelper:pagehelper-spring-boot-starter:2.1.0' } ``` 同时,确保在服务层代码中正确调用分页方法。例如: ```java import com.baomidou.mybatisplus.extension.plugins.pagination.Page; public List<User> getUserList(int page, int size) { Page<User> userPage = new Page<>(page, size); return userMapper.selectPage(userPage, null).getRecords(); } ``` #### 6. 调试与验证 如果问题仍然存在,可以通过以下方式排查: - 启用 MyBatis 日志输出,检查 SQL 执行情况。 - 确保项目构建后,XML 文件已正确打包到 `resources` 目录下。 --- ### 示例代码 以下是一个完整的 Mapper 接口和 XML 文件示例: #### Mapper 接口 ```java package com.example.arrow_smart_toilet_back_01.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.arrow_smart_toilet_back_01.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { } ``` #### 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.arrow_smart_toilet_back_01.mapper.UserMapper"> <select id="selectById" resultType="com.example.arrow_smart_toilet_back_01.entity.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值