【MyBatis】org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)完整解决方案思路全纪录

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)完整解决方案思路和解决过程
你可以通过看下面这篇文章了解具体细节
SpringBoot整合MyBatis,入门教程,细节无敌,不能错过

在这里插入图片描述

本篇文章,我将通过程序启动步骤,逐一排查问题

1.先搞懂my batis程序启动流程图

【application.yml】项目启动配置文件 【*Mapper.xml】映射文件 实体模型文件domain 接口文件 运行调用 根据配置mapper-locations找到映射的xml文件 根据配置type-aliases-package找到对应的数据库实体文件 根据mapper namespace=""的值找到对应的接口文件 方法名称对应id值;返回类型对应resultType值 运行调用接口文件返回对应的实体模型 【application.yml】项目启动配置文件 【*Mapper.xml】映射文件 实体模型文件domain 接口文件 运行调用

【application.yml】项目启动配置文件-示例代码

我的名称:application.yml
这里指的是:application.ymlapplication.yamlapplication.properties文件

# Mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: jjycheng.springbootwebdemo.springboot_mybatis.domain

【*Mapper.xml】映射文件-示例代码

我的名称:UserInfoMapper.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="jjycheng.springbootwebdemo.springboot_mybatis.mapper.UserInfoXmlMapper">
    <select id="findAll" resultType="UserInfoModel" >
        select * from userinfo
    </select>
    <select id="getTop1" resultType="UserInfoModel" >
        select * from userinfo limit 0,1
    </select>
</mapper>

项目结构截图-示例代码

在这里插入图片描述

实体模型文件domain-示例代码

我的名称:UserInfoModel.java

package jjycheng.springbootwebdemo.springboot_mybatis.domain;

public class UserInfoModel {
    private int Id;
    private String Name;
    private int Age;

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public int getAge() {
        return Age;
    }

    public void setAge(int age) {
        Age = age;
    }

    @Override
    public String toString() {
        return "UserInfoModel{" +
                "Id=" + Id +
                ", Name='" + Name + '\'' +
                ", Age=" + Age +
                '}';
    }
}


接口文件-示例代码

我的名称:UserInfoXmlMapper.java

package jjycheng.springbootwebdemo.springboot_mybatis.mapper;

import jjycheng.springbootwebdemo.springboot_mybatis.domain.UserInfoModel;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserInfoXmlMapper {
    public List<UserInfoModel> findAll();
    public List<UserInfoModel> getTop1();
}

运行调用-示例代码

我的名称:SpringBootMyBatisApplicationTests.java

package jjycheng.springbootwebdemo.springboot_mybatis;

import jjycheng.springbootwebdemo.springboot_mybatis.domain.UserInfoModel;
import jjycheng.springbootwebdemo.springboot_mybatis.mapper.UserInfoMapper;
import jjycheng.springbootwebdemo.springboot_mybatis.mapper.UserInfoXmlMapper;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
public class SpringBootMyBatisApplicationTests {

    @Test
    void contextLoads() {
    }

    /*----------注解开发----------*/
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Test
    public void TestFindAll()
    {
        List<UserInfoModel> list =userInfoMapper.findAll();
        System.out.println(list);
    }

    /*----------xml开发----------*/
    @Autowired
    private UserInfoXmlMapper userInfoXmlMapper;

    @Test
    public void TestXmlFindAll()
    {
        System.out.println(userInfoXmlMapper.findAll());
    }
} 

2. 检查项

2.1.检查*Mapper.xml

  1. 检查*Mapper.xml映射文件的namespace
  2. 检查*Mapper.xml映射文件的id
  3. 检查*Mapper.xml映射文件的resultType
  4. 检查*Mapper.xml映射文件的sql语句
  5. 检查*Mapper.xml映射文件的头部代码
  6. 检查*Mapper.xml映射文件是否在src》main》resources》mapper目录下
  7. 去掉xml文件中的中文注释
  8. 随意在xml文件中加一个空格或者空行然后保存
  9. 检查*Mapper.xml映射文件的其他项

示例代码:

UserInfoXmlMapper是UserInfoXmlMapper.java,请看上面的接口文件-示例代码内容

<?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="jjycheng.springbootwebdemo.springboot_mybatis.mapper.UserInfoXmlMapper">
    <select id="findAll" resultType="UserInfoModel" >
        select * from userinfo
    </select>
    <select id="getTop1" resultType="UserInfoModel" >
        select * from userinfo limit 0,1
    </select>
</mapper>

*Mapper.xml映射文件不在src》main》resources》mapper目录下

  • 在使用IDEA开发时,如果打包时*Mapper.xml没有自动复制到class输出目录的mapper类包下,则需要在pom文件中添加mybatis加载配置文件的配置!

  • 如果我们的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>

2.2.检查application.yml

# Mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: jjycheng.springbootwebdemo.springboot_mybatis.domain

3.推荐相关文章

4.你看了本文和推荐文章,还没有解决你的问题,不放看下这个

我是搞了很久,看了许多文章,都没有能解决我的问题,最后,发现有2个application文件造成的

  • 同一个项目里,application.*文件只能有一个,如果有多个 就会出现一些神奇问题
  • 同一个项目里,application.*文件只能有一个,如果有多个 就会出现一些神奇问题
  • 同一个项目里,application.*文件只能有一个,如果有多个 就会出现一些神奇问题
  • src>main>resources>application.yml
    无论 application.ymlapplication.yamlapplication.properties文件只能有一个
  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙-极纪元JJY.Cheng

客官,1分钱也是爱,给个赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值