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파일에서 오타에 유의하도록하자.
'교육 > Spring' 카테고리의 다른 글
Spring 개발자 수업 99일차 - AOP 적용한 게시판 만들기 (0) | 2021.08.17 |
---|---|
Spring 개발자 수업 98일차(2) - 타일즈(Tiles) (0) | 2021.08.13 |
Spring 개발자 수업 97일차(3) - MyBatis(INSERT, DELETE, UPDATE) (0) | 2021.08.13 |
Spring 개발자 수업 97일차(2) - 간단한 메모장 만들기 (0) | 2021.08.12 |
Spring 개발자 수업 97일차(1) - Spring MVC Model DI (0) | 2021.08.12 |
댓글