주먀

5-1. JoinCon.java / 5-2. Member.java(DTO) / 5-3. MemberMapper.xml(SQL문) / 5-4 MemberDAO.JAVA(DAO) 본문

학원/Servlet

5-1. JoinCon.java / 5-2. Member.java(DTO) / 5-3. MemberMapper.xml(SQL문) / 5-4 MemberDAO.JAVA(DAO)

주먀 2023. 5. 2. 16:49

1.kr.smhrd.controller -> JoinCon -> add -> Controller -> 클래스만들기

1-2. JoinCon.java 

package kr.smhrd.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;

public class JoinCon implements Controller {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// JoinController
		// 1. 데이터 수집
		request.setCharacterEncoding("UTF-8");

		String email = request.getParameter("email");
		String pw = request.getParameter("pw");
		String tel = request.getParameter("tel");
		String address = request.getParameter("address");

		// 데이터가 2개 이상이라면 DTO로 묶어놓기
		Member dto = new Member();
		dto.setEmail(email);
		dto.setPw(pw);
		dto.setTel(tel);
		dto.setAddress(address);

		// 2. 기능 구현 : DB에 회원정보를 저장 (DAO)
		// 1) DAO를 생성
		MemberDAO dao = new MemberDAO();

		int row = dao.join(dto);

		// 3. View 선택
		String nextView = null;

		// 만약 성공했다면 -> 회원가입 성공 페이지
		// 만약 실패했다면 -> 메인페이지
		if (row > 0) {
			nextView = "redirect:/goSuccess.do";
		} else {
			nextView = "redirect:/goMain.do";
		}

		// 페이지 이동
		// forward vs redirect
		// C -> V C -> C
		// 기능의 중복 실행을 방지하기 위해서 url을 초기화하려고 redirect를 사용하는 것
		// response.sendRedirect(nextView);

		return nextView;
	}

}

 

 

2. Member.java(DTO)

package kr.smhrd.entity;

public class Member {

	// 계층간 (WEB <--> DB, Back <--> Front)
	// 데이터 전달을 위한 객체
	// DTO, VO

	// 규칙 (3가지)
	// 1. Table에 있는 컬럼을 반드시 포함해야 한다.(필드)
	// DB의 데이터 타입과 맞아야함
	// 컬럼의 이름 == 변수 이름(Mybatis)
	private String email;
	private String pw;
	private String tel;
	private String address;

	// 2. 기본 생성자를 반드시 포함
	public Member() {

	}

	// 3. Getter / Setter 반드시 있어야 함
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	};

}

 

 

3. MemberMapper.xml(SQL문)

<?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@email.com') 
		${변수명} : 단순히 집어넣는 기능 ex) values(${email}) ==> values(email@email.com) parameterType 
		: 데이터들을 어디에 담아서 줄 거냐는 말 SQL문에 바인드변수가 2개 이상인 경우 필수 resultType : SQL문 실행 결과를 
		어떤 데이터 타입으로 받을 것인가 -->
	<insert id="join" parameterType="kr.smhrd.entity.Member">
		insert into Member
		values(#{email},
		#{pw},
		#{tel},
		#{address})
	</insert>

	<!-- 로그인 기능 // java jdbc 작업 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); Member dto = new Member(email, 
		pw, tel, address); // mybatis resultType 작업 } -->
	<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>

	<!-- admin을 제외한 모든 회원 목록 가져오기 -->
	<select id="select" resultType="kr.smhrd.entity.Member">
		select * from Member where not
		email = 'admin'
	</select>

	<!-- 회원 정보 삭제하기 -->
	<!-- 집어넣는 데이터가 1개라면 parameterType은 없어도 된다 -->
	<delete id="delete">
		delete from Member where email=#{email}
	</delete>

	<!-- 이메일 중복체크 -->
	<select id="check" resultType="kr.smhrd.entity.Member">
		select * from member
		where email =
		#{email}
	</select>

</mapper>

 

 

4. MemberDAO.JAVA(DAO)

package kr.smhrd.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import kr.smhrd.entity.Board;
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;

	}

	// 로그인 메소드
	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;
	}

	// 정보수정 메소드
	public int update(Member dto) {
		// 1) SQLSession 빌려오기
		SqlSession session = factory.openSession(true);

		// 2) SQL문 실행
		// update는 resultType이 int로만 고정
		int row = session.update("update", dto);

		// 3) 빌려온 session 반환
		session.close();

		// 4) 결과 리턴
		return row;
	}

	// 모든 회원들의 정보를 가져오는 메소드
	public List<Member> select() {
		// 1) SQLSession 빌려오기
		SqlSession session = factory.openSession(true);

		// 2) SQL문 실행
		List<Member> list = session.selectList("select");

		// 3) 빌려온 session 반환
		session.close();
		// 4) 결과 리턴
		return list;
	}

	// 회원 삭제 메소드
	public int delete(String email) {
		// 1) SQLSession 빌려오기
		SqlSession session = factory.openSession(true);

		// 2) SQL문 실행
		int row = session.delete("delete", email);

		// 3) 빌려온 session 반환
		session.close();

		// 4) 결과 리턴
		return row;

	}

	public Member check(String email) {

		SqlSession session = factory.openSession(true);

		Member dto = session.selectOne("check", email);

		session.close();

		return dto;
	}

}

'학원 > Servlet' 카테고리의 다른 글

7. DeleteCon.java  (0) 2023.05.03
6. LoginCon.java  (0) 2023.05.02
4. Controller.java  (0) 2023.05.02
3. GoSuccessCon.java  (0) 2023.05.02
2. GoMainCon.java  (0) 2023.05.02