springboot Invalid bound statement (not found): com.elitel.xxx.dao.xxx 错误处理

如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,一起学习,共同进步!

  今天给同事看了个问题,发现了这个问题,之前也遇见过,可是没有遇见这种情况,这次我记录一下。

  首先来说,造成这个错误的原因是什么。它是在Spring Boot应用程序中遇到“Invalid bound statement (not found)”错误,通常意味着你的MyBatis(或MyBatis-Spring-Boot-Starter)找不到某个SQL映射语句。

  由远到近,从无到有一点一点分析和排查

  1:首先判断是否生成了class文件,去target文件加下面去你相应的文件夹下面查看,是否有生成的mapper.xml  如果没有,重新编译一下,选择Build-->Rebuild Project  进行重新编译

  

   2: 如果第二种情况如果target 文件夹下面有数据,那么就去看mapper.xml 文件当中的    namespace  是否是你mapperDao 接口的相对路径,点击一下能否进去, 顺带着看看你的sql id 是不是跟方法名对应上了

  但是这种情况,大部分人应该是不会犯错误的,因为现在多为自动生成的。

  例如:UserMapper.java

  

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User findById(int id);
}

  UserMapper.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.UserMapper">
    <select id="findById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

 

  3:如果mapper.xml文件也没有问题,可以排查 xxxxApplication这个启动类里面的注解了

    看看你的mapperScan 是否能扫描到你的接口的包  。例如我的MyApplication 里面的mapperScan就是扫描到了mapper(Dao)下面  

    @MapperScan(value = {"com.example.mapper"}) 如果路径错误了请及时更正
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mapper")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

     4: 以上都没有问题可以排查配置文件,查看配置文件 当中配置的xml文件的路径是否正确

  applicaition.properties 当中是否写对了,例如:mybatis.mapper-locations=classpath*:mapper/*.xml

  application.yml当中这样写

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

 

  在这里需要注意的是,例如我同事之前写的是这种的

mybatis:
  mapper-locations: classpath*:mapper/db1/mysql/*.xml

     xml存放在resources 下是以这种形式展现的,那么这种是错误的。

  因为它在文件夹下面是这么展示的:

  

   我同事就是因为这种情况出现了错误。我排查到最后才发现。这块得使用文件夹父子目录的形式去呈现。而不是包名写成这样。

   至此大概率可以解决99%的关于这个的问题。如果还剩1%。当你确实都检查过了,还是不行,你可以选择两件事,第一关闭idea 然后重启.如果第一步不行,第二步:关闭电脑重启电脑。

   目前为止:我就关过一次电脑。希望大家没到关电脑的这一步。

  

 

  

 

 

posted @ 2024-06-13 16:45  也许已没有也许  阅读(31)  评论(0编辑  收藏  举报