Develop
[Spring] mapper로 값 2개 보내는 방법(HashMap 사용) 본문
목적
내정보 페이지에서 내가 쓴 글들만 조회하고 싶음
=> 내 아이디와 페이징 처리를 위한 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
'웹 개발 > Spring' 카테고리의 다른 글
[spring-Boot] Tiles3 import Error (Spring 3.0버전 이상) (2) | 2024.03.05 |
---|---|
[Spring-Boot] eclipse에서 spring boot + maven 프로젝트 생성하기 / 실패함 이방법 사용x (0) | 2024.03.05 |
[Spring] pom.xml 이란? + 태그 (1) | 2024.03.04 |
[Spring] Dynamic Web Project (maven project로 설정하기) (0) | 2024.03.04 |
[Persistence] JDBC / MyBatis / JPA 개념 정리 (1) | 2024.01.24 |