JSP&Servlet/기초정리

MyBatis 전체회원조회 기능 구현

줘니(•̀ᴗ•́)و 2023. 2. 15. 17:39
728x90

* MyBatis 실습하면서 배우기!

 

- 전체회원조회 만들기

: email이 'admin'인 관리자계정 회원가입 먼저 하기

 

 

0) Main.jsp 파일에서 실습 부분

: 로그인 한 사용자의 email이 문자열 'admin'과 일치 시 '회원관리'가 보이게 만들기

 

<!-- Header -->
	<header id="header" class="alt"> <a href="index.html"
		class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a> 
		<nav>
			<c:if test="${empty member}">
				<a href="#menu">로그인</a>
			</c:if>
			<c:if test="${!empty member}">
				<!-- 관리자 계정 admin -->
				<!-- 로그인 한 사용자의 email이 문자열 admin과 일치 시 '회원관리' 보이게 -->
				<c:if test="${member.email == 'admin'}">
					<a href="SelectAllService">회원관리</a>
				</c:if>

				<a href="update.jsp">개인정보 수정</a>
				<a href="LogoutService">로그아웃</a>
			</c:if> 
		</nav> 
</header>

 

 

 

1) SelectAllService 서블릿파일

: '회원관리' 클릭 시 이동할 서블릿파일

 

내가 이전 페이지에서 받아올 데이터가 없기 때문에 request로 데이터 받아오는 과정 skip!

 

1. DAO에 전체회원조회 기능 메소드 만들어 연결

2. 조회한 정보를 request영역에 담기

3. forward 방식으로 select.jsp 파일로 이동

 

package com.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 com.smhrd.model.MemberDAO;
import com.smhrd.model.MemberVO;


@WebServlet("/SelectAllService")
public class SelectAllService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1. DAO에 전체회원 정보 조회 기능 메소드 만들어 연결
		MemberDAO dao = new MemberDAO();
		List<MemberVO> list  = dao.selectAll();
		
		// 2. 조회한 정보를 request 영역에 담기
		request.setAttribute("list", list);
		
		// 3. forward 방식으로 select.jsp로 이동
		RequestDispatcher rd = request.getRequestDispatcher("select.jsp");
		rd.forward(request, response);
	}
}

 

 

 

2) MemberDAO 전체회원정보 메소드 만들기

: DB에서 전체회원정보를 조회해서 가져오고, 조회 시 차례대로 보여줘야 하기 때문에

List 자료형을 사용해 전체회원정보 데이터를 담을 것이다! - List<MemberVO>에!

 

결과값을 반환하면 List 자료형에 담긴 데이터들이 반환되고 그걸 select.jsp 파일에서 꺼내쓰면 된다.

 

 < > 제네릭 기법 : 클래스 내부에서 사용 가능한 자료형을 외부에서 지정할 수 있는 기법 

 

// 전체회원정보 조회 메소드
	public List<MemberVO> selectAll() {
		
		// 1. connection 빌려오기
		SqlSession session = sqlSessionFactory.openSession(true);
		
		// 2. sql문 실행(session 사용하기)
		List<MemberVO> result = null;
		try {
			// selectList(전체를 가져오는)
			result = session.selectList("selectAll");	
		}finally {
			// 3. 객체 닫기
			session.close();
		}
		// 4. 결과값 반환
		return result;
	}

 

 

 

3) MemberMapper.xml 에 sql문 작성 

: mapper태그 안에 select문 추가

 

<select id="selectAll" resultType="MemberVO">
	select * from web_member where email != 'admin'
</select>

 

 

tip) mapper.xml 파일에서 사용하는 자료형의 별칭을 설정할 수 있다.

config.xml에서 my batis 설정!

configuration : my batis 설정 기술하는 태그

이 설정을 해두면 위에 코드블럭에서 보면 알 수 있듯

"com.~.~.~" 가 아니라 resultType에 "MemberVO"라고만 적어도 된다!

 

 

 

 

4) select.jsp 파일

 

 

 

이런 식으로 출력되게 하려면,

List 자료형으로 저장된 "list"를 가져와 반복문을 통해 순차적으로 출력해주어야 함 → tr태그, td태그 안에

스크립트릿으로 코드를 짤 수도 있고, jstl로도 가능하다!

 

 

 

1) 스크립트릿 버전

 

: request.getAttribute();는 Object 자료형(최고부모)이기 때문에 다운캐스팅이 필요함

: for each 문 → for(String 변수명(i) : 데이터 가져올 리스트) { 실행문 }

 

<%
	// 1. request 영역에 저장되어 있는 데이터 꺼내오기
	List<MemberVO> list = (List<MemberVO>)request.getAttribute("list");
								
	// 2. 순차적으로 출력
	// for each 문 -> for(String 변수명: 데이터 가져올 리스트) { }
	for(MemberVO i : list){
		out.print("<tr>");
		out.print("<td>"+ i.getEmail() + "</td>");
		out.print("<td>"+ i.getTel() + "</td>");
		out.print("<td>"+ i.getAddress() + "</td>");
		out.print("<tr>");
	} 
%>

 

 

 

2) jstl 사용한 버전(el표현법 사용)

 

: jstl 을 쓰려면 무조건 필요한 것 → 지시자!!!!! 추가

- forEach : 반복문

  • items : 모든 데이터가 들어 있는 list 형태
  • var : list 안에 있는 데이터를 하나씩 꺼내서 어떤 변수에 담을건지 설정하는 것

 

// 맨 위에 지시자 추가!!!!!!!!!
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<c:forEach items="${list}" var="vo">
	<tr>
		<td>${vo.email}</td>
		<td>${vo.tel}</td>
		<td>${vo.address}</td>
	</tr>
</c:forEach>

 

 

 

HAHA..^^

 

 

728x90