MyBatis

[MyBatis] 회원가입 기능 구현

이나피스 2022. 6. 15. 00:39
반응형

회원가입 버튼 클릭시 실행되는 서블릿

@MemberEnrollFormController.java

회원가입 폼화면으로 forward만 시켜줌

package com.kh.mybatis.member.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MemberEnrollFormController
 */
@WebServlet("/enrollForm.me")
public class MemberEnrollFormController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MemberEnrollFormController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("WEB-INF/views/member/memberEnrollForm.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

VO 클래스 생성

@Member.java

package com.kh.mybatis.member.model.vo;

import java.sql.Date;

public class Member {
	
	private int userNo;			//	USER_NO			NUMBER
	private String userId;			//	USER_ID			VARCHAR2(30 BYTE)
	private String userPwd;			//	USER_PWD		VARCHAR2(100 BYTE)
	private String userName;		//	USER_NAME		VARCHAR2(15 BYTE)
	private String email;			//	EMAIL			VARCHAR2(100 BYTE)
	private String birthday;		//	BIRTHDAY		VARCHAR2(6 BYTE)
	private String gender;			//	GENDER			VARCHAR2(1 BYTE)
	private String phone;			//	PHONE			VARCHAR2(13 BYTE)
	private String address;			//	ADDRESS			VARCHAR2(100 BYTE)
	private Date enrollDate;		//	ENROLL_DATE		DATE
	private Date modifyDate;		//	MODIFY_DATE		DATE
	private String status;			//	STATUS			VARCHAR2(1 BYTE)
	
	public Member() {
		super();
	}

	public Member(int userNo, String userId, String userPwd, String userName, String email, String birthday,
			String gender, String phone, String address, Date enrollDate, Date modifyDate, String status) {
		super();
		this.userNo = userNo;
		this.userId = userId;
		this.userPwd = userPwd;
		this.userName = userName;
		this.email = email;
		this.birthday = birthday;
		this.gender = gender;
		this.phone = phone;
		this.address = address;
		this.enrollDate = enrollDate;
		this.modifyDate = modifyDate;
		this.status = status;
	}
	
	

	public Member(String userId, String userPwd, String userName, String email, String birthday,
			String gender, String phone, String address) {
		super();
		this.userId = userId;
		this.userPwd = userPwd;
		this.userName = userName;
		this.email = email;
		this.birthday = birthday;
		this.gender = gender;
		this.phone = phone;
		this.address = address;
	}

	public int getUserNo() {
		return userNo;
	}

	public void setUserNo(int userNo) {
		this.userNo = userNo;
	}

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getEmail() {
		return email;
	}

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

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

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

	public Date getEnrollDate() {
		return enrollDate;
	}

	public void setEnrollDate(Date enrollDate) {
		this.enrollDate = enrollDate;
	}

	public Date getModifyDate() {
		return modifyDate;
	}

	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	@Override
	public String toString() {
		return "Member [userNo=" + userNo + ", userId=" + userId + ", userPwd=" + userPwd + ", userName=" + userName
				+ ", email=" + email + ", birthday=" + birthday + ", gender=" + gender + ", phone=" + phone
				+ ", address=" + address + ", enrollDate=" + enrollDate + ", modifyDate=" + modifyDate + ", status="
				+ status + "]";
	}
	
	
}

 

Service 인터페이스 생성

@MemberService.java

MemberService 인터페이스에서 설계하고 implements 받은 MemberServiceImpl 클래스에서 구현

인터페이스는 상수필드 또는 추상메소드만 오기때문에 public static final, public abstract 생략 가능

package com.kh.mybatis.member.model.service;

import com.kh.mybatis.member.model.vo.Member;

public interface MemberService {
	int insertMember(Member m);
}

 

ServiceImpl 클래스 생성

@MemberServiceImpl.java

이전까지는 매번 xml을 불러오는 기본생성자 new MemberDao()를 호출했지만(예. new MemberDao().updateMember)
이 경우 매번 호출이 되므로 비효율적임

전역변수로 만들어놓은 후 재사용!

package com.kh.mybatis.member.model.service;

import org.apache.ibatis.session.SqlSession;

import com.kh.mybatis.common.template.Template;
import com.kh.mybatis.member.model.dao.MemberDao;
import com.kh.mybatis.member.model.vo.Member;

public class MemberServiceImpl implements MemberService{
	
	private MemberDao memberDao = new MemberDao();
	
	@Override
	public int insertMember(Member m) {
		
		SqlSession sqlSession = Template.getSqlSession();
		
		int result = memberDao.insertMember(sqlSession, m);
		
		if(result>0) {
			sqlSession.commit();
		} else {
			sqlSession.rollback();
		}
		
		sqlSession.close();
		
		return result;
	}
}

 

Dao클래스 생성 및 mapper 생성

@MemberDao.java

sqlSession에서 제공하는 메소드를 통해 sql문을 찾아 실행후 결과를 받음
sqlSession.sql문종류메소드("메퍼파일namespace.sql문id", sql문을완성시킬객체);
-> 해당 sql문이 완성상태(위치홀더가없을때)이면 sql문을완성시킬객체는 생략

package com.kh.mybatis.member.model.dao;

import org.apache.ibatis.session.SqlSession;

import com.kh.mybatis.member.model.vo.Member;

public class MemberDao {

	public int insertMember(SqlSession sqlSession, Member m) {
    
		return sqlSession.insert("memberMapper.insertMember",m);
	}
}

@member-mapper.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="memberMapper">
  
	  	<insert id="insertMember" parameterType="member">
	  	   INSERT 
	  	   		INTO MEMBER 
                		(
	  	   		USER_NO,
	            	        USER_ID,
	                 	USER_PWD,
	                    	USER_NAME,
		                EMAIL,
		                BIRTHDAY,
		                GENDER,
		                PHONE,
		                ADDRESS
		                )
	            VALUES(
	            	    SEQ_UNO.NEXTVAL,
	                    #{userId},
	                    #{userPwd},
	                    #{userName},
	                    #{email},
	                    #{birthday},
	                    #{gender},
	                    #{phone},
	                    #{address}
	                    )                                 
	  	</insert>
  
  </mapper>
반응형