<!DOCTYPE html>
<html xml:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 회원조회 -->
<h1>JPA 회원 조회</h1>
<div class="nav">
<form action="/members/search" method="post">
회원검색이름 : <input type="text" name="name" placeholder="회원검색 이름을 입력하세요">
<button type="submit">검색</button><p>
</form>
</div>
<!-- 회원목록 -->
<div class="container">
<div>
<table border="1">
<thead>
<tr>
<th>No</th>
<th>이름</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
package com.oracle.oBootJpa01.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.PostMapping;
import com.oracle.oBootJpa01.domain.Member;
import com.oracle.oBootJpa01.service.MemberService;
@Controller
public class MemberController {
private final MemberService memberService;
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 회원 가입 폼 이동
@GetMapping(value = "/members/new")
public String createFrom() {
System.out.println("MemberController /members/new start...");
return "/members/createMemberForm";
}
// 회원 가입 정보 저장
@PostMapping(value = "/members/save")
public String memberSave(Member member) {
System.out.println("MemberController /members/save start...");
System.out.println("member.getId()->"+member.getId());
System.out.println("member.getName()->"+member.getName());
memberService.memberSave(member);
System.out.println("MemberController memberSave After...");
return "redirect:/";
}
// 회원 목록
@GetMapping(value = "/members")
public String listMember(Model model) {
List<Member> memberList = memberService.getListAllMember();
logger.info("memberList.size() ->"+memberList.size());
model.addAttribute("members", memberList);
return "members/memberList";
}
// 회원 검색
@PostMapping(value = "/members/search")
public String membersSearch(Member member, Model model) {
System.out.println("/members/search member.getName()->"+member.getName());
List<Member> memberList = memberService.getListSearchMember(member.getName());
System.out.println("/members/search memberList.size()->"+memberList.size());
model.addAttribute("members", memberList);
return "/members/memberList";
}
}
package com.oracle.oBootJpa01.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oracle.oBootJpa01.domain.Member;
import com.oracle.oBootJpa01.repository.MemberRepository;
@Service
@Transactional
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// 회원가입
public Long memberSave(Member member) {
System.out.println("MemberService memberSave member->"+member);
memberRepository.memberSave(member);
System.out.println("memberRepository memberSave After");
return member.getId();
}
// 회원목록
public List<Member> getListAllMember() {
List<Member> listMember = memberRepository.findAllMember();
System.out.println("MemberService getListAllMember listMember.size() ->"+listMember.size());
return listMember;
}
// 회원검색
public List<Member> getListSearchMember(String searchName) {
System.out.println("MemberService getListSearchMember Start...");
System.out.println("MemberService getListSearchMember searchName->"+searchName);
List<Member> listMember = memberRepository.findByName(searchName);
System.out.println("MemberService getListSearchMember listMember.size()->"+listMember.size());
return listMember;
}
}
package com.oracle.oBootJpa01.repository;
import java.util.List;
import com.oracle.oBootJpa01.domain.Member;
public interface MemberRepository {
Member memberSave(Member member);
List<Member> findAllMember();
List<Member> findByName(String searchName);
}
package com.oracle.oBootJpa01.repository;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.stereotype.Repository;
import com.oracle.oBootJpa01.domain.Member;
@Repository
public class JpaMemberRepository implements MemberRepository {
// DML 작업을 하기 위해서 필수
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
// 회원정보 저장
@Override
public Member memberSave(Member member) {
// 저장 method
em.persist(member);
System.out.println("JpaMemberRepository memberSave member After...");
return member;
}
// 회원목록
@Override
public List<Member> findAllMember() {
List<Member> memberList = em.createQuery("select m from Member m", Member.class)
.getResultList();
System.out.println("JpaMemberRepository findAllMember memberList.size()->"+memberList.size());
return memberList;
}
// 회원검색
@Override
public List<Member> findByName(String searchName) {
String pname = searchName + '%';
System.out.println("JpaMemberRepository findByNames pname->"+pname);
List<Member> memberList = em.createQuery("select m from Member m where name Like :name", Member.class)
.setParameter("name", pname).getResultList();
System.out.println("JpaMemberRepository memberList.size()->"+memberList.size());
return memberList;
}
}
다대다나 대로 끝나는 것은 쓰지 않는게 좋다 / 다대일 권장!
@Data-> canEqual(), equals(), hashCode(), toString() 생성
시퀀스 쓴다면 Long 타입이 권장
- 시퀀스를 만들 때
@SequenceGenerator(name = "member_seq_gen", // 자바 객체 SEQ sequenceName = "member_seq_generator", // DB SEQ initialValue = 1, allocationSize = 1 )
- id에 시퀀스를 걸어주고 싶을 때
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq_gen")
- 컬럼명을 지정하고 싶을 때
-> precision, length : 데이터 크기 및 길이 지정@Column(name = "member_id", precision = 10) private Long id; @Column(name = "username", length = 50) private String name; private Long sal;
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Entity
@Data
@SequenceGenerator(name = "member_seq_gen", // 자바 객체 SEQ
sequenceName = "member_seq_generator", // DB SEQ
initialValue = 1,
allocationSize = 1
)
@Table(name = "member2")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "member_seq_gen"
)
@Column(name = "member_id", precision = 10)
private Long id;
@Column(name = "username", length = 50)
private String name;
private Long sal;
}
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import lombok.Data;
@Entity
@Data
@SequenceGenerator(name = "team_seq_gen",
sequenceName = "team_seq_generator", // 매핑할 DB 시퀀스 이름
initialValue = 1,
allocationSize = 1
)
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "team_seq_gen"
)
private Long team_id;
@Column(name = "teamname")
private String name;
}
member(다) - team(일)
// 관계 설정 @ManyToOne // 다대일 @JoinColumn(name = "team_id") // 조인할 테이블의 PK private Team team;
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@SequenceGenerator(name = "member_seq_gen", // 자바 객체 SEQ
sequenceName = "member_seq_generator", // DB SEQ
initialValue = 1,
allocationSize = 1
)
@Table(name = "member2")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "member_seq_gen"
)
@Column(name = "member_id", precision = 10)
private Long id;
@Column(name = "username", length = 50)
private String name;
private Long sal;
// 관계 설정
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
테이블 + 시퀀스 생성
member 테이블에 FK(team_id)
<!DOCTYPE html>
<html xml:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>JPA 회원등록2</h1>
<div class="container">
<form action="/memberSave" method="post">
회원이름 : <input type="text" id="name" name="name" placeholder="회원이름을 입력하세요"><p>
팀 이름 : <input type="text" id="name" name="teamname" placeholder="팀이름을 입력하세요">
<button type="submit">등록</button>
</form>
</div>
</body>
</html>
package com.oracle.oBootJpa02.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.service.MemberService;
@Controller
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 회원등록 페이지 이동
@GetMapping(value = "/members/new")
public String createForm() {
System.out.println("MemberController /members/new Start...");
return "/members/createMemberForm";
}
// 회원저장
@PostMapping(value = "/memberSave")
public String memberSave(Member member) {
System.out.println("MemberController /members/save Start...");
System.out.println("member.getTeamname()->"+member.getTeam());
System.out.println("member.getName()->"+member.getName());
memberService.memberSave(member);
System.out.println("MemberController memberSave After");
return "redirect:/";
}
}
package com.oracle.oBootJpa02.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.repository.MemberRepository;
@Service
@Transactional
public class MemberService {
@Autowired
public final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public Member memberSave(Member member) {
System.out.println("MemberService memberSave Start...");
System.out.println("MemberService join member.getName()->"+member.getName());
memberRepository.memberSave(member);
System.out.println("MemberRepository memberSave After");
return member;
}
}
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.Data;
@Entity
@Data
@SequenceGenerator(name = "member_seq_gen", // 자바 객체 SEQ
sequenceName = "member_seq_generator", // DB SEQ
initialValue = 1,
allocationSize = 1
)
@Table(name = "member2")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "member_seq_gen"
)
@Column(name = "member_id", precision = 10)
private Long id;
@Column(name = "username", length = 50)
private String name;
private Long sal;
// 관계 설정
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
// 실제 Column(X) / Buffer 용도(O)
@Transient
private String teamname;
}
package com.oracle.oBootJpa02.repository;
import com.oracle.oBootJpa02.domain.Member;
public interface MemberRepository {
Member memberSave(Member member);
}
em.persist(team);
-> private Team team; 에 데이터를 넣어줌
다대일로 들어가서 FK를 맞춰짐
그리고 알아서 insert 컬럼을 찾아서 들어감
package com.oracle.oBootJpa02.repository;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.domain.Team;
@Repository
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
@Autowired
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member memberSave(Member member) {
// 팀 저장
Team team = new Team();
team.setName(member.getTeamname());
// team.setName(member.getTeam().getName()); 될까?
em.persist(team);
// 회원 저장
member.setTeam(team);
em.persist(member);
System.out.println("JpaMemberRepository memberSave");
return member;
}
}
package com.oracle.oBootJpa02.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.PostMapping;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.service.MemberService;
@Controller
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 회원등록 페이지 이동
@GetMapping(value = "/members/new")
public String createForm() {
System.out.println("MemberController /members/new Start...");
return "/members/createMemberForm";
}
// 회원저장
@PostMapping(value = "/memberSave")
public String memberSave(Member member) {
System.out.println("MemberController /members/save Start...");
System.out.println("member.getTeamname()->"+member.getTeam());
System.out.println("member.getName()->"+member.getName());
memberService.memberSave(member);
System.out.println("MemberController memberSave After");
return "redirect:/";
}
// 회원목록
@GetMapping(value = "/members")
public String listMember(Model model) {
List<Member> memberList = memberService.getListAllMember();
System.out.println("MemberController memberList.size()->"+memberList.size());
model.addAttribute("members", memberList);
return "members/memberList";
}
}
package com.oracle.oBootJpa02.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.repository.MemberRepository;
@Service
@Transactional
public class MemberService {
@Autowired
public final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public Member memberSave(Member member) {
System.out.println("MemberService memberSave Start...");
System.out.println("MemberService join member.getName()->"+member.getName());
memberRepository.memberSave(member);
System.out.println("MemberRepository memberSave After");
return member;
}
public List<Member> getListAllMember() {
List<Member> listMember = memberRepository.findAll();
System.out.println("MemberService getListAllMember listMember.size->"+listMember.size());
return listMember;
}
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import com.oracle.oBootJpa02.domain.Member;
public interface MemberRepository {
Member memberSave(Member member);
List<Member> findAll();
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.domain.Team;
@Repository
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
@Autowired
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
// 회원 저장
@Override
public Member memberSave(Member member) {
// 팀 저장
Team team = new Team();
team.setName(member.getTeamname());
// team.setName(member.getTeam().getName()); 될까?
em.persist(team);
// 회원 저장
member.setTeam(team);
em.persist(member);
System.out.println("JpaMemberRepository memberSave");
return member;
}
// 회원 목록
@Override
public List<Member> findAll() {
List<Member> memberList = em.createQuery("select m from Member m", Member.class)
.getResultList();
System.out.println("JpaMemberRepository findAll memberList.size()->"+memberList.size());
return memberList;
}
}
<!DOCTYPE html>
<html xml:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 회원목록 -->
<div class="container">
<div>
<table border="1">
<thead>
<tr>
<th>No</th>
<th>회원이름</th>
<th>팀 이름</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td><a th:href="@{/memberModifyForm(id=${member.id})}" th:text="${member.name}"></a></td>
<td th:text="${member.team.name}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
package com.oracle.oBootJpa02.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.PostMapping;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.service.MemberService;
@Controller
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 회원등록 페이지 이동
@GetMapping(value = "/members/new")
public String createForm() {
System.out.println("MemberController /members/new Start...");
return "/members/createMemberForm";
}
// 회원저장
@PostMapping(value = "/memberSave")
public String memberSave(Member member) {
System.out.println("MemberController /members/save Start...");
System.out.println("member.getTeamname()->"+member.getTeam());
System.out.println("member.getName()->"+member.getName());
memberService.memberSave(member);
System.out.println("MemberController memberSave After");
return "redirect:/";
}
// 회원목록
@GetMapping(value = "/members")
public String listMember(Model model) {
List<Member> memberList = memberService.getListAllMember();
System.out.println("memberList.get(0).getName()->"+memberList.get(0).getName());
System.out.println("memberList.get(0).getTeam().getName()->"+memberList.get(0).getTeam().getName());
System.out.println("MemberController memberList.size()->"+memberList.size());
model.addAttribute("memberList", memberList);
return "members/memberList";
}
// 회원 수정 폼
@GetMapping(value = "/memberModifyForm")
public String memberModify(Long id, Model model) {
System.out.println("MemberController memberModify id->"+id);
Member member = memberService.findByMember(id);
System.out.println("member.getId()->"+member.getId());
System.out.println("member.getName()->"+member.getName());
System.out.println("member.getTeam().getName()->"+member.getTeam().getName());
model.addAttribute("member", member);
return "members/memberModify";
}
}
package com.oracle.oBootJpa02.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.repository.MemberRepository;
@Service
@Transactional
public class MemberService {
@Autowired
public final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// 회원등록
public Member memberSave(Member member) {
System.out.println("MemberService memberSave Start...");
System.out.println("MemberService join member.getName()->"+member.getName());
memberRepository.memberSave(member);
System.out.println("MemberRepository memberSave After");
return member;
}
// 회원목록
public List<Member> getListAllMember() {
List<Member> listMember = memberRepository.findAll();
System.out.println("MemberService getListAllMember listMember.size->"+listMember.size());
return listMember;
}
// 회원수정폼
public Member findByMember(Long memberId) {
Member member1 = memberRepository.findByMember(memberId);
System.out.println("MemberService findByMember member1.getId()"+member1.getId());
System.out.println("MemberService findByMember member1.getName()"+member1.getName());
System.out.println("MemberService findByMember member1.getTeam().getName()"+member1.getTeam().getName());
return member1;
}
}
@Transient private Long teamid; 추가
-> 동시에 수정하기 위함
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.Data;
@Entity
@Data
@SequenceGenerator(name = "member_seq_gen", // 자바 객체 SEQ
sequenceName = "member_seq_generator", // DB SEQ
initialValue = 1,
allocationSize = 1
)
@Table(name = "member2")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "member_seq_gen"
)
@Column(name = "member_id", precision = 10)
private Long id;
@Column(name = "username", length = 50)
private String name;
private Long sal;
// 관계 설정
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
// 실제 Column(X) / Buffer 용도(O)
@Transient
private Long teamid;
@Transient
private String teamname
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import com.oracle.oBootJpa02.domain.Member;
public interface MemberRepository {
Member memberSave(Member member);
List<Member> findAll();
Member findByMember(Long memberId);
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.domain.Team;
@Repository
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
@Autowired
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
// 회원 저장
@Override
public Member memberSave(Member member) {
// 팀 저장
Team team = new Team();
team.setName(member.getTeamname());
// team.setName(member.getTeam().getName()); 될까?
em.persist(team);
// 회원 저장
member.setTeam(team);
em.persist(member);
System.out.println("JpaMemberRepository memberSave");
return member;
}
// 회원 목록
@Override
public List<Member> findAll() {
List<Member> memberList = em.createQuery("select m from Member m", Member.class)
.getResultList();
System.out.println("JpaMemberRepository findAll memberList.size()->"+memberList.size());
return memberList;
}
// 회원 정보 수정 폼
@Override
public Member findByMember(Long memberId) {
Member member = em.find(Member.class, memberId);
return member;
}
}
<!DOCTYPE html>
<html xml:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>JPA 회원수정</h1>
<form action="/members/memberUpdate" method="post">
<input type="hidden" name="id" th:value="${member.id}">
<input type="hidden" name="teamid" th:value="${member.team.team_id}">
회원이름 : <input type="text" id="name" name="name" th:value="${member.name}"> <p>
팀 이름 : <input type="text" id="name" name="teamname" th:value="${member.team.name}">
<button type="submit">회원 수정 처리</button>
</form>
</body>
</html>
package com.oracle.oBootJpa02.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.PostMapping;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.service.MemberService;
@Controller
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 회원등록 페이지 이동
@GetMapping(value = "/members/new")
public String createForm() {
System.out.println("MemberController /members/new Start...");
return "/members/createMemberForm";
}
// 회원저장
@PostMapping(value = "/memberSave")
public String memberSave(Member member) {
System.out.println("MemberController /members/save Start...");
System.out.println("member.getTeamname()->"+member.getTeam());
System.out.println("member.getName()->"+member.getName());
memberService.memberSave(member);
System.out.println("MemberController memberSave After");
return "redirect:/";
}
// 회원목록
@GetMapping(value = "/members")
public String listMember(Model model) {
List<Member> memberList = memberService.getListAllMember();
System.out.println("memberList.get(0).getName()->"+memberList.get(0).getName());
System.out.println("memberList.get(0).getTeam().getName()->"+memberList.get(0).getTeam().getName());
System.out.println("MemberController memberList.size()->"+memberList.size());
model.addAttribute("memberList", memberList);
return "members/memberList";
}
// 회원 수정 폼
@GetMapping(value = "/memberModifyForm")
public String memberModify(Long id, Model model) {
System.out.println("MemberController memberModify id->"+id);
Member member = memberService.findByMember(id);
System.out.println("member.getId()->"+member.getId());
System.out.println("member.getName()->"+member.getName());
System.out.println("member.getTeam().getName()->"+member.getTeam().getName());
model.addAttribute("member", member);
return "members/memberModify";
}
// 회원 수정
@PostMapping(value = "/members/memberUpdate")
public String memberUpdate(Member member, Model model) {
System.out.println("MemberController memberUpdate member->"+member);
System.out.println("MemberController memberUpdate member->"+member.getId());
System.out.println("MemberController memberUpdate member->"+member.getName());
System.out.println("MemberController memberUpdate member->"+member.getTeamname());
memberService.memberUpdate(member);
return "redirect:/members";
}
}
package com.oracle.oBootJpa02.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.repository.MemberRepository;
@Service
@Transactional
public class MemberService {
@Autowired
public final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// 회원등록
public Member memberSave(Member member) {
System.out.println("MemberService memberSave Start...");
System.out.println("MemberService join member.getName()->"+member.getName());
memberRepository.memberSave(member);
System.out.println("MemberRepository memberSave After");
return member;
}
// 회원목록
public List<Member> getListAllMember() {
List<Member> listMember = memberRepository.findAll();
System.out.println("MemberService getListAllMember listMember.size->"+listMember.size());
return listMember;
}
// 회원수정폼
public Member findByMember(Long memberId) {
Member member1 = memberRepository.findByMember(memberId);
System.out.println("MemberService findByMember member1.getId()->"+member1.getId());
System.out.println("MemberService findByMember member1.getName()->"+member1.getName());
System.out.println("MemberService findByMember member1.getTeam().getName()->"+member1.getTeam().getName());
return member1;
}
// 회원 최종 수정
public void memberUpdate(Member member) {
memberRepository.updateByMember(member);
System.out.println("MemberService updateMember member1->"+member);
return;
}
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import com.oracle.oBootJpa02.domain.Member;
public interface MemberRepository {
Member memberSave(Member member);
List<Member> findAll();
Member findByMember(Long memberId);
int updateByMember(Member member);
}
package com.oracle.oBootJpa02.repository;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.oracle.oBootJpa02.domain.Member;
import com.oracle.oBootJpa02.domain.Team;
@Repository
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
@Autowired
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
// 회원 저장
@Override
public Member memberSave(Member member) {
// 팀 저장
Team team = new Team();
team.setName(member.getTeamname());
// team.setName(member.getTeam().getName()); 될까?
em.persist(team);
// 회원 저장
member.setTeam(team);
em.persist(member);
System.out.println("JpaMemberRepository memberSave");
return member;
}
// 회원 목록
@Override
public List<Member> findAll() {
List<Member> memberList = em.createQuery("select m from Member m", Member.class)
.getResultList();
System.out.println("JpaMemberRepository findAll memberList.size()->"+memberList.size());
return memberList;
}
// 회원 정보 수정 폼
@Override
public Member findByMember(Long memberId) {
Member member = em.find(Member.class, memberId);
return member;
}
@Override
public int updateByMember(Member member) {
int result = 0;
System.out.println("JpaMemberRepository updateByMember member.getId()->"+member.getId());
Member member3 = em.find(Member.class, member.getId());
if( member3 != null) {
// 팀 저장
System.out.println("JpaMemberRepository updateByMember member.getTeamid()->"+member.getTeamid());
Team team = em.find(Team.class, member.getTeamid());
if( team != null ) {
System.out.println("JpaMemberRepository updateByMember member.getTeamname()->"+member.getTeamname());
team.setName(member.getTeamname());
em.persist(team);
}
// 회원 저장
System.out.println("JpaMemberRepository updateByMember member.getName()->"+member.getName());
member3.setTeam(team);
member3.setName(member.getName());
em.persist(member3);
result = 1;
} else {
result = 0;
System.out.println("JpaMemberRepository updateByMember No Exist...");
}
return result;
}
}