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>