[JAVA] Spring + MyBatis-Verbindungseinstellungsmethode <Tabellenverknüpfung>

Diesmal habe ich versucht, zwei Tabellen zu verbinden.

Im Fall von eins zu eins

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>
Stellen Sie sicher, dass Sie die Bedingung (detail_id) für das Verknüpfen der Tabelle in SQL angeben.

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>

Im Fall von eins zu viele

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,

Stellen Sie sicher, dass Sie die Bedingung (detail_id) für das Verknüpfen der Tabelle in SQL angeben.

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>

Recommended Posts

Spring + MyBatis-Verbindungseinstellungsmethode <Tabellenverknüpfung>
Spring + MyBatis-Verbindungseinstellungsmethode
JAVA DB-Verbindungsmethode
Frühling MyBatis @MapperScan Multiple