关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录

本文主要是介绍关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于Invalid bound statement和Error creating bean with name 'xxx’错误问题

在我使用Spring+Mybatis整合的时候出现的问题。
首先Invalid bound statement报错是因为mapper.xml文件没找到的原因,creating bean with name 'xxx'报错是因为注解包未扫描到,首先要去检查mapper.xml配置下的basePackagemapperLocations下的路径以及namespace

以下是我的代码:

  • 项目结构:
    项目结构

  • DepartmentDao接口
    在这里插入图片描述

  • mapper.xml配置

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.oa.dao.dao.DepartmentDao"><resultMap id="department" type="Department"><id property="sn" column="sn" javaType="String" /><result property="name" column="name" javaType="String"/><result property="address" column="address" javaType="String" /></resultMap><insert id="insert" parameterType="Department">insert into department values(#{sn},#{name},#{adress},)  <!--是数据库字段名,不是entity属性名--></insert><update id="update" parameterType="Department">update department set name=#{name},address=#{address} where sn=#{sn}</update><delete id="delete" parameterType="String">delete from department where sn=#{sn}</delete><select id="select" parameterType="String" resultMap="department">select * from department where  sn=#{sn}</select><!--resultMap涉及到接口字段和数据库的字段,所以需要另写一个<result>将接口字段与数据库字段匹配--><select id="selectAll" resultMap="department">select * from department</select></mapper>
  • Spring.xml配置文件

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.imooc.oa.dao"></context:component-scan><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/oa?useUnicode=true&amp;characterEncoding=utf-8"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="typeAliasesPackage" value="com.imooc.oa.dao.entity"></property><property name="mapperLocations" value="classpath:mapper/*.xml"></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sessionFactory" ></property><property name="basePackage" value="com.imooc.oa.dao.dao" ></property></bean></beans>

注意:

  • MapperScannerConfigurer下的basePackage属性使用路径是接口路径也就是我上面DepartmentDao接口的路径。
  • typeAliasesPackage是用于entity下给实体类取别名的,包名为实体类包名。
  • mapperLocations 是扫描mapper.xml的配置,扫描的也就是我上面resources
    mapper文件夹的配置
ps:我出错的地方在于没有写mapperLocations导致找不到mapper.xml的包,还有不清楚basePackagemapperLocations的具体作用。

以下是搜集问题中遇到的解决方案

作者链接🔗: https://www.jianshu.com/p/a9516bcd3cb0

在实际项目,搭建mybatis会爆出 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 这个错误非常的头疼,如图1,不知道为什么mybatis就是找不到对应的xml文件。博主整理了三种可能的情况,三种情况下肯定有一种能帮助到你。

  • 情况一:mapper.xml没有按照传统的maven架构进行放置
    传统的maven架构目录可以参考博主的另外一个博文:https://www.jianshu.com/p/477ad2e14150
    如果我们的mapper.xml文件没有放置到src-main-resources下面,是不会被maven build plugin给默认扫描到的。此时需要修改启动的模块的pom文件,在build标签里面加入:
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource></resources>
</build>

并推荐在Project Structure -> Modules中将你存放mapper的包给标注成resources

  • 情况二:mybatis的配置信息出错
    博主给出所维护的项目的配置信息供读者参考:
       mybatis-plus.mapper-locations=classpath*:/mapper/**Mapper.xmlmybatis-plus.typeAliasesPackage=com.yuxun.**.entitymybatis-plus.defaultStatementTimeout=120mybatis-plus.config-locations=classpath:config/mybatis-config.xml

其中mybatis-plus.mapper-locations是写mapper编译过后的位置和名称,可以参见图2。

  • 情况三:idea的编译问题
    该种情况非常的莫名其妙,可能是内存爆满的原因导致的,idea有的时候没有编译生成相应的xml。在idea的target->classes下面没有找到相应的存在xml的文件夹,该文件夹里面有没有对应的mapper(实体名).xml文件,如图2。此时就算你采用重启idea,Invalidate caches等方式都不管用。最正确的做法是重新编译工程,点击导航栏build => rebuild project

图2,
在这里插入图片描述

编译后找不到对应的UserMapper.xml

ps:第三种情况常常见于,本来项目好好的可以扫描到mybatis的配置的,但是加了一个方法或者某一次run起来就突然报这个错误的情况。

这篇关于关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544724

相关文章

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos