보라코딩

스프링부트 JOIN 하여 사용하기 (1:N) resultMap, collection 사용하기 본문

코딩/Spring

스프링부트 JOIN 하여 사용하기 (1:N) resultMap, collection 사용하기

new 보라 2023. 5. 24. 17:06

 

 

storeVO  (이게 1)

 

package com.tastemate.domain;

import lombok.Data;
import org.apache.ibatis.type.Alias;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Data
@Alias("StoreVO")
public class StoreVO {

private String storeIdx;
private String userIdx;
private String storeName;
private String category1;
private String storeAddress;

private double storeLati;
private double storeLongi;

private String phoneNumber;
private String storeCount;

private String filename;
private MultipartFile oriFilename;


// join
private List<MenuVO> menuVO;

}

 

MenuVO를 받아오기 위해 맨 아래 선언해두고

1:N이기 때문에 List 형식으로 객체 받아온다!

 

 

 

 

MenuVO (이게 N)

 

package com.tastemate.domain;

import lombok.Data;
import org.apache.ibatis.type.Alias;

@Data
@Alias("MenuVO")
public class MenuVO {

private int menuIdx;
private int storeIdx;
private String foodName;
private int price;


}

 

 

 

 

StoreMapper.xml

 

처음으로 resultMap과 collection을 사용했다.

1:N의 경우, 이렇게 많이 사용한다고 함!

 

 


<mapper namespace="com.tastemate.mapper.StoreMapper">

<resultMap id="storeMenuResultMap" type="com.tastemate.domain.StoreVO">
<id column="STORE_IDX" property="storeIdx"/>
<result column="STORE_NAME" property="storeName"/>
<result column="CATEGORY1" property="category1"/>
<result column="STORE_ADDRESS" property="storeAddress"/>
<result column="STORE_LATI" property="storeLati"/>
<result column="STORE_LONGI" property="storeLongi"/>
<result column="PHONE_NUMBER" property="phoneNumber"/>
<result column="STORE_COUNT" property="storeCount"/>
<result column="FILENAME" property="filename"/>
<collection property="menuVO" ofType="MenuVO">
<id column="MENU_IDX" property="menuIdx" />
<result column="STORE_IDX" property="storeIdx" />
<result column="FOOD_NAME" property="foodName" />
<result column="PRICE" property="price" />
</collection>
</resultMap>

<select id="getStoreWithMenu" resultMap="storeMenuResultMap">
SELECT s.store_idx, s.user_idx, s.store_name,
s.category1, s.store_address, s.store_lati, s.store_longi, s.phone_number,
s.store_count, s.filename, m.menu_idx, m.food_name, m.price
FROM STORE s
LEFT OUTER JOIN MENU m ON s.store_idx = m.store_idx
WHERE s.store_idx = #{storeIdx}
</select>
</mapper>

 

 

 

 

StoreController

 

@GetMapping("/get")
public void get(int storeIdx, Model model){
log.info("get storeIdx :" + storeIdx);

StoreVO storeVO = service.store_get(storeIdx);
model.addAttribute("storeVO", storeVO);

}

 

 

 

 

StoreService
public StoreVO store_get(int storeIdx) {

//StoreVO storeVO = mapper.store_get(storeIdx);
StoreVO storeVO = mapper.getStoreWithMenu(storeIdx);
return storeVO;
}

 

 

 

 

StoreMapper
StoreVO getStoreWithMenu(int storeIdx);