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 实现接口的方式:

实现接口的方式,有两种:

  1. 注解的方式
  2. XML的方式

3.6 测试代码:

测试代码,是根目录为 text 文件夹下的代码。

测试代码,是我们开发人员自己写的代码,和测试人员无关。

测试岗位的测试人员,会创建新的工程,测试我们的程序代码,他们可以使用 Java,Python,Go语言等,来测试代码。

@SpringBootTest注解:

@SpringBootTest 是 Spring Boot 提供的一个测试注解,用于在测试环境中启动完整的 Spring 应用上下文。

  1. 作用
    • 用于集成测试,启动完整的 Spring Boot 应用上下文,模拟真实运行环境。
    • 支持自动配置、依赖注入、外部属性加载等功能。
  2. 使用场景
    • 测试整个应用的集成逻辑,如控制器、服务层、数据访问层等。
    • 适用于需要验证 Spring 上下文是否正确加载的场景。
  3. 特点
    • 自动配置:根据测试需求自动加载 Spring Boot 的默认配置。
    • 支持 Web 环境:通过 webEnvironment 属性可以指定测试的 Web 环境(如 MOCKRANDOM_PORT 等)。
    • 依赖注入:支持 @Autowired 注入 Bean,方便测试组件间的交互。

建议:所有的 测试类,都加上 @SpringBootTest注解。

@Test:

@Test 是 JUnit 框架中的一个核心注解,用于标记一个方法为测试方法。以下是关于 @Test 注解的详细解释:

  1. 作用
    • 标记一个方法为测试方法,JUnit 会在运行测试时自动执行这些方法。
    • 用于验证代码的逻辑是否符合预期。
  2. 使用场景
    • 单元测试:测试单个方法或类的行为。
    • 集成测试:结合 Spring Boot 或其他框架测试组件间的交互。
  3. 特点
    • 自动执行:JUnit 会自动运行所有标记了 @Test 的方法。
    • 断言支持:通常结合断言方法(如 assertThat )验证测试结果。
    • 生命周期每个测试方法都是独立的,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简单查询(参数传递)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐