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
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 |
● @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;
}
● 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> {
}
● @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