在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


MyBatis 操作数据库操作


数据准备


创建用户表,并创建对应的实体类User。

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;

-- 使用数据库
USE mybatis_test;

-- 创建表[用户表]
DROP TABLE IF EXISTS user_info;
CREATE TABLE `user_info` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(127) NOT NULL,
    `password` VARCHAR(127) NOT NULL,
    `age` TINYINT(4) NOT NULL,
    `gender` TINYINT(4) DEFAULT '0' COMMENT '1-男 2-女 0-默认',
    `phone` VARCHAR(15) DEFAULT NULL,
    `delete_flag` TINYINT(4) DEFAULT 0 COMMENT '0-正常, 1-删除',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

-- 添加用户信息
INSERT INTO user_info(username, `password`, age, gender, phone)
VALUES ('admin', 'admin', 18, 1, '18612340001');

INSERT INTO user_info(username, `password`, age, gender, phone)
VALUES ('zhangsan', 'zhangsan', 18, 1, '18612340002');

INSERT INTO user_info(username, `password`, age, gender, phone)
VALUES ('lisi', 'lisi', 18, 1, '18612340003');

INSERT INTO user_info(username, `password`, age, gender, phone)
VALUES ('wangwu', 'wangwu', 18, 1, '18612340004');

规范:

  • 数据库字段:
    • 全部小写,单词之间用下划线"_"分割
  • Java 字段:
    • 属性使用小驼峰来表示

SQL:on update


在这里插入图片描述


在这里插入图片描述


创建对应的实体类UserInfo。

实体类的属性名与表中的字段名一一对应。

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;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

在这里插入图片描述


写持久层代码


在项目中,创建持久层接口UserInfoMapper

在这里插入图片描述


接下来,我们在 idea 中实现一个简单的 SQL 语句;

在这里插入图片描述


@ Select 的使用方法


在这里插入图片描述

通过 @Select 注解,我们也不需要再创建一个接口类来实现接口,再把该类交给 Spring 管理,Mybatis 会根据该注解,自动实现接口中的方法,并且把接口实例化成对象,再存入容器中;


@ Mapper 的使用方法


在这里插入图片描述

  • Mybatis 的持久层接口规范一般都叫XxxMapper

  • @ Mapper注解
    • 表示是MyBatis中的Mapper接口
    • 程序运行时,框架会自动生成接口的实现类对象(代理对象),并给交Spring的IOC容器管理。

  • @ Select 注解
    • 代表的就是 select 查询,也就是注解对应方法的具体实现内容。

在这里插入图片描述

  • 以上两个注解都是来自 ibatis,而不是来自 Spring;

  • Mybatis 和 Spring 无关,ibatis 是 Mybatis 的前身;


单元测试


在创建出来的SpringBoot工程中,在src下的test目录下,已经自动帮我们创建好了测试类,我们可以直接使用这个测试类来进行测试。


使用 idea 自动生成测试类


在这里插入图片描述


测试代码(1)


@ SpringBootTest 的使用方法和依赖说明


在这里插入图片描述

在这里插入图片描述

  • 测试类上添加了注解 @SpringBootTest,该测试类在运行时,就会自动加载 Spring 的运行环境。

  • 测试类需要使用 Spring 的运行环境,比如注入某个 bean ,才需要使用到 @SpringBootTest 注解;

  • 我们通过@Autowired这个注解,注入我们要测试的类,就可以开始进行测试了。


在这里插入图片描述


运行结果如下:

在这里插入图片描述

返回结果中,可以看到,只有SQL语句中查询的列对应的属性才有赋值。


测试代码(2)


我们再举一个测试类的例子:

在这里插入图片描述


测试类获取启动类对象规范方法


在 IoC 章节的学习中我们了解到,直接修改启动类中创建一个对象,再从其他类中获取的方法是不合理的;

在这里插入图片描述


我们可以采取直接注入的方法,来获取启动类的对象:

在这里插入图片描述


正确导入上下文对应包


我们重新导入正确的包:

在这里插入图片描述


在这里插入图片描述


Stream( ) 对应的循环打印 API


在这里插入图片描述


程序运行结果:

在这里插入图片描述


上图的打印方式是通过 lamda 表达式进行循环打印

bean 就是 UserInfoMapper(用来操作数据库的"工具");

在这里插入图片描述

selectAll() 是在 UserInfoMapper 里写的方法(对应SQL:select * from user_info


结果:从数据库拿到了所有的用户数据,存在一个 List<UserInfo> 列表里:

1. 执行SQL查询
SELECT * FROM user_info
2. 转换为流水线
3. 逐个遍历元素
4. 打印x到控制台
bean.selectAll
List
Stream
forEach
控制台输出

下图表示的是两种等价的打印方式,stream() 只是更简洁的写法,适合简单的遍历操作

在这里插入图片描述


应用分层


应用分层:

在这里插入图片描述


在这里插入图片描述


重新启动程序,打开页面 :127.0.0.1:8080/user/getAllUser

在这里插入图片描述


单元测试补充:@BeforeEach & @AfterEach


在这里插入图片描述


在这里插入图片描述


自动生成方法:

在这里插入图片描述

说明:

  • @BeforeEach,@AfterEach 表示的是每一个测试方法执行前执行/每一个测试方法执行后执行;

  • 这两个注解针对一个测试类的所有测试方法生效,有几个测试方法就会执行几次;


运行测试代码:

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

Logo

一站式 AI 云服务平台

更多推荐