[JAVA] Méthode de configuration de la connexion Spring + MyBatis <table join>

Cette fois, j'ai essayé de joindre deux tables.

Dans le cas du one-to-one

Entity

<Classe d'entité parent>

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;
    //Définir les éléments de la classe enfant(1 à 1)
    private Detail detailIds;
}

<Classe d'entité enfant>

Detail.java


package com.mybatis.test.domain;

import lombok.Data;

@Data
public class Detail {

	private String detailId;
    private String work;
}

Puisque la relation parent-enfant de la table est connectée par detail_id, préparez une variable pour l'élément enfant dans Player.java.

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>

	<!--Spécifiez comment mapper le résultat SELECT de la table-->
    <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>
Assurez-vous d'inclure la condition (detail_id) pour joindre la table en SQL.

Le résultat de la recherche est défini séparément dans l'élément resultMap.

Dans resultMap, le résultat est mappé au contenu (Player cette fois) que vous voulez réellement obtenir dans le résultat de la recherche. property fait référence à une propriété (variable) du côté de la classe Java. colonne fait référence à une colonne SQL.

De plus, puisque cette fois nous avons une relation 1: 1, nous utiliserons l'association. Associer aux éléments enfants dans le resultMap de l'association.

Interface

MyBatisMapper.java


package com.mybatis.test.domain;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface MyBatisMapper {

	//Pour tester 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>Nom</b></label>
			<p th:text="${playerDetail.name}">
		</div>
		<div>
			<label><b>travaux</b></label>
			<p th:text="${playerDetail.detailIds.work}">
		</div>
	</div>

Dans le cas de un à plusieurs

Entity

<Entité parente>

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;
    //Définition d'élément de la classe enfant(Un à plusieurs)
    private List<Item> items;
}

Puisqu'il s'agit d'un à plusieurs, j'ai défini un type de liste dans le champ.

<Entité enfant>

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>

      <!--Spécifiez comment mapper le résultat SELECT de la table-->
      <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>

Pour un-à-plusieurs, utilisez la balise de collection. (Balise d'association pour un à un) Dans la propriété de la balise de collection, définissez les champs (éléments) de la classe parent (Player.java) qui regroupe les classes enfants (Item.java). Dans ofType, spécifiez la classe enfant.

même ici,

Assurez-vous d'inclure la condition (detail_id) pour joindre la table en SQL.

l'interface et le service sont omis.

Controller

MybatisController.java


@Controller
public class MybatisController {
	@Autowired
	MyBatisService myBatisService;
	@GetMapping()
	public String index(Model model) {
		Player playerChoise = myBatisService.selectChoice("002");
		//Reconditionner dans la liste des types d'élément
		List<Item> itemsList = playerChoise.getItems();
		model.addAttribute("itemsList", itemsList);

Jsp

	<!-- th:Obtenez un élément à la fois avec chacun-->
	<div th:each="item : ${itemsList}">
	<p th:text="${item.item}">
	</div>

Recommended Posts

Méthode de configuration de la connexion Spring + MyBatis <table join>
Méthode de configuration de la connexion Spring + MyBatis
Méthode de connexion JAVA DB
Spring MyBatis @MapperScan Multiple