Develop

[Spring] mapper로 값 2개 보내는 방법(HashMap 사용) 본문

웹 개발/Spring

[Spring] mapper로 값 2개 보내는 방법(HashMap 사용)

개발 기록 2024. 2. 19. 16:40

 

목적

내정보 페이지에서 내가 쓴 글들만 조회하고 싶음

=> 내 아이디와 페이징 처리를 위한 Criteria 정보를 mapper에 보내야함

 

controller

	// 내정보 페이지로 이동(Mypage-GET)
	// http://localhost:8080/user/userMypage
	@RequestMapping(value = "/userMypage", method = RequestMethod.GET)
	public void userMypageGET(Criteria cri , HttpSession session, Model model) throws Exception {
		logger.debug("userMypageGET()호출");

		UserVO userVO = new UserVO();
		userVO.setUs_id((String) session.getAttribute("us_id"));
		
		// 회원정보 조회
		model.addAttribute("userInfo", uService.userInfo(userVO.getUs_id()));
		
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("cri", cri);
		map.put("userVO", userVO);
		
		// 페이징 처리( 페이지 블럭 처리 객체 )
		PageVO pageVO = new PageVO();
		pageVO.setCri(cri);
		pageVO.setTotalCount(bService.myBoardCount(userVO.getUs_id())); // 내 글 수
		logger.debug("pageVO : " + pageVO);
		model.addAttribute("pageVO", pageVO);

		// 페이지 이동시 받아온 페이지 번호
		if (cri.getPage() > pageVO.getEndPage()) {
			// 잘못된 페이지 정보 입력
			cri.setPage(pageVO.getEndPage());
		}
		
		// 내 글 목록 불러오기
		List<BoardVO> boardList = bService.myBoardList(map);
		model.addAttribute("boardList", boardList);
		
  }

 

map중에서도 HashMap을 사용할 것이다.

먼저

Map<K , V> map = new HashMap<K , V>();

를 통해 해쉬맵을 생성해주었다.

K와 V에는 사용할 형을 입력해주면 된다.

 

나는 cri가 클래스라서 <String , Object> 로 하였다.

또한 us_id는 String이지만 형을 맞추기 위해서

일부러 UserVO를 생성하여 us_id 값을 set해주고

 

 

cri와 userVO를 map에 저장하였다.

 

 

만약 넣으려는 값이 모두 Spring이라면

Map<String, Spring> map = new HashMap<String, Spring>();
		map.put("us_id", us_id);
		map.put("us_name", us_name);

 

이렇게 Object대신 Spring을 입력하고 넣으면 된다.

 

즉 map.put( K , V ) 이란 뜻

 

Service와 DAO는 간단하니 코드만 첨부하고 넘어간다.

Service

	// 내 글 목록 조회
	public List<BoardVO> myBoardList(Map<String, Object> map) throws Exception{
		logger.debug("myBoardList(Map map) 호출");
		return bdao.myBoardList(map);
	}
	
	// 내 글 수 조회
	public int myBoardCount(String us_id) throws Exception {
		logger.debug("service : myBoardCount(String us_id) 호출 ");
		return bdao.myBoardCount(us_id);
	}

 

 

DAO

	// 내 글 목록 조회
	public List<BoardVO> myBoardList(Map<String, Object> map) throws Exception {
		logger.debug("myBoardList(Map map) 호출");
		return sqlSession.selectList(NAMESPACE + ".myBoardList", map);
	}
	
	// 내 글 수 조회
	public int myBoardCount(String us_id) throws Exception {
		logger.debug("myBoardCount(String us_id) 호출");
		return sqlSession.selectOne(NAMESPACE + ".myBoardCount",us_id);
	}

 

 

Mapper

	<!-- 내 글 목록(내정보) -->
 	<select id="myBoardList" resultMap="BoardVO" >
		select b.*, u.us_nickname 
		from board b join us u 
		on b.us_id = u.us_id 
		where b.us_id = #{userVO.us_id} and b.bo_state = "등록"  
		order by b.bo_num desc  
		limit #{cri.pageStart},#{cri.pageSize} 
	</select> 
	
	<!-- 내 글 수 조회 -->
	<select id="myBoardCount" resultType="int" >
		select count(*) from board 
		where us_id= #{us_id} and bo_state ="등록"   
	</select>

 

Mapper에서 사용하는 기본적인 방법은 #{K} 이다.

 

나같은 경우는 userVO 안에 있는 us_id가 필요하므로 #{userVO.us_id}

cri 안에 있는 pageStart와 pageSize가 필요하므로 #{cri.pageStart}, #{cri,pageSize}

이렇게 사용하였다.

 

만약 Object가 아닌 spring일 경우에는 그냥 해당하는 K값을 쓰면 된다.

ex)

map< K , V > = new HashMap < K , V >();

controller

		Map<String, String> map = new HashMap<String, String>();
		map.put("user_id", abc);
		map.put("user_name", qwe);

 

mapper

	<!-- 정보 조회 -->
 	<select id="UserInfo" resultMap="UserVO" >
		select * from user 
		where us_id = #{user_id} and us_name = #{user_name}
	</select>

 

 

object나 string이 아니여도 가능하니 원하는 형을 넣어서 작성하면된다!

 


 

참고한 글

 

[Spring Boot] MyBatis 파라미터 사용 (tistory.com)

 

[Spring Boot] MyBatis 파라미터 사용

파라미터 사용방법 1) param1, param2select * from 테이블명 where 컬럼=#{param1} and 컬럼=#{param2} 2) 0부터 시작하는 인덱스select * from 테이블명 where 컬럼=#{0} and 컬럼=#{1} 3) 파라미터명을 그대로 사용하기 위

memories95.tistory.com

 


DTO나 Map을 사용하지않고 Parameter로 넘기는 방법도 존재한다.

 

파라미터로 넘기고 싶다면 참고하면 좋을듯한 글 

 

[Mybatis ] 클래스[ex)DTO] 를 새로 만들지 않고도 파라미터 2개 넘기는 방법 :: randev (tistory.com)

 

[Mybatis ] 클래스[ex)DTO] 를 새로 만들지 않고도 파라미터 2개 넘기는 방법

Mppaer 인터페이스에서는User getUserFromUser(@Param("id") int id, @Param("username") String userName); mapper.xml 파일에서는 select id, username from User where id = #{id} and userName = #{username}

randro.tistory.com