주먀
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:491.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 |