J'ai eu du mal à lire des livres de référence tels que INNER JOIN et LEFT JOIN en utilisant Spring, je vais donc l'écrire sous forme de mémorandum.
Le nom de la pièce et le nom de l'équipement sont affichés à l'écran.
Nom de colonne | Type de données | |
---|---|---|
numéro de chambre | room_id | INT |
Nom de la salle | room_name | VARCHAR |
Nom de colonne | Type de données | |
---|---|---|
Numéro d'équipement | equipmentId_id | INT |
Nom de l'équipement | equipment_name | VARCHAR |
numéro de chambre | room_id | INT |
Créez une entité (salle et équipement). l'importation est omise.
Room.java
@Entity
public class Room implements Serializable {
@Id
@GeneratedValue
private Integer roomId;
private String roomName;
@OneToMany(mappedBy="room", cascade=CascadeType.ALL)
private List<Equipment> equipments;
public Integer getRoomId() {
return roomId;
}
public void setRoomId(Integer roomId) {
this.roomId = roomId;
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public List<Equipment> getEquipments() {
return equipments;
}
public void setEquipments(List<Equipment> equipments) {
this.equipments = equipments;
}
}
Puisqu'il existe une relation un-à-plusieurs avec l'équipement, utilisez @OneToMany.
@OneToMany(mappedBy="room", cascade=CascadeType.ALL)
private List<Equipment> equipments;
Equipment.java
@Entity public class Equipment implements Serializable {
@Id
@GeneratedValue
private Integer equipmentId;
private String equipmentName;
@ManyToOne
@JoinColumn(name="room_id")
private Room room;
public Integer getEquipmentId() {
return equipmentId;
}
public void setEquipmentId(Integer equipmentId) {
this.equipmentId = equipmentId;
}
public String getEquipmentName() {
return equipmentName;
}
public void setEquipmentName(String equipmentName) {
this.equipmentName = equipmentName;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
}
Puisqu'il existe une relation plusieurs-à-un avec Room, utilisez @ManyToOne. Utilisez room_id dans @JoinColumn comme clé externe.
@ManyToOne
@JoinColumn(name="room_id")
private Room room;
Créez une requête à l'aide de @Query dans le référentiel. Vous pouvez définir la valeur dynamiquement avec @Param ("roomId").
EquipmentRepository.java
public interface EquipmentRepository extends JpaRepository<Equipment, Integer> {
@Query("SELECT DISTINCT e FROM Equipment e INNER JOIN e.room WHERE e.room.roomId = :roomId ORDER BY e.equipmentId")
List<Equipment> find(@Param("roomId") Integer roomId);
}
Injecter le référentiel d'équipement avec @Autowired. Une annotation pour obtenir la valeur de la variable de chemin dans l'URL avec @PathVariable ("id").
TestController.java
@Controller
public class TestController {
@Autowired
EquipmentRepository equipmentRepository;
@GetMapping("/{id}")
public String index(@PathVariable("id")Integer id, Model model) {
List<Equipment> list2 =equipmentRepository.find(id);
model.addAttribute("lists2", list2);
return "index";
}
}
Sortez les éléments HTML à plusieurs reprises pour le nombre de valeurs de tableau spécifié par th: each.
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<th>chambre</th>
<th>Équipement</th>
</tr>
<tr th:each="list2:${lists2}">
<td th:text="${list2.room.roomName}">
<td th:text="${list2.equipmentName}">
</tr>
</table>
</body>
</html>
Avec ce qui précède, le nom de la pièce et le nom de l'équipement peuvent être émis. À l'avenir, j'aimerais augmenter le nombre de tables et contester un traitement compliqué.
Recommended Posts