Cette fois, nous avons préparé des tables appelées Employé1 et Employé2 dans le DB. Comparez les deux pour obtenir / mettre à jour des données d'identification qui n'existent pas dans Employee2
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 | Arbre de mari femme | 180 | 70 | 6 |
11 | Humilité | Watanabe | 180 | 75 | 6 |
12 | Yosuke | Kubotsuka | 183 | 60 | 6 |
13 | Ai | Kato | 166 | 50 | 4 |
● @Entity déclare qu'il s'agit d'une classe d'entité ● @Table Spécifiez le nom de table du DB à mapper ● Ajouté à la colonne @id PK ● @Column Spécifiez le nom de colonne de la table à mapper
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;
//Méthode de conversion en Employee2
public Employee2 toConvert() {
return new Employee2(
this.getId(),
this.getFirstName(),
this.getLastName(),
this.getHeight(),
this.getWeight(),
this.getSkillLevel()
) ;
}
}
● @NoArgsConstructor Génère automatiquement un constructeur sans argument (constructeur par défaut) ● @AllArgsConstructor Génère automatiquement des constructeurs avec des arguments (tous les membres)
Employee2
@Entity
@Table(name = "employee1")
@Getter
@NoArgsConstructor
@AllArgsConstructor //La méthode Employee1 crée une instance de Employee2, donc un constructeur avec des arguments est requis
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;
}
● La classe Repository est une interface ● Hériter de JpaRepository et transmettre la classe Entity comme premier argument et le type PK comme deuxième argument ● Annotation donnée à la classe qui communique avec @Repository DB ● @Query Vous pouvez définir une requête avec n'importe quel nom de méthode
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 Affecté à des variables d'instance
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