前言:
通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。
正片
不要问我为什么这么做,复制粘贴并可知
简单介绍一下Mybatis是什么?
一款java连接数据库的框架
简单介绍一下Mybatis的起到的作用!
分为三块区域
第一区:java区
第二区:mybatis区
第三区:数据库区(简称Sql区)
mybatis是连接两端的桥梁,起到了翻译的作用,将java语言翻译成Sql可运行的语言,将Sql运行的结果返回经过处理,返回至java语言环境中
将两个不相关的语言联系在一起,就是mybatis的作用
mybaits如何发挥作用的
首先,需要添加两款核心依赖,一款辅助依赖和基础依赖
![](https://i-blog.csdnimg.cn/direct/d97d9636e6294c2db96d28f9f7dc2d65.png)
基础依赖:spring web
核心依赖:Mybatis Farmework,Mysql Driver
辅助依赖:Lombok
![](https://i-blog.csdnimg.cn/direct/9fb946dacfdc42c8aba9b1ef9d74fe67.png)
添加完依赖,启动,成功报错!
这个报错是良性的报错,没错,在这里你能看见良性报错和恶性报错,你能清晰看它为什么报错
XML
#优化版
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# url 选择对应的数据库映射
url: jdbc:mysql://localhost:3306/romachen #最后一位为数据库名
username: root # 数据库账号
password: 123456 # 数据库密码
server:
port: 8084
![](https://i-blog.csdnimg.cn/direct/5e17f7fe0a134ede957e548e6d71621d.png)
我们在springboot自带的配置文件中添加上面模板,修改数据库名即可
有人说,我没有自带的配置文件怎么版?新建一个application.yaml(不要打错了,打错会出bug)
添加依赖,注册mybatis,运行,一气合成
无报错
![](https://i-blog.csdnimg.cn/direct/e2b6edac61394cf1b2171f1e8b194309.png)
完整的代码目录
这是一个经典的CRUD模板
第一步:我们先创建一个实体类,用于接收数据库运行后返回的内容
java
package org.example.mybatis.entity;
import lombok.Data;
@Data
public class UserEntity {
String username;
String password;
}
第二步:创建mapper接口,用于mybatis对接sql
java
package org.example.mybatis.Mapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.UserEntity;
@Mapper
public interface UserMapper {
UserEntity UserByName(String username);
}
第三步:创建Mybatis载体,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="mapper层具体路径">
</mapper>
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="org.example.mybatis.Mapper.UserMapper">
<select id="selectByUsername" resultType="org.example.mybatis.entity.UserEntity">
SELECT * from steel.user_test where username = #{username}
</select>
</mapper>
id需要对应mapper层中的方法名UserByName,resulType的参数即实体类的路径
第四步:创建CRUD模板中的业务层
java
package org.example.mybatis.servlet;
import org.example.mybatis.entity.UserEntity;
public interface UserServlet {
UserEntity UserByName(String username);
}
第五步:创建业务实现
java
package org.example.mybatis.servlet.Imp;
import jakarta.annotation.Resource;
import org.example.mybatis.Mapper.UserMapper;
import org.example.mybatis.entity.UserEntity;
import org.example.mybatis.servlet.UserServlet;
import org.springframework.stereotype.Service;
@Service
public class userServletImp implements UserServlet {
@Resource
UserMapper userMapper;
@Override
public UserEntity UserByName(String username) {
return userMapper.UserByName(username);
}
}
第六步:创建控制类
java
@RestController
@RequestMapping("/user")
public class user {
@Autowired
UserServlet userServlet;
@GetMapping("/username")
public String UserName(){
UserEntity user = userServlet.UserByName("user");
return "打印成功" + user;
}
}
第七步:注册Mapper,在启动类中添加
java
@SpringBootApplication
@MapperScan(basePackages = "org.example.mybatis.Mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
mapper层路径,不需要具体到每个文件
第八步:运行!!!!!!!!!!!
然后我们就会报错
Invalid bound statement (not found): org.example.mybatis.Mapper.UserMapper.UserByName
我很讨厌这个报错,但是我知道这个报错是因为什么
是因为你的xml文件和javaMapper层没有对接成功,在SpringBoot这里多半是因为路径写错了
所以我们需要在配置文件中添加这么一句,让SpringBoot在启动的时自动扫描
![](https://i-blog.csdnimg.cn/direct/14ca9dac24724ccbaa84249f1d47ebda.png)
classpath会自动扫描resource里的文件,然后我们只需要将以*.xml的形式全部导入,再运行
成功
![](https://i-blog.csdnimg.cn/direct/0a0011861ddc4c99b2792695c36ea21d.png)
这个报错我找了半天,最后也算是知道它为什么报错了
作者通过对
mapper-locations的认识
发现了问题所在,因为文件路径不一样导致的XML无法对接javaMApper
![](https://i-blog.csdnimg.cn/direct/29e89a347bc54a4e922cfe4cd7dd8397.png)
我们要确保Mapper的路径和Mapper.xml路径完全相同,包括名字
![](https://i-blog.csdnimg.cn/direct/47dcb2eacf09400798ce1e45b2de75db.png)
这个报错,妥妥的恶性报错
总结:想要避免
Invalid bound statement (not found):xxxx
第一个方法:保证Mapper路径和xml路径完全相同
第二个方法:通过yaml配置mapper-locations: classpath:xx/xxxx/mapper/*.xml