[JAVA] [JPA] Vergleichen Sie Tabelle1 und Tabelle2, um Daten abzurufen und zu aktualisieren, die in Tabelle2 nicht vorhanden sind

Dieses Mal haben wir Tabellen mit den Namen Employee1 und Employee2 in der DB vorbereitet. Vergleichen Sie beide, um ID-Daten abzurufen / zu aktualisieren, die in Employee2 nicht vorhanden sind

DB Vorbereitung

Employee1

id first_name last_name height weight skill_level
1 TARO TANAKA 170 50 2
2 JIRO YAMADA 150 60 3
3 HANAKO YAMASHITA 156 44 3
4 ICHIRO SUZUKI 180 80 5
5 SABURO TANAKA 174 65 1
7 AI SUZUKI 160 50 4
8 GORO AIDA 177 60 3

Employee2

id first_name last_name height weight skill_level
6 Tomohisa Yamashita 178 67 6
7 Sadawo Abe 160 56 5
8 Kaoru Sugita 166 60 2
9 Tomoya Nagase 185 70 6
10 Satoshi Ehefrau Ehemann Baum 180 70 6
11 Demut Watanabe 180 75 6
12 Yosuke Kubotsuka 183 60 6
13 Ai Kato 166 50 4

Entitätsklasse

● @Entity Gibt an, dass es sich um eine Entity-Klasse handelt ● @Table Geben Sie den Tabellennamen der zuzuordnenden Datenbank an ● Zur Spalte @id PK hinzugefügt ● @Column Geben Sie den Spaltennamen der zuzuordnenden Tabelle an

Employee1


@Entity
@Table(name = "employee1")
@Getter
public class Employee1 {

	@Id
	@Column(name = "id")
	private Integer id;
	
	@Column(name = "first_name")
	private String firstName;
	
	@Column(name = "last_name")
	private String lastName;
	
	@Column(name = "height")
	private Integer height;
	
	@Column (name = "weight")
	private Integer weight;
	
	@Column (name = "skill_level")
	private Integer skillLevel;
	
	//Methode zur Konvertierung in Employee2
	public Employee2 toConvert() {
		return new Employee2(
				this.getId(),
				this.getFirstName(),
				this.getLastName(),
				this.getHeight(),
				this.getWeight(),
				this.getSkillLevel()
				) ;
	}
}

● @NoArgsConstructor Generiert automatisch einen Konstruktor ohne Argumente (Standardkonstruktor) ● @AllArgsConstructor Generiert automatisch Konstruktoren mit Argumenten (alle Mitglieder).

Employee2


@Entity
@Table(name = "employee1")
@Getter
@NoArgsConstructor
@AllArgsConstructor //Die Employee1-Methode erstellt eine Instanz von Employee2, daher ist ein Konstruktor mit Argumenten erforderlich
public class Employee1 {
	
	@Id
	@Column(name = "id")
	private Integer id;
	
	@Column(name = "first_name")
	private String firstName;
	
	@Column(name = "last_name")
	private String lastName;
	
	@Column(name = "height")
	private Integer height;
	
	@Column (name = "weight")
	private Integer weight;
	
	@Column (name = "skill_level")
	private Integer skillLevel;
}

Repository-Klasse

● Die Repository-Klasse ist eine Schnittstelle ● Erben Sie JpaRepository und übergeben Sie die Entity-Klasse als erstes Argument und den PK-Typ als zweites Argument ● Anmerkung zu der Klasse, die mit @Repository DB kommuniziert ● @Query Sie können eine Abfrage mit einem beliebigen Methodennamen definieren

Employee1Repository


@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
	
	@Query(nativeQuery=true, value = " SELECT e.* FROM employee  e LEFT OUTER JOIN employee1"
	+ "  e1 ON e.id = e1.id WHERE e1.id IS NULL " )
	public List<Employee> notExist();

Employee2Repository


@Repository
public interface Employee1Repository extends JpaRepository<Employee1, Integer> {

}

Ausführungsklasse

● @Autowired Wird Instanzvariablen zugewiesen

Main


@SpringBootApplication
public class EmployeeApplication implements CommandLineRunner{
	
	@Autowired
	EmployeeRepository employeeRepository;
	
	@Autowired
	Employee1Repository employee1Repository;
	
	
	public static void main(String[] args) {
		SpringApplication.run(EmployeeApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		
		List<Employee> list = employeeRepository.notExist();
		System.out.println(list.size());
		List<Employee1> list1 = list.stream().map(Employee::toConvert).collect(toList());
		employee1Repository.saveAll(list1);
	}
}

Recommended Posts

[JPA] Vergleichen Sie Tabelle1 und Tabelle2, um Daten abzurufen und zu aktualisieren, die in Tabelle2 nicht vorhanden sind
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
Was tun, wenn "Relation" hibernate_sequence "nicht existiert" in der ID-Spalte von PostgreSQL + JPA
Verarbeitung, wenn eine ID, die nicht in der Datenbank vorhanden ist, in die URL eingegeben wird
MockMVC gibt 200 zurück, auch wenn ich eine Anfrage an einen Pfad stelle, der nicht existiert
So löschen Sie alle Daten in einer bestimmten Tabelle
Ich habe versucht, mit Spring Data JPA zu beginnen
Was tun, wenn Sie in Eclipse eine JRE auswählen und "Die ausgewählte JRE unterstützt die aktuelle Konformitätsstufe 11 nicht" erhalten?
Das Problem, dass alle Daten in der Tabelle angezeigt wurden, wurde behoben
Führen Sie in Hanami Raw SQL aus, um Ergebnisse zu erhalten, die nicht in der Spalte enthalten sind
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring
So erhalten Sie das Protokoll, wenn install4j nicht gestartet wird