[MyBatis] MyBatis 快速入门(1)

一.为什么使用 Mybatis?

JDBC 操作数据库太麻烦 : 手动获取连接 , 关闭连接 ; 手动设置参数 , 处理结果集 ; 代码重复 ; 维护成本高

Mybatis : 持久层框架 , 用于简化 JDBC 开发

持久层 : 持久化操作层 , 通常是指数据访问层(dao) , 是用来操作数据库的

特点 : 半自动 ORM 框架 ; 简化 JDBC, 支持写 SQL ; 支持注解+XML 两种写法 ; 自动映射结果集 ; 性能高 , 轻量 , 学习成本低

二 . Mybatis 入门

Mybatis 操作数据库的步骤 :

  1. 准备工作(创建 SpringBoot 工程 , 数据库表准备 , 实体类)
  2. 引入 Mybatis 相关依赖 , 配置 Mybatis
  3. 编写 SQL 语句
  4. 测试

1.创建工程

1.1 引入依赖

1.2 数据库准备

sql 复制代码
-- 创建数据库
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');

1.3 配置文件 application.yml

XML 复制代码
spring:
  application:
    name: Mybatis
  # 数据库连接配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

注意 :

password: 更换为自己 mysql 的密码

1.4 实体类

java 复制代码
package com.boop.mybatis.model;

import lombok.Data;

import java.sql.Date;

@Data
    public class UserInfo {
        private Integer id;
        private String username;
        private String password;
        private Byte age;
        private Byte gender;
        private String phone;
        private Byte deleteFlag;
        private Date createTime;
        private Date updateTime;
    }

2.持久层代码

java 复制代码
package com.boop.mybatis.mapper;

import com.boop.mybatis.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserInfoMapper {
    @Select("SELECT * FROM user_info")
    List<UserInfo> selectAll();
}

规范 : Mabatis 持久层接口规范一般命名为 xxxMapper

@Mapper 注解 : 表示 Mybatis 中的 Mapper 接口 ; 程序运行时 , 框架会自动生成接口的实现类对象 , 交给 Spring 进行 IOC 管理

@Select 注解 : 代表 select 查询

2.1 创建单元测试(Test 类)

步骤 :

① 在需要测试的 Mapper 接口中 , 右键->Generate->Test
② 选择对应的 测试方法
③ 书写测试代码
java 复制代码
package com.boop.mybatis.mapper;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Test
    void selectAll() {
        System.out.println(userInfoMapper.selectAll());
    }
}

执行结果 :

注意 : 如果报错 , 请检查 password 和数据库连接

未完!

相关推荐
IvorySQL5 小时前
PG 日报|新增 VACUUM 全维度统计信息补丁迭代
数据库·人工智能·postgresql·ivorysql
白露与泡影8 小时前
Redis 缓存实战:雪崩、穿透、击穿一次讲透
数据库·redis·缓存
赵渝强老师9 小时前
【赵渝强老师】使用Oracle可传输的表空间迁移数据
数据库·oracle
IpdataCloud10 小时前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
wuqingshun31415911 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
空中湖11 小时前
电池简史(五):极限之梦与终章——锂硫、锂空气、量子电池,以及你该知道的电池投资与生活指南
数据库·程序人生
蓝胖子酱12 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
snow@li13 小时前
Redis:数据库语法速查表 / 全景梳理
数据库·redis·缓存
Devlive 开源社区13 小时前
Nebula 1.6.0 发布:跨区域桶自动路由、秒传、文本/PDF 预览一次到位
数据库·sql
这个DBA有点耶14 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范