package kr.or.ddit.controller.member;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.or.ddit.service.IMemberService;
import kr.or.ddit.vo.MemberVO;
import lombok.extern.slf4j.Slf4j;
@Controller
@RequestMapping("/crud/member")
@Slf4j
public class CrudMemberController {
@Inject
private IMemberService service;
@GetMapping(value="/register")
public String crudMemberRegisterForm() {
log.info("crudMemberRegisterForm() 실행..!");
return "crud/member/register";
}
@RequestMapping(value="/register", method = RequestMethod.POST)
public String crudMemberRegister(MemberVO member, Model model) {
log.info("crudMemberRegister() 실행...!");
service.register(member);
model.addAttribute("msg", "등록이 완료되었습니다.");
return "crud/member/success";
}
@GetMapping(value="/list")
public String list(Model model) {
List<MemberVO> memberList = service.list();
model.addAttribute("memberList", memberList);
return "crud/member/list";
}
@GetMapping(value="/read")
public String read(int userNo, Model model) {
MemberVO member = service.read(userNo);
model.addAttribute("member", member);
return "crud/member/read";
}
// 수정하기 폼 이동 메소드
@RequestMapping(value="/modify", method = RequestMethod.GET)
public String modifyForm(int userNo, Model model) {
MemberVO member = service.read(userNo);
model.addAttribute("member", member);
return "crud/member/modify";
}
// 수정하기 처리 메소드
@RequestMapping(value="/modify", method = RequestMethod.POST)
public String modify(MemberVO member, Model model) {
service.modify(member);
model.addAttribute("mgs", "수정이 완료 되었습니다.");
return "crud/member/success";
}
**// 삭제하기 메소드**
@RequestMapping(value="/remove", method = RequestMethod.POST)
public String remove(int userNo, Model model) {
service.remove(userNo);
model.addAttribute("msg", "삭제가 완료되었습니다.");
return "crud/member/success";
}
}
interface로 먼저 IBoardSerivce를 생성하고 한다.
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.MemberMapper;
import kr.or.ddit.service.IMemberService;
import kr.or.ddit.vo.MemberAuth;
import kr.or.ddit.vo.MemberVO;
@Service
public class MemberServiceImpl implements IMemberService {
@Inject
private MemberMapper mapper;
@Override
public void register(MemberVO member) {
mapper.create(member);
MemberAuth memberAuth = new MemberAuth();
memberAuth.setUserNo(member.getUserNo());
memberAuth.setAuth("ROLE_USER");
mapper.createAuth(memberAuth);
}
@Override
public List<MemberVO> list() {
return mapper.list();
}
@Override
public MemberVO read(int userNo) {
return mapper.read(userNo);
}
// 수정하기 service
@Override
public void modify(MemberVO member) {
mapper.modify(member);
int userNo = member.getUserNo();
mapper.deleteAuth(userNo); // 권한 삭제
List<MemberAuth> authList = member.getAuthList();
for(int i = 0; i < authList.size(); i++) {
MemberAuth memberAuth = authList.get(i);
String auth = memberAuth.getAuth();
if(auth == null) {
continue;
}
if(auth.trim().length() == 0) {
continue;
}
memberAuth.setUserNo(userNo);
mapper.createAuth(memberAuth);
}
}
// 삭제하기 서비스
@Override
public void remove(int userNo) {
mapper.deleteAuth(userNo);
mapper.delete(userNo);
}
}package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.MemberMapper;
import kr.or.ddit.service.IMemberService;
import kr.or.ddit.vo.MemberAuth;
import kr.or.ddit.vo.MemberVO;
@Service
public class MemberServiceImpl implements IMemberService {
@Inject
private MemberMapper mapper;
@Override
public void register(MemberVO member) {
mapper.create(member);
MemberAuth memberAuth = new MemberAuth();
memberAuth.setUserNo(member.getUserNo());
memberAuth.setAuth("ROLE_USER");
mapper.createAuth(memberAuth);
}
@Override
public List<MemberVO> list() {
return mapper.list();
}
@Override
public MemberVO read(int userNo) {
return mapper.read(userNo);
}
// 수정하기 service
@Override
public void modify(MemberVO member) {
mapper.modify(member);
int userNo = member.getUserNo();
mapper.deleteAuth(userNo); // 권한 삭제
List<MemberAuth> authList = member.getAuthList();
for(int i = 0; i < authList.size(); i++) {
MemberAuth memberAuth = authList.get(i);
String auth = memberAuth.getAuth();
if(auth == null) {
continue;
}
if(auth.trim().length() == 0) {
continue;
}
memberAuth.setUserNo(userNo);
mapper.createAuth(memberAuth);
}
}
**// 삭제하기 서비스**
@Override
public void remove(int userNo) {
mapper.deleteAuth(userNo);
mapper.delete(userNo);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.MemberAuth;
import kr.or.ddit.vo.MemberVO;
public interface MemberMapper {
public void create(MemberVO member);
public void createAuth(MemberAuth memberAuth);
public List<MemberVO> list();
public MemberVO read(int userNo);
public void modify(MemberVO member);
public void deleteAuth(int userNo);
public void delete(int userNo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"<https://mybatis.org/dtd/mybatis-3-mapper.dtd>">
<mapper namespace="kr.or.ddit.mapper.MemberMapper">
<resultMap type="memberVO" id="memberMap">
<id property="userNo" column="user_no"/>
<result property="userNo" column="user_no"/>
<result property="userId" column="user_id"/>
<result property="userPw" column="user_pw"/>
<result property="userName" column="user_Name"/>
<result property="regDate" column="reg_date"/>
<result property="updDate" column="upd_date"/>
<collection property="authList" resultMap="authMap"/>
</resultMap>
<resultMap type="memberAuth" id="authMap">
<result property="userNo" column="user_no"/>
<result property="auth" column="auth"/>
</resultMap>
<insert id="create" parameterType="memberVO" useGeneratedKeys="true">
<selectKey keyProperty="userNo" resultType="int" order="BEFORE">
select seq_member.nextval from dual
</selectKey>
insert into member(
user_no, user_id, user_pw, user_name, reg_date, upd_date
) values (
#{userNo}, #{userId}, #{userPw}, #{userName}, sysdate, sysdate
)
</insert>
<insert id="createAuth" parameterType="memberAuth">
insert into member_auth(
user_no, auth
)values(
#{userNo}, #{auth}
)
</insert>
<select id="list" resultType="memberVO">
select
user_no, user_id, user_pw, user_name, reg_date
from member
order by user_no desc
</select>
<!-- 한명의 회원과 join을 통한 해당 회원의 여러개의 역할을 가져와야함 -->
<select id="read" parameterType="int" resultMap="memberMap">
select
m.user_no, user_id, user_pw, user_name, reg_date, upd_date, auth
from member m left outer join member_auth a on(m.user_no = a.user_no)
where m.user_no = #{userNo}
</select>
<!-- 회원 테이블 수정하기 쿼리 -->
<update id="modify" parameterType="memberVO">
update member
set
user_name = #{userName}
where user_no = #{userNo}
</update>
**<!-- 회원의 권한 삭제 -->**
<delete id="deleteAuth" parameterType="int">
delete from member_auth
where user_no = #{userNo}
</delete>
**<!-- 회원 삭제 -->**
<delete id="delete" parameterType="int">
delete from member
where user_no = #{userNo}
</delete>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="<https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js>"></script>
</head>
<body>
<h2>Read</h2>
<table>
<tr>
<td>userId</td>
<td>${member.userId }</td>
</tr>
<tr>
<td>userName</td>
<td>${member.userName }</td>
</tr>
<tr>
<td>auth - 1</td>
<td>${member.authList[0].auth }</td>
</tr>
<tr>
<td>auth - 2</td>
<td>${member.authList[1].auth }</td>
</tr>
<tr>
<td>auth - 3</td>
<td>${member.authList[2].auth }</td>
</tr>
</table>
<form action="/crud/member/remove" method="post" id="delForm">
<input type="hidden" name="userNo" value="${member.userNo }">
</form>
<button type="button" id="btnModify">Modify</button>
<button type="button" id="btnRemove">Remove</button>
<button type="button" id="btnList">List</button>
</body>
<script type="text/javascript">
$(function(){
var btnModify = $("#btnModify");
var btnRemove= $("#btnRemove");
var btnList = $("#btnList");
var delForm = $("#delForm");
// 수정 버튼 클릭 시 이벤트
btnModify.on("click", function(){
delForm.attr("action", "/crud/member/modify");
delForm.attr("method", "get");
delForm.submit();
});
// 삭제 버튼 클릭 시 이벤트
btnRemove.on("click", function(){
if(confirm("정말로 삭제하시겠습니까?")){
delForm.submit();
}
});
// 목록 버튼 클릭 시 이벤트
btnList.on("click", function(){
location.href = "/crud/member/list";
});
})
</script>
</html>
삭제 버튼을 누르면 잘 삭제된 것을 확인할 수 있다.

