MyBatis 安裝與入門

📢 本文由 gemini-3-flash-preview 翻譯

MyBatis 系列

MyBatis 安裝與入門:本文
MyBatis 使用: https://blog.yexca.net/zh-tw/archives/216

MyBatis 是一款優秀的持久層框架,用於簡化 JDBC 的開發。

MySQL 安裝 Windows

下載: https://dev.mysql.com/downloads/mysql/

下載 ZIP Archive

解壓縮,環境變數設定 MYSQL_HOME PATH 路徑 %MYSQL_HOME%\bin

管理員權限開啟 cmd,輸入 mysql 檢測是否設定成功。

初始化 MySQL

輸入命令:

1
mysqld --initialize-insecure

稍等片刻,會在 MySQL 目錄生成 data 資料夾。

註冊 MySQL 服務

命令:

1
mysqld -install

啟動 MySQL 服務

命令:

1
2
3
4
# 啟動 mysql 服務
net start mysql
# 停止 mysql 服務
net stop mysql

修改 root 密碼

命令:

1
mysqladmin -u root password 1234

登入參數:

1
2
3
4
mysql -u 用戶名 -p 密碼 -h 要連線的 mysql 伺服器的 ip 地址 (預設 127.0.0.1) -P 埠號 (預設 3306)
# 例如
mysql -u root -p
# 執行後會提示輸入密碼

入門範例

首先建立 SpringBoot 專案,勾選 MyBatis FrameworkMySQL Driver 相依性。

  1. 資料庫
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
create database mybatis;

use mybatis;

create table user(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(100) comment '姓名',
    age tinyint unsigned comment '年齡',
    gender tinyint unsigned comment '性別, 1:男, 2:女',
    phone varchar(11) comment '手機號碼'
) comment '用戶表';

insert into user(id, name, age, gender, phone) VALUES (null,'白眉鷹王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛獅王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龍王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
  1. application.properties
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 設定資料庫連線資訊

# 驅動程式類別名稱
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 資料庫連線的 url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
# 連線資料庫的帳號
spring.datasource.username=root
# 連線資料庫的密碼
spring.datasource.password=1234
  1. User 類別
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class User {
    private Integer id;
    private String name;
    private short age;
    private short gender;
    private String phone;

    public User() {
    }

    public User(Integer id, String name, short age, short gender, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public short getAge() {
        return age;
    }

    public void setAge(short age) {
        this.age = age;
    }

    public short getGender() {
        return gender;
    }

    public void setGender(short gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }
}
  1. UserMapper 介面
1
2
3
4
5
6
@Mapper // 在執行時,會自動生成該介面的實作類別物件(代理物件),並且將該物件交由 IOC 容器管理
public interface UserMapper {
    // 此處採用註解撰寫 SQL 語句
    @Select("select * from user")
    public List<User> list();
}
  1. 測試類別
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@SpringBootTest
class MybatisStartApplicationTests {
    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        List<User> list = userMapper.list();
        list.forEach(System.out::println);
    }

}

資料庫連線池

資料庫連線池是一個容器,負責分配、管理資料庫連線 (Connection)。

它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個。

釋放閒置時間超過最大閒置時間的連線,來避免因為沒有釋放連線而引起的資料庫連線遺漏。

優勢:資源複用、提升系統回應速度。

官方提供標準介面:DataSource

常見產品:Hikari (SpringBoot 預設)、Druid。

Lombok

在上述範例中,User 類別雖然只定義了幾個屬性,但需要很多方法從而使得程式碼臃腫,為此可以使用 Lombok。

Lombok 是一個實用的 Java 類別庫,能透過註解的形式自動生成建構子、getter/setter、equals、hashcode、toString 等方法,並可以自動化生成日誌變數,簡化 Java 開發、提高效率。

註解作用
@Getter/@Setter為所有的屬性提供 get/set 方法
@ToString會給類別自動生成易閱讀的 toString 方法
@EqualsAndHashCode根據類別所擁有的非靜態欄位自動重寫 equals 方法和 hashCode 方法
@Data提供了更綜合的生成程式碼功能 (@Getter+@Setter+@ToString +@EqualsAndHashCode)
@NoArgsConstructor為實體類別生成無參數的建構子方法
@AllArgsConstructor為實體類別生成除了 static 修飾的欄位之外帶有各參數的建構子方法

引入 Lombok

引入相依性,不需要版本號,已經被 SpringBoot 設定:

1
2
3
4
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

User 類別

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private short age;
    private short gender;
    private String phone;
}

Lombok 會在編譯時,自動生成對應的 Java 程式碼,使用 Lombok 需要安裝一個外掛程式,不過 IDEA 預設已安裝。