在Spring Boot中整合MySQL是為了讓開發者能夠輕鬆地與MySQL資料庫進行互動。本篇文章將指導你如何在Spring Boot 3.2.3專案中使用Gradle來整合MySQL。在此之前,我們需要在Ubuntu 22.04上安裝MySQL 8作為我們的資料庫伺服器。
安裝MySQL8
本文是在wsl2上的Ubuntu 22.04上安裝MySQL8.
步驟1: 更新系統
開啟終端,並使用以下命令更新系統:
apt update
apt upgrade
步驟2: 安裝MySQL
使用以下命令安裝MySQL伺服器:
apt install mysql-server
步驟3: 啟動MySQL服務
安裝完成後,啟動MySQL服務, WSL子系統Ubuntu中不包含systemctl命令,使用service命令。
service mysql start
步驟4: 驗證MySQL安裝
透過以下命令驗證MySQL是否正在執行:
service mysql status
我們還可以用檢視程序
ps -ef | grep mysql
如果一切正常,你將看到MySQL服務正在執行的資訊。
步驟5: 登入Mysql
第一種登入方法
root使用者沒有設定密碼,不能從本地登入,可以使用sudo命令進入,此時不需要輸入密碼回車即可進入。
mysql -u root -p
第二種登入方法
MySQL在安裝時會建立很多預設使用者,其中就包含一個 debian-sys-maint,並且建立了該使用者的隨機密碼,儲存該使用者資訊的檔案位於 /etc/mysql/debian.cnf檔案中。
可以利用debian-sys-main使用者登入MySQL。
步驟6: 更改root使用者密碼
修改 root 密碼 mysql 8.+ 的修改密碼方式
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
flush privileges;
步驟7: 設定root使用者的遠端訪問
此時root使用者的host屬性仍然是localhost,也就是隻能從本地訪問,因此可以將root使用者的訪問許可權由本地改為本地和外部都可以訪問,將host的值由localhost改為 %。
update user set user.host='%' where user.user='root';
flush privileges;
WSL中的Ubuntu子系統訪問可以直接使用127.0.0.1或localhost進行訪問。但是在外部一旦換成Ubuntu真正的IP地址訪問就會報錯。這時還需要修改MySQL配置檔案中的相關配置項 /etc/mysql/mysql.conf.d/mysqld.cnf, 修改 bind-address = 0.0.0.0 。
重啟MySQL後,再次透過IP地址遠端連線。
步驟8: 建立資料庫
使用root使用者登入Mysql,建立一個test的資料庫
CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
步驟9: 建立資料表
建立一張user的表
CREATE TABLE user (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '學生ID',
name VARCHAR(20) NOT NULL COMMENT '姓名',
email VARCHAR(20) COMMENT '郵箱',
age INT COMMENT '年齡',
remark VARCHAR(80) COMMENT '備註',
PRIMARY KEY (id), /*設定id為主鍵*/
INDEX (name) /*設定name為普通索引*/
) ENGINE=InnoDB;
步驟9: 插入資料
在user表中插入一條資料
INSERT INTO test.user (id, name, email, age, remark) VALUES (1, 'jack', 'jack@163.com', 18, '關注公眾號:程式碼匠心');
新增依賴
首先,你需要在build.gradle檔案中新增Spring Boot的starter-data-jpa和MySQL驅動的依賴。
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.3'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'cn.daimajiangxin'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
targetCompatibility = '17'
}
repositories {
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java:8.0.17'
}
配置Spring Boot資料來源
在src/main/resources/application.properties或application.yaml檔案中,配置資料來源和JPA的相關設定。確保使用你在MySQL安裝過程中設定的root密碼。
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=your_mysql_root_password
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
application.yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
username: root
password: your_mysql_root_password
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: true
確保將your_database_name和your_mysql_root_password替換為實際的資料庫名稱和root使用者的密碼。
建立實體
建立一個簡單的實體類,使用JPA註解來對映到資料庫表。
package cn.daimajiangxin.springboot.learning.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;
@Data
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private int age;
private String remark;
}
建立Repository
建立一個繼承自JpaRepository的介面,以便Spring Data JPA可以自動為你生成實現。
package cn.daimajiangxin.springboot.learning.repository;
import cn.daimajiangxin.springboot.learning.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// 你可以新增自定義查詢方法
}
建立Service
建立一個服務類來處理業務邏輯。
package cn.daimajiangxin.springboot.learning.repository;
import cn.daimajiangxin.springboot.learning.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
// 新增其他業務邏輯方法...
}
建立Controller
建立一個控制器類來處理HTTP請求。
package cn.daimajiangxin.springboot.learning.controller;
import cn.daimajiangxin.springboot.learning.model.User;
import cn.daimajiangxin.springboot.learning.repository.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
// 新增其他請求處理方法...
}
執行應用程式
現在,你可以執行你的Spring Boot應用程式,並嘗試訪問來http://localhost:8080/users檢視所有使用者的列表。
確保你的MySQL資料庫正在執行,並且已經建立了相應的資料庫和表,並且插入了資料。
總結
在Spring Boot中整合MySQL是一項簡單而直接的任務,只需新增依賴、配置資料來源、建立實體、Repository、Service和Controller即可。在本文中,我們學習瞭如何在Spring Boot 3.2.3專案中使用Gradle來整合MySQL,並構建了一個簡單的RESTful API來獲取使用者列表。記得根據你的實際需求來調整資料庫配置和業務邏輯。
我是程式碼匠心,和我一起學習更多精彩知識!!!掃描二維碼!關注我,實時獲取推送。
源文來自:https://daimajiangxin.cn