mybatis방법(MEMBER)

팡태(❁´◡`❁)·2022년 3월 28일
0

SPRING_20220328

목록 보기
2/24
  • memberMapper.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="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>

  • MemberService.java
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);
}

  • MemberServiceImpl.java
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);
    }
}

  • SellerController.java
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();
    }
}

  • seller/insert.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/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>

  • seller/selectlist.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>

  • seller/update.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>

  • home.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>

  • MemberDTO.java
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;
}

0개의 댓글