회원정보조회
select.jsp
<%@page import="kr.smhrd.entity.Member"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 1.request영역에 저장된 정보를 가져오시오. -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Forty by HTML5 UP</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="assets/css/main.css" />
</head>
<style>
</style>
<body style="text-align: center;">
<!-- Wrapper -->
<div id="wrapper">
<!-- Menu -->
<nav id="Update">
<table>
<caption><h2>회원관리페이지</h2></caption>
<tr>
<td>Email</td>
<td>Tel</td>
<td>Address</td>
<td><a>삭제</a></td>
</tr>
<tr>
<td>안현진</td>
<td>010-1234-5678</td>
<td>광주광역시</td>
<td><a>삭제</a></td>
</tr>
<tr>
<td>안현진</td>
<td>010-1234-5678</td>
<td>광주광역시</td>
<td><a>삭제</a></td>
</tr>
<tr>
<td>안현진</td>
<td>010-1234-5678</td>
<td>광주광역시</td>
<td><a>삭제</a></td>
</tr>
<tr>
<td>안현진</td>
<td>010-1234-5678</td>
<td>광주광역시</td>
<td><a>삭제</a></td>
</tr>
<!--
2.모든 회원의 이메일(email),전화번호(tel),주소(address)를 출력하시오.
회원들의 정보
-->
</table>
</nav>
<a href="goMain" class="button next scrolly">되돌아가기</a>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/skel.min.js"></script>
<script src="assets/js/util.js"></script>
<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
<script src="assets/js/main.js"></script>
</body>
</html>
MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.dao.MemberDAO">
<!-- namespace : 짝궁(DAO)가 누구??? -->
<!-- 회원가입 -->
<!--
#{변수명} : 변수에 데이터 타입에 자동맞춤
ex) values(#{email})
=> values('email@eamil.com')
${변수명} : 단순히 집어넣는 타입
ex) values(#{email})
=> values(email@email.com)
=> ERROR!
parameterType : 데이터들을 어디에 담아서 줄거냐
SQL문에 바인드변수가 2개 이상인 경우 필수
resultType : SQL문 실행 결과
-->
<insert id="join" parameterType="kr.smhrd.entity.Member">
insert into MEMBER
values(#{email},
#{pw},
#{tel},
#{address}
)
</insert>
<!-- 로그인 기능
ResultSet rs = psmt.executeQuery();
while(rs.next()){
String email = rs.getString(1);
String pw = rs.getString(2);
String tel = rs.getString(3);
String address = rs.getString(4);
// DTO에서 기본생성자가 필요한 코드
Member dto = new Member(email, pw, tel, address);
}
=> MyBatis에서 resultType으로 끝낼 수 있다.
-->
<!--
<resultMap type="" id=""></resultMap>
위 코드로 순서상관없이 사용가능하지만 일일이 써야하기에 비효율적
-->
<select id="login"
parameterType="kr.smhrd.entity.Member"
resultType="kr.smhrd.entity.Member">
select * from MEMBER
WHERE email = #{email} AND pw = #{pw}
</select>
<!-- 개인정보수정 기능 -->
<update id="update"
parameterType="kr.smhrd.entity.Member">
update MEMBER
set pw = #{pw},
tel = #{tel},
address = #{address}
where email = #{email}
</update>
<!-- 회원전체목록 조회 -->
<select id="select"
resultType="kr.smhrd.entity.Member">
select *
from MEMBER
where ! email='admin'
</select>
</mapper>
MemberDAO
package kr.smhrd.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import kr.smhrd.entity.Member;
public class MemberDAO {
// DAO : SQL문을 실행하고, 실행 결과를 리턴
// 1. DB와 연결
private SqlSessionFactory factory =
SqlSessionManager.getSqlSessionFactory();
// Mybatis : java(DAO) <=mapping=> sql(xml)
// 2. 회원정보를 Member 테이블에 저장하는 기능
public int join(Member dto) {
// 1단계) SqlSession 빌려오기
// true --> auto commit
SqlSession session = factory.openSession(true);
// 2단계) sql문 실행
// insert, delete, update : 키워드랑 같은 메소드
// select : selectOne (한 개만 가져올 때)
// : selectList (여러 개 가져올 때)
// insert("id", 넣어줄 데이터)
// parameterType == 메소드의 매개변수
// insert, delete, update는 resultType이 int로만 고정
int row = session.insert("join", dto);
// 3단계) 빌려온 SqlSession 반환
session.close();
// 4단계) SQL문 실행한 결과를 리턴
// resultType == return type
return row;
}
// 2. 로그인 메소드
public Member login(Member dto) {
// 1단계. SqlSession 빌려오기
SqlSession session = factory.openSession(true);
// 2단계. SQL문 실행
// Select문의 실행결과는 resultType을 따른다.
// selectOne : resultType 그대로
// selectList : List<resultType의 데이터 타입>
Member user = session.selectOne("login", dto);
// 3단계. session 반환하기
session.close();
// 4단계. 결과 리턴
return user;
}
// 3. 개인정보수정 메소드
public int update(Member dto) {
SqlSession session = factory.openSession(true);
int row = session.update("update", dto);
session.close();
return row;
}
// 4. 회원정보목록 조회
public List<Member> select() {
// 1) SqlSession 빌려오기
SqlSession session = factory.openSession(true);
// 2) SQL문 실행
List<Member> list = session.selectList("select");
// 3) SqlSession 반환하기
session.close();
// 4) 실행결과 리턴
return list;
}
}
GoSelectController
package kr.smhrd.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;
@WebServlet("/goSelect")
public class GoSelectController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 데이터 수집 => X
// 2. 기능 구현
MemberDAO dao = new MemberDAO();
List<Member> list = dao.select();
// select.jsp한테 list를 넘겨주기
// Controller => jsp로 데이터를 넘겨줄 때 request를 사용
request.setAttribute("list", list);
// View 선택
String nextview = "WEB-INF/views/select.jsp";
RequestDispatcher rd = request.getRequestDispatcher(nextview);
rd.forward(request, response);
}
}
select.jsp
<%@page import="kr.smhrd.entity.Member"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 1.request영역에 저장된 정보를 가져오시오. -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Forty by HTML5 UP</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="assets/css/main.css" />
</head>
<style>
</style>
<body style="text-align: center;">
<%
// request한테 맡겨둔 데이터 받아오기
List<Member> list = (List<Member>)request.getAttribute("list");
%>
<!-- Wrapper -->
<div id="wrapper">
<!-- Menu -->
<nav id="Update">
<table>
<caption><h2>회원관리페이지</h2></caption>
<tr>
<td>Email</td>
<td>Tel</td>
<td>Address</td>
<td><a>삭제</a></td>
</tr>
<%for(Member dto : list){%>
<tr>
<td><%=dto.getEmail() %></td>
<td><%=dto.getTel() %></td>
<td><%=dto.getAddress() %></td>
<td><a href="#">삭제</a></td>
</tr>
<%} %>
<!--
2.모든 회원의 이메일(email),전화번호(tel),주소(address)를 출력하시오.
회원들의 정보
-->
</table>
</nav>
<a href="goMain" class="button next scrolly">되돌아가기</a>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/skel.min.js"></script>
<script src="assets/js/util.js"></script>
<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
<script src="assets/js/main.js"></script>
</body>
</html>
회원정보삭제
select.jsp
<%@page import="kr.smhrd.entity.Member"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 1.request영역에 저장된 정보를 가져오시오. -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Forty by HTML5 UP</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="assets/css/main.css" />
</head>
<style>
</style>
<body style="text-align: center;">
<%
// request한테 맡겨둔 데이터 받아오기
List<Member> list = (List<Member>)request.getAttribute("list");
%>
<!-- Wrapper -->
<div id="wrapper">
<!-- Menu -->
<nav id="Update">
<table>
<caption><h2>회원관리페이지</h2></caption>
<tr>
<td>Email</td>
<td>Tel</td>
<td>Address</td>
<td><a>삭제</a></td>
</tr>
<%for(Member dto : list){%>
<tr>
<td><%=dto.getEmail() %></td>
<td><%=dto.getTel() %></td>
<td><%=dto.getAddress() %></td>
<!-- 쿼리스트링 : url 뒤에 데이터를 붙여보내는 포맷
url?name=value?...
-->
<td><a href="delete?email=<%=dto.getEmail()%>">삭제</a></td>
</tr>
<%} %>
<!--
2.모든 회원의 이메일(email),전화번호(tel),주소(address)를 출력하시오.
회원들의 정보
-->
</table>
</nav>
<a href="goMain" class="button next scrolly">되돌아가기</a>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/skel.min.js"></script>
<script src="assets/js/util.js"></script>
<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
<script src="assets/js/main.js"></script>
</body>
</html>
MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.dao.MemberDAO">
<!-- namespace : 짝궁(DAO)가 누구??? -->
<!-- 회원가입 -->
<!--
#{변수명} : 변수에 데이터 타입에 자동맞춤
ex) values(#{email})
=> values('email@eamil.com')
${변수명} : 단순히 집어넣는 타입
ex) values(#{email})
=> values(email@email.com)
=> ERROR!
parameterType : 데이터들을 어디에 담아서 줄거냐
SQL문에 바인드변수가 2개 이상인 경우 필수
resultType : SQL문 실행 결과
-->
<insert id="join" parameterType="kr.smhrd.entity.Member">
insert into MEMBER
values(#{email},
#{pw},
#{tel},
#{address}
)
</insert>
<!-- 로그인 기능
ResultSet rs = psmt.executeQuery();
while(rs.next()){
String email = rs.getString(1);
String pw = rs.getString(2);
String tel = rs.getString(3);
String address = rs.getString(4);
// DTO에서 기본생성자가 필요한 코드
Member dto = new Member(email, pw, tel, address);
}
=> MyBatis에서 resultType으로 끝낼 수 있다.
-->
<!--
<resultMap type="" id=""></resultMap>
위 코드로 순서상관없이 사용가능하지만 일일이 써야하기에 비효율적
-->
<select id="login"
parameterType="kr.smhrd.entity.Member"
resultType="kr.smhrd.entity.Member">
select * from MEMBER
WHERE email = #{email} AND pw = #{pw}
</select>
<!-- 개인정보수정 기능 -->
<update id="update"
parameterType="kr.smhrd.entity.Member">
update MEMBER
set pw = #{pw},
tel = #{tel},
address = #{address}
where email = #{email}
</update>
<!-- 회원전체목록 조회 -->
<select id="select"
resultType="kr.smhrd.entity.Member">
select *
from MEMBER
where not email='admin'
</select>
<!-- 회원목록 삭제 -->
<!-- 집어넣는 데이터가 한 개라면 parameterType을 적지않아도 된다. -->
<delete id="delete">
delete from MEMBER
where email = #{email}
</delete>
</mapper>
MemberDAO
package kr.smhrd.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import kr.smhrd.entity.Member;
public class MemberDAO {
// DAO : SQL문을 실행하고, 실행 결과를 리턴
// 1. DB와 연결
private SqlSessionFactory factory =
SqlSessionManager.getSqlSessionFactory();
// Mybatis : java(DAO) <=mapping=> sql(xml)
// 2. 회원정보를 Member 테이블에 저장하는 기능
public int join(Member dto) {
// 1단계) SqlSession 빌려오기
// true --> auto commit
SqlSession session = factory.openSession(true);
// 2단계) sql문 실행
// insert, delete, update : 키워드랑 같은 메소드
// select : selectOne (한 개만 가져올 때)
// : selectList (여러 개 가져올 때)
// insert("id", 넣어줄 데이터)
// parameterType == 메소드의 매개변수
// insert, delete, update는 resultType이 int로만 고정
int row = session.insert("join", dto);
// 3단계) 빌려온 SqlSession 반환
session.close();
// 4단계) SQL문 실행한 결과를 리턴
// resultType == return type
return row;
}
// 2. 로그인 메소드
public Member login(Member dto) {
// 1단계. SqlSession 빌려오기
SqlSession session = factory.openSession(true);
// 2단계. SQL문 실행
// Select문의 실행결과는 resultType을 따른다.
// selectOne : resultType 그대로
// selectList : List<resultType의 데이터 타입>
Member user = session.selectOne("login", dto);
// 3단계. session 반환하기
session.close();
// 4단계. 결과 리턴
return user;
}
// 3. 개인정보수정 메소드
public int update(Member dto) {
SqlSession session = factory.openSession(true);
int row = session.update("update", dto);
session.close();
return row;
}
// 4. 회원정보목록 조회
public List<Member> select() {
// 1) SqlSession 빌려오기
SqlSession session = factory.openSession(true);
// 2) SQL문 실행
List<Member> list = session.selectList("select");
// 3) SqlSession 반환하기
session.close();
// 4) 실행결과 리턴
return list;
}
// 5. 회원정보 삭제
public int delete(String email) {
SqlSession session = factory.openSession(true);
int row = session.delete("delete", email);
session.close();
return row;
}
}
DeleteController
package kr.smhrd.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;
@WebServlet("/delete")
public class DeleteController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 데이터 수집
String email = request.getParameter("email");
// 2. 기능구현
MemberDAO dao = new MemberDAO();
int row = dao.delete(email);
// 3. View 선택
String nextview = "goSelect";
response.sendRedirect(nextview);
}
}
'Web > JSP_Servlet' 카테고리의 다른 글
MVC_게시글 작성, 게시글 조회 by FrontController (1) | 2023.05.03 |
---|---|
MVC_FrontController (1) | 2023.05.03 |
MVC_개인정보수정 (0) | 2023.04.26 |
MVC_로그인/로그아웃 시스템 (0) | 2023.04.25 |
MVC_회원가입 시스템 (0) | 2023.04.24 |
댓글