41기 개발자과정

20211208 SpringBoot, MyBatis 회원조회

segment 2021. 12. 14. 16:06

 

 

01.

get 방식으로 url 주소를 요청한다.

 

02.

MainController

@Controller
public class MainController {
	
	@GetMapping("/")
	public String main() {
		return "main";
	}

 

03.

MemberController

@Controller
@RequestMapping(value = "/member")
public class MemberController { }

 

04.

url 주소를 찾는다. /memberList

@GetMapping("/memberList")
   public String getMemberList(Model model) {
      List<Member> memberList = memberService.getMemberList();
      
      model.addAttribute("title", "회원전체조회");
      model.addAttribute("memberList", memberList);
      //model.addAttribute("memberList", memberService.getMemberList());
      
      return "member/memberList";
   }

 

05.

ksmart41.mybatis.dto

Member.java

	private String memberId;
	private String memberPw;
	private String memberLevel;
	private String memberLevelName;
	private String memberName;
	private String memberAddr;
	private String memberEmail;
	private String memberRegDate;

➡ 게터세터

투스트링 - 빌더 체크

package ksmart41.mybatis.dto;

public class Member {
	private String memberId;
	private String memberPw;
	private String memberLevel;
	private String memberLevelName;
	private String memberName;
	private String memberAddr;
	private String memberEmail;
	private String memberRegDate;
	
	
	public String getMemberId() {
		return memberId;
	}
	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	public String getMemberPw() {
		return memberPw;
	}
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	public String getMemberLevel() {
		return memberLevel;
	}
	public void setMemberLevel(String memberLevel) {
		this.memberLevel = memberLevel;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	public String getMemberAddr() {
		return memberAddr;
	}
	public void setMemberAddr(String memberAddr) {
		this.memberAddr = memberAddr;
	}
	public String getMemberEmail() {
		return memberEmail;
	}
	public void setMemberEmail(String memberEmail) {
		this.memberEmail = memberEmail;
	}
	public String getMemberRegDate() {
		return memberRegDate;
	}
	public void setMemberRegDate(String memberRegDate) {
		this.memberRegDate = memberRegDate;
	}
	public String getMemberLevelName() {
		return memberLevelName;
	}
	public void setMemberLevelName(String memberLevelName) {
		this.memberLevelName = memberLevelName;
	}
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Member [memberId=");
		builder.append(memberId);
		builder.append(", memberPw=");
		builder.append(memberPw);
		builder.append(", memberLevel=");
		builder.append(memberLevel);
		builder.append(", memberLevelName=");
		builder.append(memberLevelName);
		builder.append(", memberName=");
		builder.append(memberName);
		builder.append(", memberAddr=");
		builder.append(memberAddr);
		builder.append(", memberEmail=");
		builder.append(memberEmail);
		builder.append(", memberRegDate=");
		builder.append(memberRegDate);
		builder.append("]");
		return builder.toString();
	}
	
	
	
}

 

 

05. 인터페이스 추상메서드

MemberMapper.java

@Mapper
public interface MemberMapper {
	
	//회원 전체 조회
	public List<Member> getMemberList();
}

인터페이스는 public이 default.

명시하지 않아도 컴파일 시 public을 붙여준다.

 

 

06. 추상메서드 구현

src/main/resources/mapper

MemberMapper.xml

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

 

매퍼의 네임스페이스 : 매퍼의 별칭

별칭을 등록하지 않으면 경로를 다 써야한다. 

<mapper namespace="ksmart41.mybatis.mapper.MemberMapper">

 

 

 

column명과 변수명이 일치하도록 한다.

<select id="getMemberList" resultType="Member">
		SELECT
			 m.m_id    	  AS memberId
			,m.m_pw       AS memberPw
			,m.m_name  	  AS memberName
			,m.m_level	  AS memberLevel
			,m.m_email 	  AS memberEmail
			,m.m_addr     AS memberAddr
			,m.m_reg_date AS memberRegDate
		FROM
			tb_member AS m;
	</select>

or

ResultMap 사용.

	<mapper namespace="ksmart41.mybatis.mapper.MemberMapper">
	<resultMap type="Member" id="memberResultMap">
		<result column="m_id" 		property="memberId"/>
		<result column="m_pw" 		property="memberPw"/>
		<result column="m_name" 	property="memberName"/>
		<result column="m_level" 	property="memberLevel"/>
		<result column="m_email" 	property="memberEmail"/>
		<result column="m_addr" 	property="memberAddr"/>
		<result column="m_reg_date" property="memberRegDate"/>
	</resultMap>
    
    <select id="getMemberList" resultMap="memberResultMap" >
		SELECT
			 m.m_id
			,m.m_pw
			,m.m_name
			,m.m_level
			,m.m_email
			,m.m_addr
			,m.m_reg_date
		FROM
			tb_member AS m;
			
	</select>

 

select 태그: SELECT구문

id: 추상 메서드의 이름 / parameterType: 매개변수의 데이터 타입 / resultType: 반환형의 패키지명.

 

07. 의존성 주입

ksmart41.mybatis.service

MemberService.java

 

DI(의존성 주입) → new 대신 @Autowired

DI(의존성 주입) -> @autowired => 단 한개의 프로퍼티만 허용
 * 1. 프로퍼티
 * 2. 세터메서드
 * 3. 생성자 메서드

 

1. 프로퍼티 주입방식

@Autowired private MemberMapper memberMapper;
@Autowired private MemberMapper memberMapper1;

2. 세터 DI 주입방식

private MemberMapper memberMapper;
	
	@Autowired
	public void setmembermapper(MemberMapper memberMapper) {
		this.memberMapper = memberMapper;
	}

 

3. 생성자 메서드 주입방식★

private MemberMapper memberMapper;
	
    //4.3부터는 @Autowired 안써도 된다.
	public MemberService(MemberMapper memberMapper) {
		this.memberMapper = memberMapper;
	}

 

- > MemberService.java 전체코드

package ksmart41.mybatis.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import ksmart41.mybatis.dto.Member;
import ksmart41.mybatis.dto.MemberLevel;
import ksmart41.mybatis.mapper.MemberMapper;

@Service
@Transactional
public class MemberService {

	//생성자메서드 주입방식 
	private MemberMapper memberMapper;
	
	public MemberService(MemberMapper memberMapper) {
		this.memberMapper = memberMapper;
	}
	public List<MemberLevel> getMemberLevelList(){
		List<MemberLevel> memberLevelList = memberMapper.getMemberLevelList();
		return memberLevelList;
	}

	
}

 

08. 페이지

memberList.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="@{layout/default}">
      <th:block layout:fragment="customTitle">
      	<title  th:text="${title}"></title>
      </th:block>
      <th:block layout:fragment="customContents">
      	<table border="1">
      		<thead>
      			<tr>
      				<td>회원아이디</td>
      				<td>회원비밀번호</td>
      				<td>회원권한</td>
      				<td>회원이름</td>
      				<td>회원이메일</td>
      				<td>회원주소</td>
      				<td>회원등록날짜</td>
      				<td>수정</td>
      				<td>삭제</td>
      			</tr>
      		</thead>
      		<tbody>
      			<tr th:if="${not #lists.isEmpty(memberList)}" th:each="l : ${memberList}">
      				<td th:text="${l.memberId}"></td>
      				<td th:text="${l.memberPw}"></td>
      				<td th:text="${l.memberLevelName}"></td>
      				<td th:text="${l.memberName}"></td>
      				<td th:text="${l.memberEmail}"></td>
      				<td th:text="${l.memberAddr}"></td>
      				<td th:text="${l.memberRegDate}"></td>
      				<td>
      				<!-- html /member/modifyMember?memberId=id001 -->
      				<!-- => thymeleaf /member/modifyMember(memberId=${l.memberId}) -->
      				<!-- html /member/modifyMember?memberId=id001&memberPw=pw001 -->
      				<!-- => thymeleaf /member/modifyMember(memberId=${l.memberId},memberPw=${l.memberPw} ) -->
      					<a th:href="@{/member/modifyMember(memberId=${l.memberId})}">수정</a>
      				</td>
      				<td>
      					<a th:href="@{#}">삭제</a>
      				</td>
      			</tr>
      			<tr th:unless="${not #lists.isEmpty(memberList)}">
      				<td colspan="9">등록된 회원이 없습니다.</td>
      			</tr>
      		
      		</tbody>
      	</table>
      </th:block>
</html>