JPA初級代碼

關聯關係

添加依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

編寫配置文件

#數據源配置數據源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

#配置JPA
#設置方言
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#是否控制檯打印SQL語句
spring.jpa.show-sql=true
#自動生成策略,包括create、create-drop、update、none、validate
spring.jpa.hibernate.ddl-auto=update
#配置對應數據庫
spring.jpa.database=mysql
#設置命名策略
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

類關係
一對一、一對多、多對一、多對多

@OneToOne
一對一
一個人對應一個身份證(別擡槓新舊身份證)
建立實體類

用戶類

import javax.persistence.*;

@Entity
@Table(name = "userinfo")
public class UserInfo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "userId")
    private Integer userId;
    @Column(length = 30)
    private String userName;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "cardId",
            referencedColumnName = "cardId")
private Card card;

//省略getter setter
}

身份類

import javax.persistence.*;

@Entity
@Table(name = "card")
public class Card {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer cardId;
    @Column(length = 50)
private String place;

//省略getter setter
}

Cascade:級聯操作
CascadeType.ALL:所有的級聯操作(增刪改查[CRUD])
CascadeType.DETECH:將另一方一同設置爲遊離狀態
CascadeType.MERGE\REFRESH:代表更新操作
CascadeType.DELETE:刪除
Fetch:加載策略
FetchType.EAGER:即時獲取
FetchType.LAZY:延遲加載(什麼時候使用,什麼時候加載,有可能會跑出no session異常。)

編寫dao

import com.ry.jpademo.domain.UserInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserInfoRepository extends JpaRepository<UserInfo, Integer> {
    
}

@OneToMany
一對多
班級對學生
新建實體類
班級類

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "grade")
public class Grade {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer gradeNo;

    @Column(length = 10)
    private String gradeName;
    //設置一對多關係 級聯關係設置新增、更新
    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    //JoinColumn代表着建立外鍵關係。如果該項不存在,在JPA中,會建立第三張主外鍵維護表。
    @JoinColumn(name = "studentNo")
    private Set<Student> students = new HashSet<>();

//省略getter setter
}

@ManyToOne
多對一
學生對班級
新建實體類
學生類

import javax.persistence.*;

@Entity
@Table(name ="student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer studentNo;

private String studentName;
//設置多對一關係
    //在多的一方,儘量不要設置級聯保存和刪除。
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
    //JoinColumn在設置時,如果有雙向關係,該鍵的名稱必須與一的一方的名稱要一致!
    @JoinColumn(name = "gradeNo")
private Grade grade;

//省略getter setter
}

@ManyToMany
多對多
一個項目組有多個程序員,一個程序員屬於多個項目
會生成第三個表
新建實體類

項目類

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table
public class Program {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer programNO ;

    private String programName ;

    /**
     * 建立多對多關係
     */
    @ManyToMany(mappedBy = "programs",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<Programmer> programmers = new HashSet<>() ;

//省略getter setter
}

程序員類

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table
public class Programmer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer programmerId ;

    private String programmerName ;

    @ManyToMany
    private Set<Program> programs = new HashSet<>() ;

//省略getter setter
}

最終數據庫的生成結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章