[JAVA] Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen

Es fiel mir schwer, Nachschlagewerke wie INNER JOIN und LEFT JOIN mit Spring zu lesen, daher werde ich sie als Memorandum schreiben.

Was ich diesmal erreichen möchte

Der Raumname und der Gerätename werden auf dem Bildschirm ausgegeben.

Zimmertisch

Spaltenname Datentyp
Zimmernummer room_id INT
Raumname room_name VARCHAR

Ausrüstungstabelle

Spaltenname Datentyp
Gerätenummer equipmentId_id INT
Ausrüstungsname equipment_name VARCHAR
Zimmernummer room_id INT

Erstellen Sie eine Entität (Raum und Ausrüstung). Import entfällt.

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;
	}
}

Verwenden Sie @OneToMany, da eine Eins-zu-Viele-Beziehung zu Geräten besteht.

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

Verwenden Sie @ManyToOne, da mit Room eine Eins-zu-Eins-Beziehung besteht. Verwenden Sie room_id in @JoinColumn als externen Schlüssel.

@ManyToOne
@JoinColumn(name="room_id")
private Room room;

Erstellen Sie eine Abfrage mit @Query im Repository. Sie können den Wert dynamisch mit @Param ("roomId") festlegen.

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);
}

Inject Equipment Repository mit @Autowired. Eine Anmerkung, um den Wert der Pfadvariablen in der URL mit @PathVariable ("id") abzurufen.

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";
	}
}

Geben Sie HTML-Elemente wiederholt für die Anzahl der durch th: each angegebenen Array-Werte aus.

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>Zimmer</th>
			<th>Ausrüstung</th>
		</tr>
		<tr th:each="list2:${lists2}">
			<td th:text="${list2.room.roomName}">
			<td th:text="${list2.equipmentName}">

		</tr>
	</table>
</body>
</html>

Mit dem oben genannten können der Raumname und der Gerätename ausgegeben werden. In Zukunft möchte ich die Anzahl der Tabellen erhöhen und die komplizierte Verarbeitung in Frage stellen.

Recommended Posts

Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen
[spring] Verwenden wir Spring Data JPA
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
[So installieren Sie Spring Data Jpa]
Spring Data JPA SQL-Protokollausgabe
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
ODER suchen Sie mit der Spring Data Jpa-Spezifikation
Über den Frühling ③
Existiert mit der Spezifikation in Spring Data JPA
Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Beispielcode für die DB-Steuerung durch deklarative Transaktion mit Spring Boot + Spring Data JPA
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
Spring Data JPA Save Select-Insert ist nur Insert
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Gegenseitige Bezugnahme auf Entity of Spring Data JPA und seine Anmerkungen
Einführung in Spring Boot + In-Memory Data Grid
Sortieren nach Spring Data JPA (mit zusammengesetzter Schlüsselsortierung)
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
So definieren Sie mehrere orm.xml in Spring4, JPA2.1
[Spring Batch] Gibt Tabellendaten in eine CSV-Datei aus
Fordern Sie Spring Boot heraus
Über den Frühling AOP
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Überprüfen Sie das Verhalten von getOne-, findById- und Abfragemethoden mit Spring Boot + Spring Data JPA
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
Ich habe versucht, mit Spring Data JPA zu beginnen
[Spring Boot] Ich dachte über testbaren Code von DI nach
Bis zur Verwendung von Spring Data und JPA Part 2
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Bis zur Verwendung von Spring Data und JPA Part 1
Machen Sie die where-Klauselvariable in Spring Data JPA
Ein Memorandum über Tabellendatentypen und -befehle (Rails)
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis