일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 제네릭
- oracle
- GRANT VIEW
- exception
- 대덕인재개발원
- 사용자예외클래스생성
- 추상메서드
- 예외미루기
- cursor문
- 자동차수리시스템
- NestedFor
- EnhancedFor
- 인터페이스
- 컬렉션프레임워크
- 메소드오버로딩
- 오라클
- 집합_SET
- 자바
- 객체 비교
- Java
- 참조형변수
- 다형성
- 어윈 사용법
- 정수형타입
- abstract
- 환경설정
- 생성자오버로드
- 예외처리
- 컬렉션 타입
- 한국건설관리시스템
- Today
- Total
거니의 velog
(12) 마이바티스 프레임워크 사용하기 3 본문
(3) 조건 값으로 회원 정보 조회
* 다음은 검색창에서 검색 조건을 입력한 후 member.xml의 SQL문에 전달하여 조건에 대한 회원 정보를 조회하는 예제를 실습해 보자.
1. 다음과 같이 실습 파일을 준비하자.
2. member.xml을 다음과 같이 편집한다. 조건 값으로 조회하는 경우는 브라우저에서 전달되는 값이 있으므로 <select> 태그에 parameterType 속성을 전달되는 조건 값의 데이터 타입으로 지정한다. 조건 값이 문자열인 경우는 parameterType 속성을 String으로, 정수인 경우는 int로 설정한다.
* MemberDAO에서 메서드 호출 시 전달된 조건 값은 매개변수 이름으로 SQL문의 조건식에 #{전달된 매개변수 이름} 형식으로 사용한다. 그리고 조회되는 레코드가 한 개인 경우는 resultType 속성에 레코드를 저장할 memberVO를 설정한다.
<!-- MemberDAO에서 호출하는 id를 지정한다. -->
<!-- 조회되는 한 개의 레코드를 memberVO에 저장한다. -->
<!-- MemberDAO에 SQL문 호출 시 전달되는 매개변수의 데이터 타입을 지정한다. -->
<select id="selectMemberById" resultType="memberVO" parameterType="String" >
<![CDATA[
select * from t_member
where
id=#{id}
]]>
</select>
<!-- SQL 문 실행시 매개변수의 이름을 pwd의 조건 값으로 사용한다. -->
<select id="selectMemberByPwd" resultMap="memResult" parameterType="int" >
<![CDATA[
select * from t_member
where
pwd = #{pwd}
]]>
</select>
3. 서블릿에서는 브라우저의 요청에 대해 MemberDAO 클래스의 메서드를 호출한 후 그 결과를 브라우저로 출력한다.
[MemberServlet.java]
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
MemberDAO dao = new MemberDAO();
MemberVO memberVO = new MemberVO();
String action = request.getParameter("action");
String nextPage = "";
if (action== null || action.equals("listMembers")) {
List<MemberVO> membersList = dao.selectAllMemberList();
request.setAttribute("membersList", membersList);
nextPage = "test02/listMembers.jsp";
} else if (action.equals("selectMemberById")) { // 검색 조건이 selectMemberById이면 전송된 값을 getParameter()로 가져온 후 SQL문의 조건식에서 id의 조건 값으로 전달한다.
String id = request.getParameter("value");
memberVO = dao.selectMemberById(id);
request.setAttribute("member", memberVO);
nextPage = "test02/memberInfo.jsp";
} else if (action.equals("selectMemberByPwd")) { // 검색 조건이 selectMemberByPwd이면 전송된 값을 getParameter()로 가져온 후 SQL문의 조건식에서 pwd의 조건 값으로 전달한다.
int pwd = Integer.parseInt(request.getParameter("value"));
List<MemberVO> membersList = dao.selectMemberByPwd(pwd);
request.setAttribute("membersList", membersList);
nextPage = "test02/listMembers.jsp";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
4. selectOne() 메서드는 하나의 레코드를 조회할 때 사용한다. selectOne() 메서드의 두 번째 인자는 첫 번째 인자의 SQL문에서 매개변수 이름 id로 조건 값을 전달한다.
[MemberDAO.java]
public MemberVO selectMemberById(String id){
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
// 서블릿에서 넘어온 id의 값을 selectOne() 메서드 호출 시 해당 SQL문의 조건 값으로 전달한다.
// selectOne() : 레코드를 한 개만 조회할 때 사용한다.
MemberVO memberVO = session.selectOne("mapper.member.selectMemberById",id);
return memberVO;
}
public List<MemberVO> selectMemberByPwd(int pwd) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> membersList = null;
// 비밀번호가 같은 회원은 여러 명이 있을 수 있으므로 selectList() 메서드로 조회한다.
// 정수 데이터인 pwd를 SQL문의 조건 값으로 전달한다.
membersList = session.selectList("mapper.member.selectMemberByPwd", pwd);
return membersList;
}
5. search.jsp 를 다음과 같이 작성한다. 검색창에 입력한 값과 셀렉트 박스의 검색 조건을 선택해 서블릿으로 전송한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 검색창</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/mem3.do">
입력 : <input type="text" name="value" /> <!-- 검색할 값을 입력한다. -->
<select name="action">
<option value="listMembers">전체</option>
<option value="selectMemberById">아이디</option>
<option value="selectMemberByPwd">비밀번호</option>
</select> <br> <!-- 셀렉트 박스의 검색 조건을 선택한다. -->
<input type="submit" value="검색" />
</form>
</body>
</html>
6. memberInfo.jsp에서는 검색 조건으로 조회한 회원 정보를 출력한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.io.*,java.util.*"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<table border=1 align="center" width="100%">
<tr align="center" bgcolor="lightgreen">
<td><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
<td><b>가입일</b></td>
</tr>
<tr align="center">
<td>${member.id} </td>
<td>${member.pwd} </td>
<td>${member.name} </td>
<td>${member.email} </td>
<td>${member.joinDate}</td>
</tr>
</table>
</body>
</html>
7. 다음의 주소로 요청하여 셀렉트 박스에서 아이디를 선택하여 검색 조건을 설정한다. 입력 칸에 park이라고 입력한 후 검색을 클릭한다.
- http://localhost:8090/pro23/test02/search.jsp
8. 조회된 결과가 memberInfo.jsp 에 표시된다.
9. 이번에는 셀렉트 박스에서 검색 조건을 비밀번호로 설정한 후 검색을 클릭한다. 그러면 입력한 값과 같은 비밀번호를 가지는 회원 정보가 모두 표시된다.
10. 검색 조건을 전체로 설정해서 요청하면 전체 회원 정보가 표시된다.
(4) 회원 정보 추가
* 이번에는 회원 가입 창에서 입력한 회원 정보를 마이바티스를 이용해 등록해 보자.
1. 다음과 같이 com.spring.ex04 패키지를 만들고 실습 파일을 준비한다.
2. member.xml 을 다음과 같이 작성한다. insert 문은 <insert> 태그를 이용해 작성하고 등록할 회원 정보를 memberVO 빈에 설정한 후 <insert> 태그의 parameterType의 memberVO로 전달한다. values 다음에 #{속성이름}을 나열하면 memberVO 빈의 속성 값이 설정된다.
<!-- MemberDAO 에서 회원 정보를 memberVO의 속성에 저장해서 넘긴다. -->
<!-- memberVO의 속성 이름에 저장된 값을 value로 설정한다. -->
<insert id="insertMember" parameterType="memberVO">
<![CDATA[
insert into t_member(id,pwd, name, email)
values(#{id}, #{pwd}, #{name}, #{email})
]]>
</insert>
3. 브라우저에서 전송된 action 값이 insertMember면 함께 전송된 회원 정보를 가져와 MemberVO 객체에 설정한다. 그런 다음 MemberDAO의 insertMember() 메서드를 호출하면서 인자로 전달된다.
[MemberServlet.java]
}else if(action.equals("insertMember")) {
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email = request.getParameter("email");
memberVO.setId(id);
memberVO.setPwd(pwd);
memberVO.setName(name);
memberVO.setEmail(email);
dao.insertMember(memberVO); // 회원 가입 창에서 전송된 회원 정보를 MemberVO에 설정한 후 insertMember() 메서드로 전달한다.
nextPage="/mem4.do?action=listMembers";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
4. MemberDAO 클래스에서 insert 문을 사용하려면 SqlSession 클래스의 insert() 메서드를 이용해야 한다. 다음과 같이 insert() 메서드의 첫 번째 인자에는 실행하고자 하는 SQL문의 id를 입력하고 두 번째 인자에는 SQL문으로 전달할 데이터를 지정한다. SQL문으로 전달할 데이터는 <insert> 태그의 parameterType 속성의 데이터 타입인 MemberVO 클래스와 일치해야 한다.
public int insertMember(MemberVO memberVO) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = 0;
result = session.insert("mapper.member.insertMember", memberVO); // 지정한 id의 SQL문에 memberVO의 값을 전달하여 회원 정보를 테이블에 추가한다.
session.commit(); // 수동 커밋이므로 반드시 commit() 메서드를 호출하여 영구적으로 반영한다.
return result;
}
5. 회원 가입창에서 회원 정보를 전송하면 action 값으로 insertMember를 전달한다.
[memberForm.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<style>
.text_center {
text-align: center;
}
</style>
</head>
<body>
<form method="post" action="${contextPath}/mem4.do?action=insertMember"> <!-- action 값으로 insertMember를 MemberServlet으로 전달한다. -->
<h1 class="text_center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200">
<p align="right">아이디</p>
</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200">
<p align="right">비밀번호</p>
</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200">
<p align="right">이름</p>
</td>
<td width="400">
<p><input type="text" name="name"></p>
</td>
</tr>
<tr>
<td width="200">
<p align="right">이메일</p>
</td>
<td width="400">
<p><input type="text" name="email"></p>
</td>
</tr>
<tr>
<td width="200">
<p> </p>
</td>
<td width="400"><input type="submit" value="가입하기"><input type="reset" value="다시입력"></td>
</tr>
</table>
</form>
</body>
</html>
6. 다음의 주소로 요청하여 회원 정보를 입력하고 가입하기를 클릭하면 새 회원 정보가 추가되고 회원 목록이 표시된다.
- http://localhost:8090/pro23/test03/memberForm.jsp
'Java_Spring Framework part1' 카테고리의 다른 글
(14) 마이바티스 프레임워크 사용하기 5 (0) | 2023.11.10 |
---|---|
(13) 마이바티스 프레임워크 사용하기 4 (0) | 2023.11.10 |
(11) 마이바티스 프레임워크 사용하기 2 (1) | 2023.11.08 |
(10) 마이바티스 프레임워크 사용하기 1 (0) | 2023.10.28 |
(9) 스프링 JDBC 기능 (0) | 2023.10.28 |