ð Full Stack Development with Spring Boot and React (á¡áááºáž á)
ð¡ Newskategorie: Programmierung
ð Quelle: dev.to
JPA
JPA ááá¯áᬠstandard áá
áºáá¯ááŒá
áºáá«áááºá JPA ááᯠá¡ááŒá±áá¶ááŒá®áž Hibernate, Eclipse-Link á¡á
ááŸááááŒáá·áº implementation áá¯ááºááŒáá«áááºá á¡á²áá®áá²ááŸá¬ á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážá Hibernate
implementation ááŒá
áºáá«áááºá á¥ááᬠHTML language ááá¯áᬠstandard ááŒá
áºááŒá®áž áá°á·ááᯠrender áá¯ááºáá²á· browser implementation ááœá±ááá°ááŒáááá¯áá«áá²á
á¥ááᬠFirefox, Chrome, Edge á¡á
ááŸááááŒáá·áºáá±á«á·á JPA ááá¯ááŒááºááŒá±á¬ááááºááá¯áááºáá±á¬á· JPA entity ááá¯áᬠdatabase table ááᯠááá¯ááºá
á¬ážááŒá¯áá²á· Java class ááŒá
áºáá«áááºá
á¡á²áá® class áá²á· field ááœá±ááá±á¬á· database table áá²á· column ááœá±ááᯠááá¯ááºá
á¬ážááŒá¯áá«áááºá ááŒá®ážááẠexample áá²á·áááœááŒáá«á·áááºá
Hibernate
Hibernate áᬠJPA implementation ááœá±áá²ááŸá¬ áá±á«áºááŒá°áá¬á¡ááŒá
áºáá¯á¶áž ááŒá
áºááŒá®áž Spring Boot á áá°á·ááᯠdefault á¡áá±áá²á· ááá·áºáá¬ážáá±ážáá«áááºá Hibernate áᬠmature ááŒá
áºáá±ááŒá®
ááŒá
áºáá²á·á¡ááŒáẠlarge-scale application ááŒá®ážááœá±ááŸá¬ ááᯠáá¯á¶ážááŒáá«áááºá
Entity class áá»á¬áž create áá¯ááºááŒááºáž
Entity class class ááá¯áᬠJPA áá²á· @Entity ááá¯áá²á· annotation ááᯠclass definition ááŸá¬áá±ážáá¬ážáá²á· class ááá¯áá±á«áºáá«áááºá
Entity class ááŸá¬ getter áá²á· setter method ááœá±áá«áááŸá¬ááŒá
áºááŒá®ážá áá°á·áá²á· field ááœá±ááá¯áá±á¬á· private ááŒá±ááŒá¬áá¬ážááá«áááºá
Application ááᯠá
run ááá¯ááºáá¬áá²á· JPA áᬠdatabase ááŸá¬ table ááœá± ááœá¬ážáá±á¬ááºáá«áááºá @Entity áá²á· áá±ážáá¬ážáá²á· class ááœá± á¡áá¯ááºáá¯á¶áž
database table á¡ááŒá
áºáá²á· database áá² á¡ááá¯á¡áá»á±á¬ááºááœá¬ážáá±á¬ááºááŸá¬ááŒá
áºáá«áááºá
á¥ááᬠEntity class name á Car ááá¯ááẠCar ááá¯áá²á·
table ááᯠá¡ááá¯ááá¯ááœá¬ážáá±á¬ááºááŸá¬áá«á ááááºááá¯á· ááá¯ááºá Car ááá¯á· ááá±á¬ááºáá»ááºáá°ážá MotorCar ááá¯á· áá±á¬ááºáá»ááºáááºááá¯ááẠ@Entity áá²á· á¡á±á¬ááºááŸá¬
@Table ááá¯áá²á· annotation ááᯠáá¯á¶ážááŒá®áž table name ááᯠáá®ážááá·áº set áá¯ááºááá¯á·ááá«áááºá
áá² á¡á²áá®áá±á¬á· example á
ááŒáá·áºááŒáá¡á±á¬ááºá
JPA áá²á· H2 database áá²á· áá¯á¶ážááá¯á· ááááá¯á¶áž pom.xml ááá¯ááºáá²ááŸá¬ dependencies ááœá± áááºááá·áºáá¡á±á¬ááºá
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Entity class ááᯠcreate áá¯ááºáá¯á¶á¡ááá·áºááá·áº ááᯠááŒáá·áºáá¡á±á¬ááºá
Project Explorer ááŸá¬ root package ááᯠright click ááŸáááºááẠmenu áá±á«áºáá¬áá«áááá·áºáááºá
New ááᯠááœá±ážááŒá®áž á¡á²áá®áá²áá០package ááᯠááœá±ážáá«
package name ááᯠcom.packt.demo.domain ááá¯á·áá±ážááá¯ááºáá«á
á¡áá áºáá±á¬ááºáá¬ážáá²á· package ááᯠProject Explorer ááŸá¬ right click ááŸáááºáá«á ááŒá®ážááẠNew ááá¯ááœá±ážááŒá®áž class ááá¯ááœá±ážááá¯ááºáá«á áá«ááá¯ááẠJava class á¡áá áºáá áºáá¯áááŒá®á
ááŒá®ážááẠannotation ááŒá
áºáá²á· @Entity ááᯠCar class áá±á«áºááŸá¬ áááºááŸááºáá±ážááá¯ááºáá«á
(@Entity áá±ážááŒá®áž Ctrl+Space áá«ááŸááá¯áẠCtrl+Shift+O ááᯠááŸáááºááẠimport statement á¡á±á¬áºááá¯ááœááºáá¬áá«áááá·áºáááºá)
package com.packt.demo.domain;
import javax.persistence.Entity;
@Entity
public class Car {
}
ááŒá®ážááẠfield ááœá±(database column ááŒá
áºáá¬ááá·áºá¡áá¬ááœá±) ááᯠdefine áá¯ááºáá¡á±á¬ááºá áá®áá±áá¬ááŸá¬ unqiue ID ááá¯áááºáž ááá·áºáá±ážááá«áááá·áºáááº(primary key á¡áá±áá²á·áá¯á¶ážáá¡á±á¬ááºáá«)á
package com.packt.demo.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Car {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String brand, model, color, registerNumber;
private int yearMade, price;
}
primary key ááᯠdefine áá¯ááºááá¯á· @id
ID ááᯠdatabase ááá± Auto generate áá¯ááºáá±ážááá¯á· @GeneratedValue
JPA provider(áá®áá±áá¬ááŸá¬ Hibernate) á á¡ááá·áºáá±á¬áºáá¯á¶áž ID generation ááᯠáá¯ááºáá±ážáá«ááá¯á·ááŒá±á¬áá¬á (strategy=GenerationType.AUTO)
ááŒá®ážááŒá®ááá¯ááẠfield ááœá±á¡ááœáẠgetter áá²á· setter ááœá± ááá·áºáá±ážááááºá field ááœá±ááᯠááá¯ááºááá¯áẠset áá¯ááºáá±ážááá¯ááºááá·áº constructor ááá·áºáá±ážááááºá
class áá²ááŸá¬ cursor ááá¯áá¬ážááŒá®áž Right Click-> Source -> Generate Getter and Setters
ááá¯ááẠgetter setter ááœá±ááœááºáá¬áááºá
class áá²ááŸá¬ cursor ááá¯áá¬ážááŒá®áž Right Click-> Source -> Generate Constructor using fields....
ááá¯á·ááœá±áž ááŒá®ážááẠID ááᯠááŒá¯ááº(id á auto generate áá¯ááºááŸá¬ ááá¯áá±á¬á· constructor áá²á· assign áá¯ááºááẠááá·áºááá±ážááá°áž)
package com.packt.demo.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String brand, model, color, registerNumber;
private int yearMade, price;
public Car() {
}
public Car(String brand, String model, String color, String registerNumber, int yearMade, int price) {
super();
this.brand = brand;
this.model = model;
this.color = color;
this.registerNumber = registerNumber;
this.yearMade = yearMade;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getRegisterNumber() {
return registerNumber;
}
public void setRegisterNumber(String registerNumber) {
this.registerNumber = registerNumber;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getYearMade() {
return yearMade;
}
public void setYearMade(int yearMade) {
this.yearMade = yearMade;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
ááŒá®ážááẠH2 database áá²á·áá»áááºááá¯á· application.properties áá²ááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºáž configure áá¯ááºááŒáááºá
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.h2.console.path=/h2-console
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
h2 ááŸá¬ webconsole áá«áá«áááºá database url name á jdbc:h2:mem:test ááá¯áá¬ááá¯áááºáž ááááá¬ážáááááºáááºáá«áááºá áá² Run As ->Java Application áá¯ááºááá¯ááºáá«á H2 database áá²ááŸá¬ áá¬áá±á¬ááºááœá¬ážáááºážááŒáá·áºáá¡á±á¬ááºá
á¡áááºáá¯á¶áž Spring Boot run ááŒá®ážááẠhttp://localhost:8080/h2-console ááᯠbrowser ááŸá¬ ááœáá·áºááŒáá·áºáá«
url ááᯠjdbc:h2:mem:test ááá¯á·ááŒá±á¬ááºážááŒá®áž áááºááá¯ááºáá«á
JPA á ááŸááºážááŒá®áž create áá¯ááºáá±ážááá¯ááºáá²á· database table ááŒá áºáá²á· Car table ááᯠááœá±á·áááŸá¬ááŒá áºáá«áááºá
=======================
á¡áááºáž(á) ááŒá®áž