<?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="insertMemberOne" parameterType="com.example.dto.MemberDTO">
INSERT INTO MEMBER(UEMAIL, UPW, UNAME, UPHONE, UROLE)
VALUES(#{ uemail }, #{ upw }, #{ uname }, #{ uphone }, #{ urole })
</insert>
<select id="selectMemberLogin" parameterType="com.example.dto.MemberDTO" resultType="com.example.dto.MemberDTO">
SELECT M.UEMAIL, M.UNAME, M.UPHONE, M.UROLE FROM MEMBER M WHERE M.UEMAIL=#{ uemail } AND M.UPW=#{ upw }
</select>
<select id="selectMemberList" resultType="com.example.dto.MemberDTO">
SELECT M.*, TO_CHAR(UREGDATE, 'YYYY-MM-DD') UREGDATE1 FROM MEMBER M
<!-- UREGDATE1 쓰려면 DTO에 등록해야 함 -->
</select>
<delete id="deleteMemberOne" parameterType="String">
DELETE FROM MEMBER WHERE UEMAIL=#{ uemail }
</delete>
<select id="selectMemberOne" parameterType="String" resultType="com.example.dto.MemberDTO">
SELECT M.* FROM MEMBER M WHERE M.UEMAIL=#{ uemail }
</select>
<update id="updateMemberOne" parameterType="com.example.dto.MemberDTO">
UPDATE MEMBER SET UNAME=#{ uname }, UPHONE=#{ uphone }
WHERE UEMAIL=#{ uemail }
</update>
</mapper>
package com.example.service;
import java.util.List;
import com.example.dto.MemberDTO;
import org.springframework.stereotype.Service;
@Service
public interface MemberService {
// 판매자 등록
public int insertMember(MemberDTO member);
// 판매자 목록(parameter 없음. return만 있음)
public List<MemberDTO> selectMemberList();
// 판매자 삭제(이메일 전송 후 int값 리턴)
public int deleteMemberOne(String uemail);
public MemberDTO selectMemberOne(String uemail);
public int updateMemberOne(MemberDTO member);
}
package com.example.service;
import java.util.List;
import com.example.dto.MemberDTO;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MemberServiceImpl implements MemberService{
// xml로 되어있는 member 호출
@Autowired
SqlSessionFactory sqlFactory;
@Override
public int insertMember(MemberDTO member) {
// namespace가 Member이고 id가 insertMemberOne인 항목 호출
return sqlFactory.openSession().insert("Member.insertMemberOne", member);
}
@Override
public List<MemberDTO> selectMemberList() {
// namespace, id로 호출
return sqlFactory.openSession().selectList("Member.selectMemberList");
}
@Override
public int deleteMemberOne(String uemail) {
return sqlFactory.openSession().delete("Member.deleteMemberOne", uemail);
}
@Override
public MemberDTO selectMemberOne(String uemail) {
return sqlFactory.openSession().selectOne("Member.selectMemberOne", uemail);
}
@Override
public int updateMemberOne(MemberDTO member) {
return sqlFactory.openSession().update("Member.updateMemberOne", member);
}
@Override
public MemberDTO selectMemberLogin(MemberDTO member) {
// xml mapper를 호출하는 Member id가 selectMemberLogin인 것
return sqlFactory.openSession().selectOne("Member.selectMemberLogin", member);
}
}
package com.example.controller;
import java.util.List;
import com.example.dto.MemberDTO;
import com.example.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping(value="/seller")
public class SellerController {
@Autowired
MemberService mService;
// /seller/insert
@GetMapping(value="/insert")
public String insertGET(){
// templates/seller/insert.html
return "/seller/insert";
}
@PostMapping(value="/insert")
public String insertPOST(@ModelAttribute MemberDTO member){
System.out.println(member.toString());
mService.insertMember(member);
return "redirect:/home"; // 주소를 바꾼 다음 Enter
}
// 127.0.0.1:9090/ROOT/seller/selectlist
@GetMapping(value = "/selectlist")
public String selectlistGET(Model model) {
List<MemberDTO> list = mService.selectMemberList();
model.addAttribute("list", list);
return "/seller/selectlist";
}
// 127.0.0.1:9090/ROOT/seller/delete?email=a
@RequestMapping(value="/delete", method={ RequestMethod.GET, RequestMethod.POST })
public String deleteGETPOST(@RequestParam(name="email") String em) {
int ret = mService.deleteMemberOne(em);
if(ret == 1) {
}
else {
}
return "redirect:/seller/selectlist";
}
// 127.0.0.1:9090/ROOT/seller/update?email=a
@GetMapping(value = "/update")
public String updateGET(
Model model,
@RequestParam(name="email") String em ) {
MemberDTO member = mService.selectMemberOne(em);
model.addAttribute("obj", member);
return "/seller/update";
}
@PostMapping(value="/update")
public String updatePOST(@ModelAttribute MemberDTO member) {
int ret = mService.updateMemberOne(member);
if(ret == 1) {
return "redirect:/seller/selectlist";
}
return "redirect:/seller/update?email=" + member.getUemail();
}
}
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>seller/insert</title>
<link rel="stylesheet" type="text/css"
th:href="@{/css/bootstrap.css}" />
<script type="text/javascript"
th:src="@{/js/bootstrap.min.js}"></script>
</head>
<body>
<div style="padding: 20px">
<h3>판매자등록</h3>
<hr />
<!-- '@'의 역할 => context-path를 자동으로 잡아줌 -->
<form th:action="@{/seller/insert}" method="post">
이메일: <input type="text" name="uemail" /><br />
암호: <input type="password" name="upw" /><br />
암호확인: <input type="password" /><br />
이름: <input type="text" name="uname" /><br />
연락처: <input type="text" name="uphone" /><br />
권한:
<select name="urole">
<option value="SELLER">판매자</option>
</select>
<br />
<input type="submit" value="판매자등록" />
</form>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>seller/insert</title>
<link rel="stylesheet" type="text/css"
th:href="@{/css/bootstrap.css}" />
<script type="text/javascript"
th:src="@{/js/bootstrap.min.js}"></script>
</head>
<body>
<div style="padding: 20px">
<h3>판매자목록</h3>
<hr />
<table>
<tr>
<th>번호</th>
<th>이메일</th>
<th>이름</th>
<th>연락처</th>
<th>권한</th>
<th>등록일</th>
<th>버튼</th>
</tr>
<tr th:each="tmp, idx: ${list}">
<td th:text="${idx.count}"></td>
<td th:text="${tmp.uemail}"></td>
<td th:text="${tmp.uname}"></td>
<td th:text="${tmp.uphone}"></td>
<td th:text="${tmp.urole}"></td>
<td th:text="${tmp.uregdate1}"></td>
<td>
<form th:action="@{/seller/delete}" method="post">
<input type="hidden" name="email" th:value="${tmp.uemail}" />
<input type="submit" value="post삭제" />
</form>
<a th:href="@{/seller/delete(email=${tmp.uemail})}">삭제</a>
<a th:href="@{/seller/update(email=${tmp.uemail})}">수정</a>
</td>
</tr>
</table>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>seller/insert</title>
<link rel="stylesheet" type="text/css"
th:href="@{/css/bootstrap.css}" />
<script type="text/javascript"
th:src="@{/js/bootstrap.min.js}"></script>
</head>
<body>
<div style="padding: 20px">
<h3>판매자등록</h3>
<hr />
<!-- '@'의 역할 => context-path를 자동으로 잡아줌 -->
<form th:action="@{/seller/update}" method="post">
이메일: <input type="text" name="uemail" th:value="${obj.uemail}" readonly/><br />
이름: <input type="text" name="uname" th:value="${obj.uname}" /><br />
연락처: <input type="text" name="uphone" th:value="${obj.uphone}" /><br />
<br />
<input type="submit" value="수정" />
</form>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>home</title>
</head>
<body>
<div style="padding: 20px">
<h3>THIS IS HOME!!!!!!</h3>
</div>
</body>
</html>
package com.example.dto;
import java.util.Date;
import lombok.Data;
@Data
public class MemberDTO {
// 이메일
private String uemail;
// 암호
private String upw;
// 이름
private String uname;
// 연락처
private String uphone;
// 권한
private String urole;
// 등록일
private Date uregdate;
// 등록일 포맷 변경용
private String uregdate1;
}