编程知识 cdmana.com

Spring combat (3) -- JPA

JAP yes spring Integrate Persistent components simplify sql The operation process , Here's how it works

First step :

 stay pom Import in file JPA Related dependence of  
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
 And configure the database connection 
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

The second step

 Create a solid object ( The entity object corresponds to the database table )
package com.spring.entity;

import javax.persistence.*;

@Entity // This is an entity class 
@Table(name = "t_order") // Set the table name of the entity in the database 
public class Order {
   
   

    @Id // Primary key must be set id Indicates that the field is id  If it does not exist, an error will be created 
    @GeneratedValue(strategy = GenerationType.AUTO) // Set primary key properties 
    @Column(name = "oid")
    private Integer oid;

    @Column(name = "orderName")
    private String orderName;

    @Column(name = "number")
    private Integer number;

    @Column(name = "address")
    private String address;

    public Integer getOid() {
   
   
        return oid;
    }

    public void setOid(Integer oid) {
   
   
        this.oid = oid;
    }

    public String getOrderName() {
   
   
        return orderName;
    }

    public void setOrderName(String orderName) {
   
   
        this.orderName = orderName;
    }

    public Integer getNumber() {
   
   
        return number;
    }

    public void setNumber(Integer number) {
   
   
        this.number = number;
    }

    public String getAddress() {
   
   
        return address;
    }

    public void setAddress(String address) {
   
   
        this.address = address;
    }
}

@Entity This is an entity class

@Table(name = “t_order”) Set the table name of the entity in the database

@Id Primary key must be set id Indicates that the field is id If it does not exist, an error will be created

@GeneratedValue annotation , stay JPA in ,@GeneratedValue The meaning of annotation is to generate a unique primary key for an entity (JPA Every entity is required to Entity, There must be and only one primary key ),@GeneratedValue Provides the primary key generation strategy .@GeneratedValue Annotations have two properties , Namely strategy and generator, among generator The value of the property is a string , The default is "", It declares the name of the primary key generator ( Corresponding to the primary key generator with the same name @SequenceGenerator and @TableGenerator).
Specific notes introduce @GeneratedValue Annotations,

@Column(name = “oid”) Set the field name corresponding to the table in the database

list establish One to many Many to many For one more One to one annotations use

  • ManyToOne( For one more ) ManyToOne( For one more ) A one-way : No middle table , But you can use @Joincolumn(name=" ") To specify the name of the generated foreign key , Foreign keys are generated in multiple party tables !
  • OneToMany( One to many ) OneToMany( One to many ) A one-way : Intermediate table will be generated , You can use @onetoMany @Joincolumn(name=" ") Avoid creating intermediate tables , And the name of the foreign key ( Do not look @joincolumn In one, it says , But it's in the multiple table )
  • OneToMany ,ManyToOne OneToMany ,ManyToOne two-way ( Two notes are used together ): If not @OneToMany To add mappedy Properties will produce intermediate tables , It's usually in @ManyToOne Note to I'll add a note to it @Joincolumn(name=" ") To specify the name of the foreign key ( explain : The more side is the relationship maintenance side , The relationship maintenance side is responsible for updating foreign key records , The maintainer has no right to update Foreign key records )!(@OneToMany(mappedBy=“ One to many , The attribute of one of many ”) appear mapby For the maintained end ||| The default is delayed loading )
    Use cases
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="child_id")
private OrderChild orderChild;
  @OneToMany(mappedBy="orderChild",fetch=FetchType.LAZY,cascade={
   
   CascadeType.MERGE})
  @NotFound(action=NotFoundAction.IGNORE) // The delegate can be empty , Allow for null
  private List<OrderChildGoods> goodsList;

@ManyToOne The default is to load immediately ,@OneToMany The default is lazy loading
But if you add @NotFound After that fetch=FetchType.LAZY It doesn't work , That is, setting @NotFound After the change to load immediately eager

cascade: Cascade operation permissions

CascadeType.PERSIST: Cascading persistence , That's Cascade preservation . For example, a student has many grades , Save the students , Then it will cascade to save the score information of each subject

CascadeType.REMOVE: cascading deletion , Delete students , Then the students' grades are also removed from the database

CascadeType.MERGE: And , The student achievement information has been modified , Then the modified score information will be saved to the database , And above persist The difference is similar to put and post The difference between

CascadeType.DETACH: Cascade dissociation , To delete a student message , But the students id As a foreign key in the score sheet , Can't delete directly

CascadeType.REFRESH: Cascade refresh

CascadeType.ALL: All of the above combinations , Use with caution

fetch: Set the loading method of the associated object

FetchType.EAGER: Immediately load , For example, when loading Student object information , Load the student's grade information immediately

FetchType.LAZy: Delay loading , Load when needed

The third step

 stay springboot Add... To the startup class of @EnableJpaRepositories annotation   This is something that has to be added 

版权声明
本文为[UG-91P39EG]所创,转载请带上原文链接,感谢

Scroll to Top