关于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

以下是我的代码:

  • 项目结构:
    关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录_第1张图片

  • DepartmentDao接口
    关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录_第2张图片

  • mapper.xml配置





    
        
        
        
    

    
        insert into department values(#{sn},#{name},#{adress},)  
    

    
        update department set name=#{name},address=#{address} where sn=#{sn}
    

    
        delete from department where sn=#{sn}
    

    


    
    



  • Spring.xml配置文件




    

    
        
        
        
        
    

    
          
          
          
    

    
         
         
    



注意:

  • 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标签里面加入:

    
        
            src/main/java
            
                **/*.xml
                **/*.properties
            
            true
        
        
            src/main/resources
            
                **/*.xml
                **/*.properties
            
            true
        
    


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

  • 情况二:mybatis的配置信息出错
    博主给出所维护的项目的配置信息供读者参考:
       mybatis-plus.mapper-locations=classpath*:/mapper/**Mapper.xml
       mybatis-plus.typeAliasesPackage=com.yuxun.**.entity
       mybatis-plus.defaultStatementTimeout=120
       mybatis-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,
关于Invalid bound statement和Error creating bean with name 'xxx'错误问题全收录_第3张图片

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

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

你可能感兴趣的:(SSM框架整合)