Mybatis(1)Mybatis 入门
Mybatis(1)Mybatis 入门
观前提醒:
这篇博客的代码,都是需要自己敲一下的。
建议你看着我说的知识点,自己尝试一下,创建 Springboot项目,使用 Mybatis框架,访问数据库。
这里使用的数据库是 MySQL。
图形化工具:Navicat
sql文件获取:https://gitee.com/mrbgvhbhjv/java-ee-course
1.什么是 Mybatis
Mybatis 是一个持久层的框架,用来访问数据库的,持久化保存数据。
Spring框架 和 Mybatis框架,是没有任何关系的。
Springboot 集成了 Mybatis框架,可以通过 pom文件,导入 Springboot 项目中,使用。
类似于很多软件,集成了 deepseek 一样,可以使用 deepseek,但是,两个软件不是同一个公司的产品。
框架就是把很多共同的东西封装起来。
Mybatis 是基于 JDBC封装 的,把 JDBC共同的操作封装,简化操作。
JDBC 中,每一次操作 SQL语句,都有相同的操作,Mybatis框架,就是把这些操作封装起来。
框架给我们提供入口,能让我们编写 SQL语句,绑定语句中的参数即可。
2. 创建 Mybatis项目
使用的数据库 是 Mysql。
创建 Mybatis 项目,需要新引入两个依赖:


准备数据库:mybatis_text(Navicat中,自己创建数据库)
准备数据库表:需要导入 我准备好的 sql 文件(博客一开头,我们说明了从哪里获取了)。
创建 UserInfo表(博客接着看,有源代码),与 User表的属性一一对应。

mybatis框架,mysql驱动,mysql数据库 三者之间的关系:

3. 使用 Mybatis
Mybatis,是从数据库中获取数据的。
所以,我们需要明确,我们要从那个数据库当中,获取数据。
3.1 配置文件:连接数据库
我们要在 配置文件 中,配置数据库的信息。
配置文件,使用的是:XXX.yml
配置代码,建议复制粘贴,不要自己手写,容易出错。
代码(配置在 yml配置文件中):
# 数据库连接配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: 你的用户名
password: 你的用户名的密码
driver-class-name: com.mysql.cj.jdbc.Driver
3.2 创建 UserInfo对象:
创建 UserInfo对象,接收 user_info表中,每一行的数据
package org.example.mybatis_demo_20251029.model;
import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer gender; // 1-男 2-女
private String phone;
private Integer deleteFlag; //0-正常 1-删除
private Date create_time;
private Date update_time;
}
3.3 创建 mapper接口,实现接口:
创建 mapper接口,实现接口,读取数据库中,user_info表中的数据:
package org.example.mybatis_demo_20251029.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.example.mybatis_demo_20251029.model.UserInfo;
import java.util.List;
@Mapper
public interface UserInfoMapper {
@Select("select * from user_info")
List<UserInfo> selectAll();
}
查询 User表 的所有信息:
快速生成测试用例(非常重要):
单元测试:
快速生成测试类的方式:
在 Dao层(mapper层)的代码中,鼠标右键,Generate,选择 Text,选择要生成的方法,就可以了。
选择需要测试的方法:
目前只有一个方法,有多个方法时,勾选中那个方法就行。
测试代码:
我们对上述代码,进行修改,使用 循环的方式,获取 List<User> 中的每一个 User对象,并输出。
测试结果:
Test前 & Test后:
快速生成测试用例的界面中,还有两个方法,可以勾选:
效果:

@BeforeEach & @AfterEach,每个方法,有个 Each字符,表示:每一个测试方法执行前,执行后,都会执行被这两个注解标记的
setUp,tearDown方法。
3.4代码分析
数据库规范 和 Java规范:

@Mapper注解:
@Mapper注解:是 Mybatis框架(前身是 ibatis)提供的注解,用于标识一个接口为 MyBatis 的映射器。
MyBatis 会在运行时自动为该接口生成实现类,从而简化数据库操作。
MyBatis 会为标记了 @Mapper 的接口生成代理对象,无需手动编写实现类。
一句话来说:@Mapper 用来标记 mapper接口,并将这个接口,创建对象,交给 Spring进行管理(IOC)。
3.5 实现接口的方式:
实现接口的方式,有两种:
- 注解的方式
- XML的方式
3.6 测试代码:
测试代码,是根目录为 text 文件夹下的代码。
测试代码,是我们开发人员自己写的代码,和测试人员无关。
测试岗位的测试人员,会创建新的工程,测试我们的程序代码,他们可以使用 Java,Python,Go语言等,来测试代码。
@SpringBootTest注解:
@SpringBootTest 是 Spring Boot 提供的一个测试注解,用于在测试环境中启动完整的 Spring 应用上下文。
- 作用:
- 用于集成测试,启动完整的 Spring Boot 应用上下文,模拟真实运行环境。
- 支持自动配置、依赖注入、外部属性加载等功能。
- 使用场景:
- 测试整个应用的集成逻辑,如控制器、服务层、数据访问层等。
- 适用于需要验证 Spring 上下文是否正确加载的场景。
- 特点:
- 自动配置:根据测试需求自动加载 Spring Boot 的默认配置。
- 支持 Web 环境:通过
webEnvironment属性可以指定测试的 Web 环境(如MOCK、RANDOM_PORT等)。 - 依赖注入:支持
@Autowired注入 Bean,方便测试组件间的交互。
建议:所有的 测试类,都加上 @SpringBootTest注解。
@Test:
@Test 是 JUnit 框架中的一个核心注解,用于标记一个方法为测试方法。以下是关于 @Test 注解的详细解释:
- 作用:
- 标记一个方法为测试方法,JUnit 会在运行测试时自动执行这些方法。
- 用于验证代码的逻辑是否符合预期。
- 使用场景:
- 单元测试:测试单个方法或类的行为。
- 集成测试:结合 Spring Boot 或其他框架测试组件间的交互。
- 特点:
- 自动执行:JUnit 会自动运行所有标记了
@Test的方法。 - 断言支持:通常结合断言方法(如
assertThat)验证测试结果。 - 生命周期:每个测试方法都是独立的,JUnit 会为每个方法创建新的测试实例。
- 自动执行:JUnit 会自动运行所有标记了

@Test 可以创建多个 测试方法,每个测试方法都是独立的。
4. 代入 三层架构
我们实现业务,使用的是 三层架构 的方式,去设计代码的。
controller层 调用 service层,service层调用 dao层(mapper)。
如果没有测试方法,我们通过访问 URL 的方式,验证是否读取到数据库中的数据。
使用三层架构的设计方式:
controller层:
package org.example.mybatis_demo_20251029.controller;
import org.example.mybatis_demo_20251029.model.UserInfo;
import org.example.mybatis_demo_20251029.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
@RequestMapping("/findAllUser")
public List<UserInfo> findAllUser() {
return userInfoService.findAllUser();
}
}
service层:
package org.example.mybatis_demo_20251029.service;
import org.example.mybatis_demo_20251029.mapper.UserInfoMapper;
import org.example.mybatis_demo_20251029.model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserInfoService {
@Autowired
private UserInfoMapper userInfoMapper;
public List<UserInfo> findAllUser() {
return userInfoMapper.selectAll();
}
}
mapper层:
package org.example.mybatis_demo_20251029.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.example.mybatis_demo_20251029.model.UserInfo;
import java.util.List;
@Mapper
public interface UserInfoMapper {
@Select("select * from user_info")
List<UserInfo> selectAll();
}
验证结果:
5. 总结:
单元测试:
@SpringBootTest:表明这个类是一个测试类,建议都加上这个注解
@Test:表示这个方法,是用来测试的,每个方法,可以单独运行
@BeforeEach:测试方法执行前执行
@AfterEach:测试方法执行后执行
学会创建 Mybatis的第一个项目,读取数据库,进行测试。
最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!
下一篇博客:Mybatis(2)Mybatis简单查询(参数传递)
更多推荐

所有评论(0)