Eggs Sunny Side Up
본문 바로가기
Web/JSP_Servlet

MVC_회원관리 시스템

by guswn100059 2023. 4. 28.

회원정보조회

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

댓글