보라코딩
스프링부트 JOIN 하여 사용하기 (1:N) resultMap, collection 사용하기 본문
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;
}
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;
}
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);
}
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;
}
//StoreVO storeVO = mapper.store_get(storeIdx);
StoreVO storeVO = mapper.getStoreWithMenu(storeIdx);
return storeVO;
}
StoreMapper
StoreVO getStoreWithMenu(int storeIdx);
'코딩 > Spring' 카테고리의 다른 글
Day104_230525_ 프로젝트 진행사항(UI 위주) (0) | 2023.05.25 |
---|---|
스프링부트 맛집별 별점구현 (Join, SQL문) (1) | 2023.05.25 |
TASTEMATE 맛집 진행사항 (0) | 2023.05.24 |
새창 띄우기 (자바스크립트 사용) (0) | 2023.05.24 |
카카오 주소 api (0) | 2023.05.24 |