package kr.or.ddit;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
//자바빈 클래스
//lombok사용해서 아래처럼 편하게 만들 수 있지만 POJO(초기의 순수한 자바)에 위배됨
//@Setter
//@Getter
//@ToString
public class MemberVO {
private String memberid;
private String password;
private String name;
private String email;
//pattern : date 넣을 때 요 형식으로 써주세요~
//@DateTimeFormat(pattern="yyyy/MM/dd")꼭 써줘야 date형식으로 들어간다
@DateTimeFormat(pattern="yyyy/MM/dd")
private Date regdate;
//기본 생성자
public MemberVO() {
super();
// TODO Auto-generated constructor stub
}
//파라미터 던져주면 멤버변수에 자동으로 세팅된다
public MemberVO(String memberid, String password, String name, String email, Date regdate) {
super();
this.memberid = memberid;
this.password = password;
this.name = name;
this.email = email;
this.regdate = regdate;
}
public String getMemberid() {
return memberid;
}
public void setMemberid(String memberid) {
this.memberid = memberid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getRegdate() {
return regdate;
}
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
//비밀번호 변경 기능 구현 시 사용
public boolean matchPassword(String pwd) {
return password.contentEquals(pwd);
}
@Override
public String toString() {
return "MemberVO [memberid=" + memberid + ", password=" + password + ", name=" + name + ", email=" + email
+ ", regdate=" + regdate + "]";
}
}
package kr.or.ddit;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//spring 프레임워크가 자바 빈(=객체)으로 등록해서 관리할 수 있도록 어노테이션 달기
@Controller
public class MemberController {
@RequestMapping("/member/insert")
public String insert(Model model) {
model.addAttribute("memberVO", new MemberVO());
return "member/joinForm";
//model은 jsp를 return, ModelAndView는 ModelAndView 객체를 리턴
}
}
package kr.or.ddit;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
//spring 프레임워크가 자바 빈(=객체)으로 등록해서 관리할 수 있도록 어노테이션 달기
@Repository
public class MemberDao {
//sqlSessionTemplate 타입 객체를 BookDao 객체에 주입(사용가능하게) 함
@Autowired
SqlSessionTemplate sqlSessionTemplate; //root-context 객체에 있는 id와 같아야 함
//회원가입
public int insert(MemberVO memberVO) {
//namaspace.id
//result가 0이면 입력 실패, 1이면 입력 성공
int result = this.sqlSessionTemplate.insert("member.insert", memberVO);
return result;
}
}
package kr.or.ddit;
/*
* 스프링은 직접 클래스를 생성하는 것을 지양(안함)하고,
* 인터페이스를 통해 접근하는 것을 권장하는 프레임워크.
*/
public interface MemberService {
//회원가입
public int insert(MemberVO memberVO);
}
package kr.or.ddit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//spring 프레임워크가 자바 빈(=객체)으로 등록해서 관리할 수 있도록 어노테이션 달기
@Service
public class MemberServiceImpl implements MemberService {
//DI(의존성 주입)
//데이터베이스에 접근을 위해 MemberDao 인스턴스를 주입받음
@Autowired
MemberDao memberDao;
//회원가입
@Override
public int insert(MemberVO memberVO) {
return memberDao.insert(memberVO);
}
}
스프링 폼 태그 라이브러리
form 태그 라이브러리 추가하기
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
joinForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<title>회원가입</title>
</head>
<body>
<!--
스프링 폼 태그 라이브러리
- 스프링 폼은 HTML 폼을 표시하기 위한 태그 라이브러리
- 스프링 폼을 이용하면 HTML 폼과 자바 객체를 쉽게 바인딩할 수 있음
-->
<form:form modelAttribute="memberVO" method="post" action="/member/insert">
<p>
아이디 : <form:input path="memberid" />
<font color="red">
<form:errors path="memberid" />
</font>
</p>
<p>
이름 : <form:input path="name" />
<font color="red">
<form:errors path="name" />
</font>
</p>
<p>
비밀번호 : <form:input path="password" />
<font color="red">
<form:errors path="password" />
</font>
</p>
<p>
이메일 : <form:input path="email" />
<font color="red">
<form:errors path="email" />
</font>
</p>
<form:button name="register">등록</form:button>
</form:form>
</body>
</html>
<?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="member">
<!-- 회원가입 -->
<insert id="insert" parameterType="memberVO"> <!-- typeAlias에서 정한거 -->
INSERT INTO MEMBER(MEMBERID,PASSWORD,NAME,EMAIL,REGDATE)
VALUES(#{memberid},#{password},#{name},#{email},SYSDATE)
</insert>
</mapper>