Diesmal habe ich versucht, zwei Tabellen zu verbinden.
Entity
<Übergeordnete Entitätsklasse>
Player.java
package com.mybatis.test.domain;
import java.util.List;
import lombok.Data;
@Data
public class Player {
private String id;
private String name;
private String age;
//Definieren Sie die Elemente der untergeordneten Klasse(1 zu 1)
private Detail detailIds;
}
<Untergeordnete Entitätsklasse>
Detail.java
package com.mybatis.test.domain;
import lombok.Data;
@Data
public class Detail {
private String detailId;
private String work;
}
Da die Eltern-Kind-Beziehung der Tabelle durch detail_id verbunden ist, bereiten Sie eine Variable für das untergeordnete Element in Player.java vor.
XML
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.test.domain.MyBatisMapper">
<select id="selectItem" resultMap="playerMap">
SELECT
player.id
,player.name
,player.detail_id
,detail.work
FROM
player
JOIN
detail
ON
player.detail_id=detail.detail_id
WHERE
player.id=#{id}
</select>
<!--Geben Sie an, wie das SELECT-Ergebnis der Tabelle zugeordnet werden soll-->
<resultMap id="playerMap" type="com.mybatis.test.domain.Player">
<id property="id" column="id" />
<result property="name" column="name" />
<association property="detailIds" resultMap="detailResult"/>
</resultMap>
<resultMap id="detailResult" type="com.mybatis.test.domain.Detail">
<result property="detailId" column="detail_id" />
<result property="work" column="work" />
</resultMap>
</mapper>
Das Suchergebnis wird im resultMap-Element separat definiert.
In resultMap wird das Ergebnis dem Inhalt (diesmal Player) zugeordnet, den Sie tatsächlich in das Suchergebnis aufnehmen möchten. Eigenschaft bezieht sich auf eine Eigenschaft (Variable) auf der Seite der Java-Klasse. Spalte bezieht sich auf eine SQL-Spalte.
Da wir dieses Mal eine 1: 1-Beziehung haben, werden wir auch die Assoziation verwenden. Mit untergeordneten Elementen in der resultMap der Zuordnung verknüpfen.
Interface
MyBatisMapper.java
package com.mybatis.test.domain;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface MyBatisMapper {
//Zum Testen von JOIN
public Player selectItem(String id);
Service
MyBatisService.java
package com.mybatis.test.domain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyBatisService {
@Autowired
MyBatisMapper mapper;
//JOIN
@Transactional
public Player selectItem(String id) {
return mapper.selectItem(id);
}
Controller
Controller
@Controller
public class MybatisController {
@Autowired
MyBatisService myBatisService;
Player player = new Player();
player = myBatisService.selectItem("002");
model.addAttribute("playerDetail", player);
return "index";
}
Jsp
<div th:object="${playerDetail}">
<div>
<label><b>Name</b></label>
<p th:text="${playerDetail.name}">
</div>
<div>
<label><b>Arbeitsplätze</b></label>
<p th:text="${playerDetail.detailIds.work}">
</div>
</div>
Entity
<Elternentität>
Player.java
package com.mybatis.test.domain;
import java.util.List;
import lombok.Data;
@Data
public class Player {
private String id;
private String name;
private String age;
private Detail detailIds;
//Elementdefinition der untergeordneten Klasse(Eins zu viele)
private List<Item> items;
}
Da es eins zu viele ist, habe ich im Feld einen Listentyp definiert.
Item.java
package com.mybatis.test.domain;
import lombok.Data;
@Data
public class Item {
private String id;
private String item;
}
XML
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.test.domain.MyBatisMapper">
<select id="selectChoice" resultMap="itemMap">
select
player.id
,player.name
,item.items
from
player
join
item
on
player.id = item.id
where
player.id=#{id}
</select>
<!--Geben Sie an, wie das SELECT-Ergebnis der Tabelle zugeordnet werden soll-->
<resultMap id="itemMap" type="com.mybatis.test.domain.Player">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="items" ofType="com.mybatis.test.domain.Item">
<result property="id" column="id" />
<result property="item" column="items" />
</collection>
</resultMap>
</mapper>
Verwenden Sie für Eins-zu-Viele das Auflistungstag. (Assoziations-Tag für Eins-zu-Eins) Legen Sie in der Eigenschaft des Auflistungstags die Felder (Elemente) der übergeordneten Klasse (Player.java) fest, die die untergeordneten Klassen (Item.java) bündelt. Geben Sie in ofType die untergeordnete Klasse an.
Sogar hier,
Schnittstelle und Service entfallen.
Controller
MybatisController.java
@Controller
public class MybatisController {
@Autowired
MyBatisService myBatisService;
@GetMapping()
public String index(Model model) {
Player playerChoise = myBatisService.selectChoice("002");
//In Liste der Artikeltypen umpacken
List<Item> itemsList = playerChoise.getItems();
model.addAttribute("itemsList", itemsList);
Jsp
<!-- th:Holen Sie sich jeweils ein Element-->
<div th:each="item : ${itemsList}">
<p th:text="${item.item}">
</div>