본문 바로가기
교육/Spring

Spring 개발자 수업 98일차(1) - MyBatis(SELECT)

by yhyuk 2021. 8. 13.
728x90
반응형

MyBatis(SELECT)

- 어제는 반환값이 없는 쿼리(insert, update, delete)에 대해서 배웠고 오늘은 반환값이 있는 쿼리(select)에 대해 알아보자.

 

[ 반환값이 있는 쿼리 2가지 ]

레코드 개수 함수
 결과셋 레코드가 1개 일 때   template.selectOne("id")
  template.selectOne("id", parameter)
 결과셋 레코드가 N개 일 때   template.selectList("id")
  template.selectList("id", parameter)

 

[ 예제1 - selectOne ]

- 단일 레코드 + 단일 컬럼 => 반환

- 매개변수X, 반환값O

- tblMemo 테이블의 총 개수(count) 구하기

  1) MyBatisController.java + MyBatisDAO.java

// MyBatisController.java 
@RequestMapping(value = "/m1.action", method = { RequestMethod.GET })
public String m1(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
		
	int count = dao.m1();
	req.setAttribute("count", count);
		
	return "result";
}

// MyBatisDAO.java 
public int m1() {
	return template.selectOne("test.m1");
}

 

  2) test.xml > SQL문 작성

// test.xml
<mapper namespace="test">
	<!-- 반환값이 있을 경우 resultType="자료형", select문은 무조건 resultType을 붙여야 한다. -->
	<select id="m1" resultType="Integer">
		select count(*) from tblMemo
	</select>
</mapper>

 

[ 예제2 - selectOne ]

- 단일값 매개변수 -> 단일값 반환

- 매개변수O, 반환값O

- tblMemo 테이블의 seq번호에 해당하는 메모내용 가져오기

  1) MyBatisController.java + MyBatisDAO.java

// MyBatisController.java 
@RequestMapping(value = "/m2.action", method = { RequestMethod.GET })
public String m2(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
		
	String seq = "10";
	String memo = dao.m2(seq);
		
	req.setAttribute("memo", memo);
		
	return "result";
}

// MyBatisDAO.java 
public String m2(String seq) {
	return template.selectOne("test.m2", seq);
}

 

  2) test.xml > SQL문 작성

// test.xml
<mapper namespace="test">
	<!-- 반환값, 매개변수 둘 다 존재할 경우 둘 다 쓸것. resultType, parameterType -->
	<select id="m2" parameterType="String" resultType="String">
		select memo from tblMemo where seq = #{ seq }
	</select>
</mapper>

 

[ 예제3 - selectOne ]

- 단일값 매개변수 -> 단일 레코드 반환

- 매개변수O, 반환값O

- tblMemo 테이블의 seq번호에 해당하는 모든값(단일 레코드) 가져오기

  1) MyBatisController.java + MyBatisDAO.java

// MyBatisController.java 
@RequestMapping(value = "/m3.action", method = { RequestMethod.GET })
public String m3(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
		
	String seq = "4";
	MyBatisDTO dto = dao.m3(seq);
		
	req.setAttribute("dto", dto);
		
	return "result";
}

// MyBatisDAO.java 
public MyBatisDTO m3(String seq) {
	return template.selectOne("test.m3", seq);
}

 

  2) test.xml > SQL문 작성

// test.xml
<mapper namespace="test">
	<!-- 단일 레코드 반환 -->
	<select id="m3" parameterType="String" resultType="dto" >
		select * from tblMemo where seq = #{ seq }
	</select>
</mapper>

 

[ 예제3 - selectList ]

- 단일값 매개변수 -> 단일 레코드 반환

- 매개변수X, 반환값O

- tblMemo 테이블의 모든값 가져오기

  1) MyBatisController.java + MyBatisDAO.java

// MyBatisController.java 
@RequestMapping(value = "/m4.action", method = { RequestMethod.GET })
public String m4(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
		
	// 전체 메모 목록 가져오기
	List<MyBatisDTO> list = dao.m4();
		
	req.setAttribute("list", list);
		
	return "result";
}

// MyBatisDAO.java 
public List<MyBatisDTO> m4() {
	return template.selectList("test.m4");
}

 

  2) test.xml > SQL문 작성

// test.xml
<mapper namespace="test">
	<!-- 다중 레코드 반환 -->
	<!-- 주의사항!! 결과셋이 다중 레코드이지만 1개의 레코드를 담을 수 있는 자료형만 resultType에 적는다. -->
	<select id="m4" resultType="dto">
		select * from tblMemo order by seq desc
	</select>
</mapper>

 

- 결과 페이지까지 따로 작성은 하지않는다. SQL-Developer에서 확인을 해보면 해당 SELECT 작업이 이루어진걸 확인할 수 있다.

- Controller와 DAO 부분은 어렵지 않지만, xml파일에서 오타에 유의하도록하자.

728x90
반응형

댓글