일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예외처리
- Java
- 다형성
- abstract
- cursor문
- oracle
- 대덕인재개발원
- 인터페이스
- 메소드오버로딩
- 참조형변수
- 생성자오버로드
- 제네릭
- 오라클
- 정수형타입
- NestedFor
- exception
- 자바
- 환경설정
- 객체 비교
- 예외미루기
- 집합_SET
- EnhancedFor
- 자동차수리시스템
- 컬렉션프레임워크
- 어윈 사용법
- 컬렉션 타입
- 추상메서드
- 사용자예외클래스생성
- GRANT VIEW
- 한국건설관리시스템
- Today
- Total
거니의 velog
(13) 마이바티스 프레임워크 사용하기 4 본문
(5) HashMap을 이용한 회원 정보 추가
* 앞에서는 MemberVO에 회원 정보를 설정한 후 SQL문으로 전달하여 테이블에 추가했다. 이번에는 HashMal에 회원 정보를 설정한 후 추가해 보자.
1. member.xml을 다음과 같이 수정한다. insert 문의 parameterType을 HashMap으로 지정한다. 회원 정보들은 HashMap의 key를 이용해 가져온다.
<!-- MemberDAO 에서 회원 정보를 HashMap에 담아서 전달한다. -->
<!-- HashMap에 각각의 key로 저장된 value를 가져와 테이블에 추가한다. -->
<insert id="insertMember2" parameterType="java.util.Map">
<![CDATA[
insert into t_member(id,pwd, name, email)
values(#{id}, #{pwd}, #{name}, #{email})
]]>
</insert>
2. MemberServlet 클래스를 다음과 같이 작성한다. 브라우저에서 전달된 회원 정보를 HashMap에 key/value로 저장한 후 MemberDAO의 insertMember2() 메서드로 전달한다.
}else if(action.equals("insertMember2")) {
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email = request.getParameter("email");
Map<String, String> memberMap=new HashMap<String, String>();
memberMap.put("id", id);
memberMap.put("pwd", pwd);
memberMap.put("name", name);
memberMap.put("email", email);
dao.insertMember2(memberMap); // 회원 가입창에서 전송된 회원 정보를 HashMap에 key/value로 저장한 후 MemberDAO의 InsertMember2() 인자로 전달한다.
nextPage="/mem4.do?action=listMembers";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
3. 이번에는 SqlSession 클래스의 insert() 메서드 호출 시 두 번째 인자로 HashMap을 전달한다.
[MemberDAO.java]
public int insertMember2(Map<String,String> memberMap){
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
int result= result = session.insert("mapper.member.insertMember2", memberMap); // 메서드로 전달된 HashMap을 다시 SQL 문으로 전달한다.
session.commit();
return result;
}
4. memberForm.jsp의 <form> 태그의 action 속성을 다음과 같이 변경한다.
<form method="post" action="${contextPath}/mem4.do?action=insertMember2">
5. 다음의 주소로 요청하여 회원 정보를 입력하고 가입하기를 클릭한 후 회원 정보를 등록하고 결과를 확인한다.
- http://localhost:8090/pro23/test03/memberForm.jsp
(6) 회원 정보 수정
* 이번에는 insert 문을 이용해 추가한 회원 정보를 update 문을 이용해 수정해 보자.
1. 회원 정보 수정에 필요한 modMember.jsp를 추가한다.
2. member.xml을 다음과 같이 수정한다. update 문은 <update> 태그를 이용해 작성하고, parameterType 속성은 MemberDAO에서 메서드를 호출할 때 전달될 MemberVO 클래스 타입으로 지정한다. update 문에서 수정할 컬럼 값들을 MemberVO 속성 이름으로 지정하고, 수정할 회원 ID에 해당하는 조건 값도 MemberVO의 id 속성 값으로 지정한다.
<!-- SQL문에 사용될 데이터를 memberVO빈에 설정해 전달한다. -->
<!-- memberVO 빈의 속성 값을 각 컬럼의 수정 값으로 설정한다. -->
<!-- memberVO 빈의 id 속성 값을 조건 값으로 설정한다. -->
<update id="updateMember" parameterType="memberVO">
<![CDATA[
update t_member
set pwd=#{pwd}, name=#{name}, email=#{email}
where
id=#{id}
]]>
</update>
3. MemberServlet을 다음과 같이 작성한다. 회원 수정창에서 전달받은 회원 정보를 memberVO에 설정한 후 SQL문으로 전달한다.
}else if(action.equals("updateMember")){
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.updateMember(memberVO); // 회원 수정 창에서 전송된 회원 정보를 MemberVO의 속성에 설정한 후 updateMember()를 호출하면서 MemberVO 객체를 전달한다.
nextPage="/mem4.do?action=listMembers";
4. MemberDAO에서 SqlSession 클래스의 update() 메서드를 이용해서 update 문을 실행하도록 다음과 같이 설정한다. update() 메서드를 호출하면서 서블릿에서 전달된 memberVO를 update 문으로 전달한다. update() 메서드로 SQL문을 실행한 후에는 반드시 commit() 메서드를 사용해서 커밋을 해주어야 한다.
public int updateMember(MemberVO memberVO) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.update("mapper.member.updateMember", memberVO); // update문 호출 시 SqlSession의 update() 메서드를 이용한다.
session.commit();
return result;
}
5. modMember.jsp를 다음과 같이 작성한다. 수정할 회원 정보를 입력하고 action 값으로 updateMember를 설정하여 서블릿으로 전달한다.
<%@ 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" %>
<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=updateMember">
<h1 class="text_center">회원 정보 수정창</h1>
<table align="center">
<tr>
<td width="200">
<p align="right">아이디
</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200">
<p align="right">비밀번호
</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200">
<p align="right">이름
</td>
<td width="400">
<p><input type="text" name="name">
</td>
</tr>
<tr>
<td width="200">
<p align="right">이메일
</td>
<td width="400">
<p><input type="text" name="email">
</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. 다음의 주소로 요청하여 ID가 cha인 회원의 수정 정보를 입력하고 수정하기를 클릭하면 수정된 회원 정보가 표시된다.
- http://localhost:8090/pro23/test03/modMember.jsp
(7) 회원 정보 삭제
* 이번에는 회원 목록 창에서 회원 ID를 전송받아 회원 정보를 삭제해 보자.
1. member.xml에 다음 내용을 추가한다. delete 문은 <delete> 태그를 이용해 작성하며 parameterType 속성을 String으로 설정한다. 매개변수 이름 id로 전달된 값을 delete문의 조건 값으로 사용한다.
<!-- 회원 ID는 문자열이므로 parameterType을 String 타입으로 설정한다. -->
<!-- 전달된 ID를 조건 값으로 해당 회원 정보를 삭제한다. -->
<delete id="deleteMember" parameterType="String">
<![CDATA[
delete from t_member
where
id=#{id}
]]>
</delete>
2. MemberServlet 클래스는 다음과 같이 작성한다. 브라우저에서 서블릿으로 전달된 action 값이 deleteMember면 같이 전달된 ID 값을 받아 MemberDAO로 전달한다.
}else if(action.equals("deleteMember")){
String id=request.getParameter("id"); // 회원 ID를 가져온다
dao.deleteMember(id); // 회원 목록창에서 전달된 ID를 deleteMember() 메서드를 호출하면서 SQL문으로 전달한다.
nextPage="/mem4.do?action=listMembers";
3. MemberDAO 클래스는 다음과 같이 작성한다. SqlSession 클래스의 delete() 메서드를 이용해 delete 문을 실행하고 전달된 ID를 다시 delete() 메서드를 호출하면서 delete 문으로 전달한다.
public int deleteMember(String id) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = 0;
result = session.delete("mapper.member.deleteMember", id); // delete문을 실행하려면 SqlSession의 delete() 메서드를 이용해야 한다.
session.commit(); // SQL 문을 실행한 후 반드시 커밋한다.
return result;
}
4. listMembers.jsp를 다음과 같이 작성한다. 회원 목록창에 삭제하기 링크를 추가한다. 삭제하기를 클릭하면 action 값과 회원 ID를 서블릿으로 전송하도록 한다.
<%@ 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" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<table border="1" align="center" width="80%">
<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>
<td><b>삭제</b></td>
</tr>
<c:forEach var="member" items="${membersList}">
<tr align="center">
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
<td><a href="${contextPath}/mem4.do?action=deleteMember&id=${member.id }">삭제하기</a></td>
<!-- 삭제하기 클릭 시 action 값과 회원 ID를 서블릿으로 전송한다. -->
</tr>
</c:forEach>
</table>
<a href="${contextPath}/member/memberForm.do">
<h1 style="text-align:center">회원가입</h1>
</a>
</body>
</html>
5. 다음의 주소로 회원 목록을 요청한 후 삭제하기를 클릭한다. 그러면 해당 회원 정보를 삭제한 후 회원 목록을 표시한다.
- http://localhost:8090/pro23/mem4.do
'Java_Spring Framework part1' 카테고리의 다른 글
(15) 스프링과 마이바티스 연동하기 (0) | 2023.11.10 |
---|---|
(14) 마이바티스 프레임워크 사용하기 5 (0) | 2023.11.10 |
(12) 마이바티스 프레임워크 사용하기 3 (0) | 2023.11.10 |
(11) 마이바티스 프레임워크 사용하기 2 (1) | 2023.11.08 |
(10) 마이바티스 프레임워크 사용하기 1 (0) | 2023.10.28 |