SpringDataJpa的使用之一對(duì)一、一對(duì)多、多對(duì)多?關(guān)系映射問(wèn)題
SpringDataJpa的使用 -- 一對(duì)一、一對(duì)多、多對(duì)多 關(guān)系映射
本文主要講述 @OneToOne、@OneToMany、@ManyToOne、@ManyToMany 這四個(gè)關(guān)系映射注解的使用,以及其對(duì)應(yīng)的級(jí)聯(lián)關(guān)系
有四張表,分別是:學(xué)生表、家長(zhǎng)表、教室表、教師表,它們的關(guān)聯(lián)關(guān)系如下:
- 學(xué)生 對(duì) 家長(zhǎng):一對(duì)一
- 學(xué)生 對(duì) 教室:多對(duì)一
- 學(xué)生 對(duì) 教師:多對(duì)多
項(xiàng)目依賴(lài)
必要的依賴(lài)有:mysql驅(qū)動(dòng)、SpringBootWeb、SpringBootStarter、SpringDataJpa、SpringBootText、druid,其它的依賴(lài)可以按需添加。 如:lombok、
pom.xml 必要依賴(lài)
<!-- Spring Boot 都使用 2.4.5,看個(gè)人習(xí)慣 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.4.5</version>
<scope>runtime</scope>
</dependency>
<!-- Spring Data JPA 使用 2.6.1,看個(gè)人習(xí)慣 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.6.1</version>
</dependency>
<!-- mysql 驅(qū)動(dòng) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
<scope>runtime</scope>
</dependency>
<!-- druid 數(shù)據(jù)庫(kù)連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.24</version>
</dependency>pom.xml 可選依賴(lài)
<!-- Spring 熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.4.5</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>項(xiàng)目配置
application.yaml
spring:
# DataSource
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: 賬號(hào)
password: 密碼
# serverTimezone可以設(shè)置為北京時(shí)間GMT%2B8、上海時(shí)間Asia/Shanghai或者香港時(shí)間Hongkong
url: jdbc:mysql://localhost:3306/cloudtext?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
# DataBase Connection -- JPA
jpa:
# 顯示 SQL 語(yǔ)句
show-sql: true
# 不允許在視圖階段 執(zhí)行 sql
open-in-view: false
# 建議設(shè)置一個(gè)不常用的,避免沖突
server:
# 項(xiàng)目端口號(hào)
port: 8092
# 項(xiàng)目路徑
servlet:
context-path: /jpasql文件(MySQL版)
cloudText.sql 僅結(jié)構(gòu)
-- ---------------------------- -- Table structure for classroom -- ---------------------------- DROP TABLE IF EXISTS `classroom`; CREATE TABLE `classroom` ( `class_room_id` tinyint unsigned NOT NULL AUTO_INCREMENT COMMENT '班級(jí)主鍵', `class_room_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '班級(jí)名稱(chēng)', `class_room_location` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '班級(jí)位置', `class_room_capacity` int unsigned DEFAULT NULL COMMENT '班級(jí)人數(shù)', `class_room_grade` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '班級(jí)年級(jí)', PRIMARY KEY (`class_room_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; -- ---------------------------- -- Table structure for patriarch -- ---------------------------- DROP TABLE IF EXISTS `patriarch`; CREATE TABLE `patriarch` ( `patriarch_id` tinyint unsigned NOT NULL AUTO_INCREMENT COMMENT '家長(zhǎng)主鍵', `patriarch_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '家長(zhǎng)姓名', `patriarch_age` int unsigned DEFAULT NULL COMMENT '家長(zhǎng)年齡', `patriarch_sex` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '家長(zhǎng)性別', `patriarch_phone` varchar(11) COLLATE utf8_bin DEFAULT NULL COMMENT '家長(zhǎng)電話', `patriarch_address` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '家長(zhǎng)住址', PRIMARY KEY (`patriarch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `student_id` tinyint unsigned NOT NULL AUTO_INCREMENT COMMENT '學(xué)生主鍵', `student_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '學(xué)生姓名', `student_age` int unsigned DEFAULT NULL COMMENT '學(xué)生年齡', `student_sex` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '學(xué)生性別', `patriarch_id` tinyint unsigned NOT NULL COMMENT '家長(zhǎng)外鍵', `class_room_id` tinyint unsigned DEFAULT NULL COMMENT '班級(jí)外鍵', PRIMARY KEY (`student_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; -- ---------------------------- -- Table structure for student_teacher -- ---------------------------- DROP TABLE IF EXISTS `student_teacher`; CREATE TABLE `student_teacher` ( `student_id` tinyint unsigned NOT NULL COMMENT '學(xué)生主鍵', `teacher_id` tinyint unsigned NOT NULL COMMENT '教師主鍵', PRIMARY KEY (`student_id`,`teacher_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; -- ---------------------------- -- Table structure for teacher -- ---------------------------- DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `teacher_id` tinyint unsigned NOT NULL AUTO_INCREMENT COMMENT '教師主鍵', `teacher_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '教師姓名', `teacher_age` int unsigned DEFAULT NULL COMMENT '教師年齡', `teacher_sex` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '教師性別', `teacher_course` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '教師教授科目', PRIMARY KEY (`teacher_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
級(jí)聯(lián)關(guān)系簡(jiǎn)述
- ALL -- 級(jí)聯(lián)
所有操作 - PERSIST -- 級(jí)聯(lián)
持久化操作 - MERGE -- 級(jí)聯(lián)
合并操作 - REMOVE -- 級(jí)聯(lián)
刪除操作 - REFRESH -- 級(jí)聯(lián)
刷新操作(調(diào)用refresh方法才會(huì)刷新) - DETACH -- 級(jí)聯(lián)
分離操作(2.0版本才有)
參考:《Spring Boot 整合——JPA 數(shù)據(jù)模型關(guān)聯(lián)操作(一對(duì)一、一對(duì)多、多對(duì)多)》
參考:《cascade級(jí)聯(lián)關(guān)系》
@OneToOne 一對(duì)一 關(guān)系映射
一對(duì)一關(guān)系的雙方必須有且僅有一方放棄維護(hù),在 @OneToOne 中添加mappedBy屬性表示放棄維護(hù)。
學(xué)生類(lèi)(Student.java):維護(hù)方 家長(zhǎng)類(lèi)(Patriarch.java):被維護(hù)方
Student.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* 學(xué)生 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "STUDENT")
public class Student {
/**
* 學(xué)生 id
*/
@Id
@Column(name = "student_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long studentId;
/**
* 學(xué)生 姓名
*/
@Column(name = "student_name", nullable = false)
private String studentName;
/**
* 學(xué)生 年齡
*/
@Column(name = "student_age", nullable = false)
private Short studentAge;
/**
* 學(xué)生 性別
*/
@Column(name = "student_sex", nullable = false)
private String studentSex;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}Patriarch.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* 家長(zhǎng) 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "PATRIARCH")
public class Patriarch {
/**
* 家長(zhǎng) id
*/
@Id
@Column(name = "patriarch_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long patriarchId;
/**
* 家長(zhǎng) 姓名
*/
@Column(name = "patriarch_name", nullable = false)
private String patriarchName;
/**
* 家長(zhǎng) 年齡
*/
@Column(name = "patriarch_age")
private Short patriarchAge;
/**
* 家長(zhǎng) 性別
*/
@Column(name = "patriarch_sex", nullable = false)
private String patriarchSex;
/**
* 家長(zhǎng) 電話
*/
@Column(name = "patriarch_phone", nullable = false, length = 11)
private String patriarchPhone;
/**
* 家長(zhǎng) 住址
*/
@Column(name = "patriarch_address", nullable = false)
private String patriarchAddress;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}1.無(wú)中間表,維護(hù)方添加外鍵,被維護(hù)方添加對(duì)應(yīng)項(xiàng)
cascade = CascadeType.ALL 表示:級(jí)聯(lián)關(guān)系。
fetch = FetchType.EAGER 表示:預(yù)加載。
name = "patriarch_id" 指定外鍵。
nullable = false 表示:不能為空。
unique = true 表示:不能重復(fù)。
mappedBy = "patriarch" :添加了這個(gè)屬性表示放棄維護(hù)。
維護(hù)方的屬性添加到 Student.java 中。
被維護(hù)方的屬性添加到 Patriarch.java 中。
/**
* 一對(duì)一
* 家長(zhǎng) 外鍵
* 維護(hù)方
* 使用 CascadeType.ALL 亦可,區(qū)別不大
*/
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.REMOVE}, fetch = FetchType.EAGER)
@JoinColumn(name = "patriarch_id", nullable = false, unique = true)
private Patriarch patriarch;
/**
* 一對(duì)一
* 被維護(hù)方(對(duì)應(yīng)項(xiàng))
* 使用 CascadeType.ALL 亦可,區(qū)別不大
*/
@OneToOne(mappedBy = "patriarch", cascade = {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE}, fetch = FetchType.EAGER)
private Student student;
/** 注意,外鍵及對(duì)應(yīng)項(xiàng)的 Getter、Setter 不要忘了 */2.無(wú)中間表,維護(hù)方添加外鍵,被維護(hù)方不添加對(duì)應(yīng)項(xiàng)
cascade = CascadeType.ALL 表示:級(jí)聯(lián)關(guān)系。
fetch = FetchType.EAGER 表示:預(yù)加載。
name = "patriarch_id" 指定外鍵。
nullable = false 表示:不能為空。
unique = true 表示:不能重復(fù)。
維護(hù)方的屬性添加到 Student.java 中。
/**
* 一對(duì)一
* 家長(zhǎng) 外鍵
* 維護(hù)方
* 使用 CascadeType.ALL 亦可,區(qū)別不大
*/
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.REMOVE}, fetch = FetchType.EAGER)
@JoinColumn(name = "patriarch_id", nullable = false, unique = true)
private Patriarch patriarch;
/**
* 一對(duì)一
* 被維護(hù)方(對(duì)應(yīng)項(xiàng)),不需要添加對(duì)應(yīng)項(xiàng)
* 使用 CascadeType.ALL 亦可,區(qū)別不大
*/
/**
* @OneToOne(mappedBy = "patriarch", cascade = {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE}, fetch = FetchType.EAGER)
* private Student student;
*/
/** 注意,外鍵的 Getter、Setter 不要忘了 */3.有中間表,維護(hù)方不添加外鍵,被維護(hù)方不添加對(duì)應(yīng)項(xiàng)
暫缺,這不是本文重點(diǎn),以后可能會(huì)添加。
不需要使用關(guān)系注解 @OneToOne、@OneToMany、@ManyToOne、@ManyToMany,沒(méi)有外鍵。
@OneToMany、@ManyToOne 一對(duì)多 關(guān)系映射
一對(duì)多關(guān)系中,多方必須維護(hù)外鍵,一方一般不維護(hù)(我在某篇文章中看到:說(shuō)一方也可以維護(hù)外鍵,我還未驗(yàn)證)。
學(xué)生類(lèi)(Student.java):維護(hù)方
教室類(lèi)(ClassRoom.java):被維護(hù)方
Student.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* 學(xué)生 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "STUDENT")
public class Student {
/**
* 學(xué)生 id
*/
@Id
@Column(name = "student_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long studentId;
/**
* 學(xué)生 姓名
*/
@Column(name = "student_name", nullable = false)
private String studentName;
/**
* 學(xué)生 年齡
*/
@Column(name = "student_age", nullable = false)
private Short studentAge;
/**
* 學(xué)生 性別
*/
@Column(name = "student_sex", nullable = false)
private String studentSex;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}ClassRoom.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* 教室 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "CLASSROOM")
public class ClassRoom {
/**
* 教室 id
*/
@Id
@Column(name = "classRoom_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long classRoomId;
/**
* 教室 名稱(chēng)
*/
@Column(name = "classRoom_name", nullable = false)
private String classRoomName;
/**
* 教室 位置
*/
@Column(name = "classRoom_location", nullable = false)
private String classRoomLocation;
/**
* 教室 容量
*/
@Column(name = "classRoom_capacity", nullable = false)
private Short classRoomCapacity;
/**
* 教室 所在的 班級(jí)的年級(jí)(小學(xué)到高中)
*/
@Column(name = "classRoom_grade", nullable = false)
private String classRoomGrade;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}1.無(wú)中間表,多方維護(hù)并添加外鍵,一方被維護(hù)
cascade = CascadeType.XXX 表示:級(jí)聯(lián)關(guān)系。
fetch = FetchType.EAGER 表示:預(yù)加載。
name = "classRoom_id" 指定外鍵。
nullable = false 表示:不能為空。
mappedBy = "classRoom" :添加了這個(gè)屬性表示放棄維護(hù),在一對(duì)多的一方用來(lái)指向多方的那個(gè)外鍵屬性。
/**
* 多對(duì)一
* 多方
* 教室外鍵
* 維護(hù)方,級(jí)聯(lián)關(guān)系為 none(沒(méi)有,默認(rèn))
*/
@JoinColumn(name = "classRoom_id", nullable = false)
@ManyToOne(fetch = FetchType.EAGER)
private ClassRoom classRoom;
/**
* 一對(duì)多
* 一方
* (被)維護(hù)方(對(duì)應(yīng)項(xiàng))
* 被維護(hù)方代碼
*/
@OneToMany(mappedBy = "classRoom", cascade = {CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
private List<Student> studentList;
/** 注意,外鍵及對(duì)應(yīng)項(xiàng)的 Getter、Setter 不要忘了 */2.有中間表,多方維護(hù),一方被維護(hù)
暫缺,這不是本文重點(diǎn),以后可能會(huì)添加。
不需要使用關(guān)系注解 @OneToOne、@OneToMany、@ManyToOne、@ManyToMany,沒(méi)有外鍵。
3.無(wú)中間表,多方維護(hù),一方也維護(hù)
暫缺,待驗(yàn)證。
@ManyToMany 多對(duì)多 關(guān)系映射
多對(duì)多關(guān)系中,必須有且僅有一方放棄維護(hù)外鍵,需要新建中間表,但不需要寫(xiě)對(duì)應(yīng)的實(shí)體類(lèi)。
學(xué)生類(lèi)(Student.java):維護(hù)方
教師類(lèi)(Teacher.java):被維護(hù)方
Student.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* 學(xué)生 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "STUDENT")
public class Student {
/**
* 學(xué)生 id
*/
@Id
@Column(name = "student_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long studentId;
/**
* 學(xué)生 姓名
*/
@Column(name = "student_name", nullable = false)
private String studentName;
/**
* 學(xué)生 年齡
*/
@Column(name = "student_age", nullable = false)
private Short studentAge;
/**
* 學(xué)生 性別
*/
@Column(name = "student_sex", nullable = false)
private String studentSex;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}Teacher.java (主鍵和非外鍵屬性)
package com.ljm.exmaple.entity;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
/**
* 教師 類(lèi)
*
* @author LJM
*/
@Entity
@Table(name = "TEACHER")
public class Teacher {
/**
* 教師 id
*/
@Id
@Column(name = "teacher_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long teacherId;
/**
* 教師 姓名
*/
@Column(name = "teacher_name", nullable = false)
private String teacherName;
/**
* 教師 年齡
*/
@Column(name = "teacher_age")
private Integer teacherAge;
/**
* 教師 性別
*/
@Column(name = "teacher_sex", nullable = false)
private String teacherSex;
/**
* 教師 所教的 科目
*/
@Column(name = "teacher_course", nullable = false)
private String teacherCourse;
/** 省略 Constructor、Getter、Setter、toString 方法 **/
}fetch = FetchType.EAGER 表示:預(yù)加載。
name = "student_teacher" 指定關(guān)聯(lián)關(guān)系表。
joinColumns = @JoinColumn(name = "student_id") 指定我方在關(guān)聯(lián)表中對(duì)應(yīng)的主鍵。
inverseJoinColumns = @JoinColumn(name = "teacher_id") 指定被維護(hù)方在關(guān)聯(lián)表中對(duì)應(yīng)的主鍵。
mappedBy = "teacherList" :添加了這個(gè)屬性表示放棄維護(hù),維護(hù)方用來(lái)指向另一方的那個(gè)外鍵屬性。
/** * 多對(duì)多 * 維護(hù)方 * 教師 外鍵 * 級(jí)聯(lián)關(guān)系為 none(沒(méi)有,默認(rèn)),雙方互不干擾 */ @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "student_teacher", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "teacher_id")) private List<Teacher> teacherList; /** * 多對(duì)多 * 被維護(hù)方 * 學(xué)生 外鍵(對(duì)應(yīng)項(xiàng)) * 級(jí)聯(lián)關(guān)系為 none(沒(méi)有,默認(rèn)),雙方互不干擾 */ @ManyToMany(mappedBy = "teacherList", fetch = FetchType.EAGER) private List<Student> studentList; /** 注意,外鍵及對(duì)應(yīng)項(xiàng)的 Getter、Setter 不要忘了 */
本文參考
Spring Data JPA之一對(duì)一,一對(duì)多,多對(duì)多關(guān)系映射
到此這篇關(guān)于SpringDataJpa的使用之一對(duì)一、一對(duì)多、多對(duì)多 關(guān)系映射的文章就介紹到這了,更多相關(guān)SpringDataJpa使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud的Gateway網(wǎng)關(guān)詳解
這篇文章主要介紹了SpringCloud的Gateway網(wǎng)關(guān)詳解,Gateway 是 Spring Cloud 官方推出的一個(gè)基于 Spring 5、Spring Boot 2 和 Project Reactor 的 API 網(wǎng)關(guān)實(shí)現(xiàn),本文將介紹 Spring Cloud Gateway 的基本概念、核心組件以及如何配置和使用它,需要的朋友可以參考下2023-09-09
IDEA中JDK是1.8但Java版本只有21和17的解決辦法
JDK 1.8(Java Development Kit 1.8)是Java平臺(tái)的一個(gè)版本,它包含了用于開(kāi)發(fā)和運(yùn)行Java應(yīng)用程序的工具和庫(kù),下面這篇文章主要給大家介紹了關(guān)于IDEA中JDK是1.8但Java版本只有21和17的解決辦法,需要的朋友可以參考下2024-01-01
Java的Swing編程中使用SwingWorker線程模式及頂層容器
這篇文章主要介紹了在Java的Swing編程中使用SwingWorker線程模式及頂層容器的方法,適用于客戶端圖形化界面軟件的開(kāi)發(fā),需要的朋友可以參考下2016-01-01
詳解Java枚舉類(lèi)在生產(chǎn)環(huán)境中的使用方式
本文主要介紹了Java枚舉類(lèi)在生產(chǎn)環(huán)境中的使用方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
使用Java讀取Excel文件數(shù)據(jù)的方法詳解
通過(guò)編程方式讀取Excel數(shù)據(jù)能實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入、批量處理、數(shù)據(jù)比對(duì)和更新等任務(wù)的自動(dòng)化,本文為大家介紹了三種Java讀取Excel文件數(shù)據(jù)的方法,需要的可以參考下2024-01-01
超級(jí)好用的輕量級(jí)JSON處理命令jq(最新推薦)
jq是一個(gè)輕量級(jí)的命令行工具,讓你可以非常方便地處理JSON數(shù)據(jù),如切分、過(guò)濾、映射、轉(zhuǎn)化等,就像sed、awk、grep文本處理三劍客一樣,這篇文章主要介紹了超級(jí)好用的輕量級(jí)JSON處理命令jq,需要的朋友可以參考下2023-01-01
java無(wú)限遞歸遍歷json對(duì)象問(wèn)題
這篇文章主要介紹了java無(wú)限遞歸遍歷json對(duì)象問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

