From 15088ebb4e95b7c4c37ebb4cabbe83d8f772bae1 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 26 Mar 2019 01:28:20 +0900 Subject: [PATCH 01/23] =?UTF-8?q?1=EC=A3=BC=EC=B0=A8=20=EC=8A=A4=ED=84=B0?= =?UTF-8?q?=EB=94=94=20=EB=82=B4=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 환경설정 2. 기본적인 Spring RestFul 구조 학습 3. 스프링 빈 기초 학습 4. 어노테이션 학습 --- build.gradle | 6 ++- .../SpringbootstudyApplication.java | 6 +-- .../controller/TestController.java | 51 +++++++++++++++++++ .../controller/UserController.java | 49 ++++++++++++++++++ .../springbootstudy/dto/UserReqDto.java | 9 ++++ .../springbootstudy/dto/UserResDto.java | 13 +++++ .../springbootstudy/service/UserService.java | 15 ++++++ .../SpringbootstudyApplicationTests.java | 6 +-- 8 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/TestController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/UserController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/service/UserService.java diff --git a/build.gradle b/build.gradle index 3f2652e..dc1bc18 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,8 @@ plugins { id 'java' } +apply plugin: 'java' +apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'org.dailystudio' @@ -21,7 +23,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok' - annotationProcessor 'org.projectlombok:lombok' + compileOnly 'org.projectlombok:lombok:+' + annotationProcessor 'org.projectlombok:lombok:+' testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/src/main/java/org/dailystudio/springbootstudy/SpringbootstudyApplication.java b/src/main/java/org/dailystudio/springbootstudy/SpringbootstudyApplication.java index 574a96e..44a039e 100644 --- a/src/main/java/org/dailystudio/springbootstudy/SpringbootstudyApplication.java +++ b/src/main/java/org/dailystudio/springbootstudy/SpringbootstudyApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class SpringbootstudyApplication { - public static void main(String[] args) { - SpringApplication.run(SpringbootstudyApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SpringbootstudyApplication.class, args); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java new file mode 100644 index 0000000..e88c41d --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java @@ -0,0 +1,51 @@ +package org.dailystudio.springbootstudy.controller; + +import org.dailystudio.springbootstudy.dto.UserReqDto; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("api/test") +public class TestController { + + @GetMapping + public String test() { + String str = "hello world"; + return str; + } + + @GetMapping("/get") + public String me() { + return "me"; + } + + @GetMapping("/path/{parameter}") + public String parameter(@PathVariable("parameter") String output) { + return output; + } + + @PostMapping("/post") + public String postTest0() { + return "post"; + } + + @PostMapping("/post/{name}") + public String postTest1(@PathVariable("name") String output) { + return output; + } + + @PostMapping("/post/instance/user") + public String postTest2(@RequestBody UserReqDto user) { + String output = user.getName() + user.getNumber(); + return output; + } + + @DeleteMapping("/delete") + public String deleteTest() { + return "delete"; + } + + @PutMapping + public String putTest() { + return "put"; + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java new file mode 100644 index 0000000..59069b7 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java @@ -0,0 +1,49 @@ +package org.dailystudio.springbootstudy.controller; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.dto.UserReqDto; +import org.dailystudio.springbootstudy.dto.UserResDto; +import org.dailystudio.springbootstudy.service.UserService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/* +RestFul한 API란 무엇인가? +하나의 URI는 반드시 그에 상응하는 데이터를 나타내는 구조이다. + +예를 들어 +/api/user/1/name 로 접근하는 경우 +'1번' '유저'의 '이름' 대한 데이터를 나타낸다. + +@RestController = @Controller + @ResponseBody 이다. +기존에 @Controller를 사용했을 때는 뷰를 반환하였지만 +@RestController를 사용하면 데이터만 반환하게 된다. +이러한 데이터는 JSON형태로 반환된다. + +우리는 RestFul API를 구현할 때 반환값으로 ResponseEntity를 이용할 것이다. +ResponseEntity를 이용하게 되면 +서버에서 직접 + +1. 상태코드 --> OK(200), NOT_FOUND(404)... +2. HttpHeader --> Content-type : JSON(application/json)... +3. 응답 메세지 --> 요청에 대한 응답 값 + +를 지정해서 클라이언트에게 보내줄 수 있다. + */ +@RestController +@RequestMapping("api/user") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @PostMapping + public ResponseEntity getUserName(@RequestBody UserReqDto userReqDto) { + //UserReqDto userReqDto = userService.getUserInfo(userReqDto); + //return ResponseEntity.ok().body(userReqDto); + return ResponseEntity.ok().body(userService.getUserInfo(userReqDto)); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java new file mode 100644 index 0000000..1423821 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java @@ -0,0 +1,9 @@ +package org.dailystudio.springbootstudy.dto; + +import lombok.Getter; + +@Getter +public class UserReqDto { + private String name; + private Integer number; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java new file mode 100644 index 0000000..88dc11c --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java @@ -0,0 +1,13 @@ +package org.dailystudio.springbootstudy.dto; + +import lombok.Getter; + +@Getter +public class UserResDto { + private String name; + + public UserResDto(UserReqDto userReqDto) { + this.name = userReqDto.getName(); + } + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java new file mode 100644 index 0000000..35544a9 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -0,0 +1,15 @@ +package org.dailystudio.springbootstudy.service; + +import org.dailystudio.springbootstudy.dto.UserReqDto; +import org.dailystudio.springbootstudy.dto.UserResDto; +import org.springframework.stereotype.Service; + +@Service +public class UserService { + + public UserResDto getUserInfo(UserReqDto userReqDto) { + UserResDto userResDto = new UserResDto(userReqDto); + return userResDto; + } + +} diff --git a/src/test/java/org/dailystudio/springbootstudy/SpringbootstudyApplicationTests.java b/src/test/java/org/dailystudio/springbootstudy/SpringbootstudyApplicationTests.java index 1cbed09..71a1031 100644 --- a/src/test/java/org/dailystudio/springbootstudy/SpringbootstudyApplicationTests.java +++ b/src/test/java/org/dailystudio/springbootstudy/SpringbootstudyApplicationTests.java @@ -9,8 +9,8 @@ @SpringBootTest public class SpringbootstudyApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } From d3821172d74b10e91d55719280d4237cfdb3db80 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Thu, 28 Mar 2019 17:21:36 +0900 Subject: [PATCH 02/23] =?UTF-8?q?requestParam=20=EB=82=B4=EC=9A=A9?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootstudy/controller/TestController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java index e88c41d..ac93731 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java @@ -19,10 +19,15 @@ public String me() { } @GetMapping("/path/{parameter}") - public String parameter(@PathVariable("parameter") String output) { + public String pathVariable(@PathVariable("parameter") String output) { return output; } + @GetMapping("/path") + public String parameter(@RequestParam("no") String number) { + return "번호는" + number; + } + @PostMapping("/post") public String postTest0() { return "post"; From b0a8494b68917f05331b8d7de7c7830d1cfc2edb Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 29 Mar 2019 14:40:20 +0900 Subject: [PATCH 03/23] =?UTF-8?q?Swagger=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Swagger 의존성추가 2. Swagger 어노테이션 예제 코드 추가 --- build.gradle | 6 +- .../springbootstudy/config/SwaggerConfig.java | 24 ++++++ .../controller/TestController.java | 56 ------------- .../controller/UserController.java | 79 +++++++++++-------- .../springbootstudy/domain/User.java | 13 +++ .../springbootstudy/dto/UserReqDto.java | 9 --- .../springbootstudy/dto/UserResDto.java | 13 --- .../dto/user/UserInfoResDto.java | 6 ++ .../dto/user/UserSaveReqDto.java | 19 +++++ .../springbootstudy/service/UserService.java | 51 ++++++++++-- 10 files changed, 158 insertions(+), 118 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/config/SwaggerConfig.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/TestController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/User.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java diff --git a/build.gradle b/build.gradle index dc1bc18..9564827 100644 --- a/build.gradle +++ b/build.gradle @@ -22,8 +22,10 @@ repositories { } dependencies { + implementation('io.springfox:springfox-swagger2:+') + implementation('io.springfox:springfox-swagger-ui:+') + + compile "org.projectlombok:lombok:+" implementation 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok:+' - annotationProcessor 'org.projectlombok:lombok:+' testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/src/main/java/org/dailystudio/springbootstudy/config/SwaggerConfig.java b/src/main/java/org/dailystudio/springbootstudy/config/SwaggerConfig.java new file mode 100644 index 0000000..aae4943 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/config/SwaggerConfig.java @@ -0,0 +1,24 @@ +package org.dailystudio.springbootstudy.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) // 현재 RequestMapping으로 할당된 모든 URL 리스트를 추출 + .paths(PathSelectors.ant("/api/**")) // 그중 /api/** 인 URL들만 필터링 + .build(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java deleted file mode 100644 index ac93731..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TestController.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dailystudio.springbootstudy.controller; - -import org.dailystudio.springbootstudy.dto.UserReqDto; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("api/test") -public class TestController { - - @GetMapping - public String test() { - String str = "hello world"; - return str; - } - - @GetMapping("/get") - public String me() { - return "me"; - } - - @GetMapping("/path/{parameter}") - public String pathVariable(@PathVariable("parameter") String output) { - return output; - } - - @GetMapping("/path") - public String parameter(@RequestParam("no") String number) { - return "번호는" + number; - } - - @PostMapping("/post") - public String postTest0() { - return "post"; - } - - @PostMapping("/post/{name}") - public String postTest1(@PathVariable("name") String output) { - return output; - } - - @PostMapping("/post/instance/user") - public String postTest2(@RequestBody UserReqDto user) { - String output = user.getName() + user.getNumber(); - return output; - } - - @DeleteMapping("/delete") - public String deleteTest() { - return "delete"; - } - - @PutMapping - public String putTest() { - return "put"; - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java index 59069b7..f5b5f9d 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java @@ -1,38 +1,23 @@ package org.dailystudio.springbootstudy.controller; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.UserReqDto; -import org.dailystudio.springbootstudy.dto.UserResDto; +import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; +import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; import org.dailystudio.springbootstudy.service.UserService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -/* -RestFul한 API란 무엇인가? -하나의 URI는 반드시 그에 상응하는 데이터를 나타내는 구조이다. - -예를 들어 -/api/user/1/name 로 접근하는 경우 -'1번' '유저'의 '이름' 대한 데이터를 나타낸다. - -@RestController = @Controller + @ResponseBody 이다. -기존에 @Controller를 사용했을 때는 뷰를 반환하였지만 -@RestController를 사용하면 데이터만 반환하게 된다. -이러한 데이터는 JSON형태로 반환된다. - -우리는 RestFul API를 구현할 때 반환값으로 ResponseEntity를 이용할 것이다. -ResponseEntity를 이용하게 되면 -서버에서 직접 +import java.util.List; -1. 상태코드 --> OK(200), NOT_FOUND(404)... -2. HttpHeader --> Content-type : JSON(application/json)... -3. 응답 메세지 --> 요청에 대한 응답 값 - -를 지정해서 클라이언트에게 보내줄 수 있다. +/* + UserService의 메소드는 현재 깡통이야. + 디비와 연결을 하지 않았기 때문에 실제로 불러오는 값이 존재하지않아. + 이번 소스코드에서는 swagger의 기능들을 살펴보고 넘어가자. */ + @RestController @RequestMapping("api/user") @RequiredArgsConstructor @@ -40,10 +25,40 @@ public class UserController { private final UserService userService; - @PostMapping - public ResponseEntity getUserName(@RequestBody UserReqDto userReqDto) { - //UserReqDto userReqDto = userService.getUserInfo(userReqDto); - //return ResponseEntity.ok().body(userReqDto); - return ResponseEntity.ok().body(userService.getUserInfo(userReqDto)); + @ApiOperation(value = "유저 정보 저장하기", + notes = "유저 정보를 저장합니다.") + @ApiResponses(value = { + @ApiResponse(code = 201, message = "유저 저장 성공"), + @ApiResponse(code = 500, message = "서버에러") + }) + @PostMapping("/save") + public ResponseEntity saveUser(@RequestBody UserSaveReqDto userSaveReqDto) { + userService.save(userSaveReqDto); + return ResponseEntity.ok().build(); + } + + @GetMapping + public ResponseEntity> getAllUser() { + List resDtos = userService.getAll(); + return ResponseEntity.ok().body(resDtos); + } + + @GetMapping("/{idx}") + public ResponseEntity getUserInfo(@PathVariable("idx") String idx) { + UserInfoResDto userInfoResDto = userService.findUserByIdx(idx); + return ResponseEntity.ok().body(userInfoResDto); + } + + @PutMapping("/{idx}") + public ResponseEntity changeUserName(@PathVariable("idx") String idx, final String name) { + userService.changeUserName(idx, name); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/{idx}") + public ResponseEntity deleteUser(@PathVariable("idx") String idx) { + userService.deleteUser(idx); + return ResponseEntity.ok().build(); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java new file mode 100644 index 0000000..3ce3395 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -0,0 +1,13 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; + +@Getter +public class User { + private Long userIdx; + private String email; + private String name; + private String pass; + private String phone; + private String auth; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java deleted file mode 100644 index 1423821..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/UserReqDto.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.dailystudio.springbootstudy.dto; - -import lombok.Getter; - -@Getter -public class UserReqDto { - private String name; - private Integer number; -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java deleted file mode 100644 index 88dc11c..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/UserResDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dailystudio.springbootstudy.dto; - -import lombok.Getter; - -@Getter -public class UserResDto { - private String name; - - public UserResDto(UserReqDto userReqDto) { - this.name = userReqDto.getName(); - } - -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java new file mode 100644 index 0000000..519dfbf --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java @@ -0,0 +1,6 @@ +package org.dailystudio.springbootstudy.dto.user; + +public class UserInfoResDto { + private String email; + private String name; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java new file mode 100644 index 0000000..2a4748c --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java @@ -0,0 +1,19 @@ +package org.dailystudio.springbootstudy.dto.user; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; + +@Getter +public class UserSaveReqDto { + @ApiModelProperty(example = "example@gmail.com", position = 1) + private String email; + + @ApiModelProperty(example = "박찬인", position = 2) + private String name; + + @ApiModelProperty(example = "q1w2e3r4!", position = 3) + private String pass; + + @ApiModelProperty(example = "010-1234-1234", position = 4) + private String phone; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index 35544a9..fe2bf05 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -1,15 +1,54 @@ package org.dailystudio.springbootstudy.service; -import org.dailystudio.springbootstudy.dto.UserReqDto; -import org.dailystudio.springbootstudy.dto.UserResDto; +import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; +import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + @Service public class UserService { - public UserResDto getUserInfo(UserReqDto userReqDto) { - UserResDto userResDto = new UserResDto(userReqDto); - return userResDto; + + public void save(UserSaveReqDto userSaveReqDto) { + //유저 등록 작업 -> DB에 INSERT 해야 겠지? + } + + + public List getAll() { + //모든 유저 찾는 작업 -> DB에서 SELECT 해야겠지? + List users = Arrays.asList(); + //반환 시킬 객체 준비 + List userInfoResDtos = new ArrayList<>(); + //domain -> dto 변환 + + //가공된 dto 반환 + return userInfoResDtos; + } + + public UserInfoResDto findUserByIdx(String idx) { + //DB에 userIdx는 보통 정수로 저장되어있으니까 String으로 받은 idx를 Long(int보다 큰 정수형)으로 변환하자. + Long userIdx = Long.valueOf(idx); + //반환시킬 객체 준비 + UserInfoResDto userInfoResDto = null; + //디비에서 userIdx를 이용하여 User객체를 찾아온다. + + //domain -> dto 변환 + + //가공된 dto 반환 + return userInfoResDto; + } + + public void changeUserName(String idx, String name) { + Long userIdx = Long.valueOf(idx); + //유저 정보를 수정하는 과정 + } + + public void deleteUser(String idx) { + Long userIdx = Long.valueOf(idx); + //유저 정보를 제거하는 과정 } - } From ac2db839cb87a1228b122a39b75e03b82cfabb45 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 29 Mar 2019 17:12:25 +0900 Subject: [PATCH 04/23] =?UTF-8?q?JPA=20=EC=98=88=EC=A0=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. save code 2. findAll code 3. custom find code 4. modify code 5. delete code --- build.gradle | 3 ++ .../springbootstudy/domain/User.java | 38 ++++++++++++++++--- .../dto/user/UserInfoResDto.java | 9 +++++ .../dto/user/UserSaveReqDto.java | 14 +++++++ .../repository/UserRepository.java | 16 ++++++++ .../springbootstudy/service/UserService.java | 31 ++++++++++----- src/main/resources/application.properties | 28 ++++++++++++++ 7 files changed, 124 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java diff --git a/build.gradle b/build.gradle index 9564827..24e56a3 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,9 @@ repositories { } dependencies { + runtimeOnly 'mysql:mysql-connector-java' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation('io.springfox:springfox-swagger2:+') implementation('io.springfox:springfox-swagger-ui:+') diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java index 3ce3395..c788bb4 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/User.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -1,13 +1,41 @@ package org.dailystudio.springbootstudy.domain; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; @Getter +@NoArgsConstructor +@Entity +@Table(name = "users") public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userIdx; - private String email; - private String name; - private String pass; - private String phone; - private String auth; + + @Column(name = "userEmail") + private String userEmail; + + @Column(name = "userName") + private String userName; + + @Column(name = "userPass") + private String userPass; + + @Column(name = "userPhone") + private String userPhone; + + @Column(name = "userAuth") + private String userAuth; + + @Builder + public User(String userEmail, String userPass, String userName, String userPhone, String userAuth) { + this.userEmail = userEmail; + this.userAuth = userAuth; + this.userName = userName; + this.userPass = userPass; + this.userPhone = userPhone; + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java index 519dfbf..8f4b248 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java @@ -1,6 +1,15 @@ package org.dailystudio.springbootstudy.dto.user; +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.User; + +@Getter public class UserInfoResDto { private String email; private String name; + + public UserInfoResDto(User user) { + this.email = user.getUserEmail(); + this.name = user.getUserName(); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java index 2a4748c..c3119dc 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java @@ -2,9 +2,12 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; +import org.dailystudio.springbootstudy.domain.User; @Getter public class UserSaveReqDto { + private static final String USER_AUTH = "USER"; + @ApiModelProperty(example = "example@gmail.com", position = 1) private String email; @@ -16,4 +19,15 @@ public class UserSaveReqDto { @ApiModelProperty(example = "010-1234-1234", position = 4) private String phone; + + + public User toEntity() { + return User.builder() + .userEmail(this.email) + .userName(this.name) + .userPass(this.pass) + .userPhone(this.phone) + .userAuth(USER_AUTH) + .build(); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java new file mode 100644 index 0000000..118d387 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java @@ -0,0 +1,16 @@ +package org.dailystudio.springbootstudy.repository; + + +import org.dailystudio.springbootstudy.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +public interface UserRepository extends JpaRepository { + User findByUserIdx(Long idx); + + @Modifying + @Query("UPDATE User u SET u.userName = :name WHERE u.userIdx = :idx") + void updateUserName(@Param("idx") Long userIdx, @Param("name") String userName); +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index fe2bf05..d0d99a3 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -1,30 +1,36 @@ package org.dailystudio.springbootstudy.service; +import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.domain.User; import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; +import org.dailystudio.springbootstudy.repository.UserRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; @Service +@RequiredArgsConstructor public class UserService { + private final UserRepository userRepository; public void save(UserSaveReqDto userSaveReqDto) { - //유저 등록 작업 -> DB에 INSERT 해야 겠지? + User user = userSaveReqDto.toEntity(); + userRepository.save(user); } - public List getAll() { //모든 유저 찾는 작업 -> DB에서 SELECT 해야겠지? - List users = Arrays.asList(); + List users = userRepository.findAll(); //반환 시킬 객체 준비 - List userInfoResDtos = new ArrayList<>(); + List userInfoResDtos; //domain -> dto 변환 - + userInfoResDtos = users.stream() + .map(user -> new UserInfoResDto(user)) + .collect(Collectors.toList()); //가공된 dto 반환 return userInfoResDtos; } @@ -33,22 +39,27 @@ public UserInfoResDto findUserByIdx(String idx) { //DB에 userIdx는 보통 정수로 저장되어있으니까 String으로 받은 idx를 Long(int보다 큰 정수형)으로 변환하자. Long userIdx = Long.valueOf(idx); //반환시킬 객체 준비 - UserInfoResDto userInfoResDto = null; + UserInfoResDto userInfoResDto; //디비에서 userIdx를 이용하여 User객체를 찾아온다. - + User user = userRepository.findByUserIdx(userIdx); //domain -> dto 변환 - + userInfoResDto = new UserInfoResDto(user); //가공된 dto 반환 return userInfoResDto; } + @Transactional public void changeUserName(String idx, String name) { Long userIdx = Long.valueOf(idx); //유저 정보를 수정하는 과정 + userRepository.updateUserName(userIdx, name); } + @Transactional public void deleteUser(String idx) { Long userIdx = Long.valueOf(idx); //유저 정보를 제거하는 과정 + User user = userRepository.findByUserIdx(userIdx); + userRepository.delete(user); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..d8a541b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,29 @@ +## ͺ̽ ⺻ +spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver +spring.datasource.username=root +spring.datasource.password=saul2449 +## ͺ̽ Ű ּ +## jdbc:mysql://ּ/Ű̸? +spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC +## Ǵ SQL մϴ. +spring.jpa.show-sql = true + +## α մϴ +logging.level.org.hibernate.type = trace +logging.level.org.hibernate = info + +##ҹ ̽ ذ +spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + +##ī̽ ھ ̸ ϱ +## +#spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy +# +## +#spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy + + +#MYSQL +spring.jpa.database = mysql +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file From 679d3f6657a792c1bc88c1cb5c052e1c5ac29bbc Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 29 Mar 2019 17:15:37 +0900 Subject: [PATCH 05/23] =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d8a541b..ba22e77 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ ## ͺ̽ ⺻ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=saul2449 +spring.datasource.username=userName +spring.datasource.password=userPass ## ͺ̽ Ű ּ ## jdbc:mysql://ּ/Ű̸? spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC From 3fde4960b167e7e47a75e4f00fb0a615351e1c9b Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 29 Mar 2019 18:41:40 +0900 Subject: [PATCH 06/23] =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ba22e77..b654424 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -5,25 +5,19 @@ spring.datasource.password=userPass ## ͺ̽ Ű ּ ## jdbc:mysql://ּ/Ű̸? spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC - ## Ǵ SQL մϴ. -spring.jpa.show-sql = true - +spring.jpa.show-sql=true ## α մϴ -logging.level.org.hibernate.type = trace -logging.level.org.hibernate = info - +logging.level.org.hibernate.type=trace +logging.level.org.hibernate=info ##ҹ ̽ ذ spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - ##ī̽ ھ ̸ ϱ ## #spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy # ## #spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy - - #MYSQL -spring.jpa.database = mysql +spring.jpa.database=mysql spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file From 4c96d9975ac77f579fd1e237cc38ed7205969cf9 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 29 Mar 2019 20:14:34 +0900 Subject: [PATCH 07/23] =?UTF-8?q?=EC=98=81=EC=86=8D=EC=84=B1=EC=9D=84=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. setter를 이용한 update코드 추가 --- .../java/org/dailystudio/springbootstudy/domain/User.java | 4 ++++ .../org/dailystudio/springbootstudy/service/UserService.java | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java index c788bb4..1f780d6 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/User.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -38,4 +38,8 @@ public User(String userEmail, String userPass, String userName, String userPhone this.userPass = userPass; this.userPhone = userPhone; } + + public void setName(String name) { + this.userName = name; + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index d0d99a3..c39bb01 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -52,7 +52,9 @@ public UserInfoResDto findUserByIdx(String idx) { public void changeUserName(String idx, String name) { Long userIdx = Long.valueOf(idx); //유저 정보를 수정하는 과정 - userRepository.updateUserName(userIdx, name); + User user = userRepository.findByUserIdx(userIdx); +// userRepository.updateUserName(userIdx, name); + user.setName(name); } @Transactional From fec407b6e33a3d05a499ca2f7c3322992676d906 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sat, 30 Mar 2019 00:01:20 +0900 Subject: [PATCH 08/23] =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dailystudio/springbootstudy/service/UserService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index c39bb01..e21a314 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -53,8 +53,13 @@ public void changeUserName(String idx, String name) { Long userIdx = Long.valueOf(idx); //유저 정보를 수정하는 과정 User user = userRepository.findByUserIdx(userIdx); -// userRepository.updateUserName(userIdx, name); + //쿼리를 작성하는 방법 + //userRepository.updateUserName(userIdx, name); + + //Setter를 이용한 방법 user.setName(name); + + //더 나은 방법은 없을까? } @Transactional From b4a8c3710fccd7754f426aba0434cc6b4e9fc90e Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sat, 30 Mar 2019 00:02:34 +0900 Subject: [PATCH 09/23] =?UTF-8?q?transactional=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dailystudio/springbootstudy/service/UserService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index e21a314..0f3ab17 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -17,6 +17,7 @@ public class UserService { private final UserRepository userRepository; + @Transactional public void save(UserSaveReqDto userSaveReqDto) { User user = userSaveReqDto.toEntity(); userRepository.save(user); From d0ef66125b4dde36129b4d95ef0540efdd3677d9 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sat, 30 Mar 2019 03:08:09 +0900 Subject: [PATCH 10/23] =?UTF-8?q?jpa=20=EB=A7=A4=ED=95=91=20=EC=98=88?= =?UTF-8?q?=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. @ManyToOne 예제 2. @OneToMany 예제 3. 순환참조 피하기 --- .../controller/TeamController.java | 27 ++++++++++++++++ .../controller/UserController.java | 5 +-- .../springbootstudy/domain/Team.java | 28 ++++++++++++++++ .../springbootstudy/domain/User.java | 17 ++++++++-- .../springbootstudy/domain/UserImg.java | 32 +++++++++++++++++++ .../dto/team/TeamInfoResDto.java | 24 ++++++++++++++ .../dto/team/TeamNameResDto.java | 13 ++++++++ .../dto/user/UserInfoResDto.java | 8 +++++ .../dto/user/UserNameReqDto.java | 8 +++++ .../dto/user/UserSimpleInfoResDto.java | 20 ++++++++++++ .../repository/TeamRepository.java | 7 ++++ .../repository/UserImgRepository.java | 7 ++++ .../repository/UserRepository.java | 7 ---- .../springbootstudy/service/TeamService.java | 25 +++++++++++++++ .../springbootstudy/service/UserService.java | 30 ++++++----------- src/main/resources/application.properties | 4 +-- 16 files changed, 229 insertions(+), 33 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Team.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/service/TeamService.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java new file mode 100644 index 0000000..5d14f95 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -0,0 +1,27 @@ +package org.dailystudio.springbootstudy.controller; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.dto.team.TeamInfoResDto; +import org.dailystudio.springbootstudy.service.TeamService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("api/team") +@RequiredArgsConstructor +public class TeamController { + + private final TeamService teamService; + + @GetMapping + public ResponseEntity> getAllTeam() { + + List teamInfoResDtos = teamService.getAllTeam(); + + return ResponseEntity.ok().body(teamInfoResDtos); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java index f5b5f9d..eb778da 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; +import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; import org.dailystudio.springbootstudy.service.UserService; import org.springframework.http.ResponseEntity; @@ -50,8 +51,8 @@ public ResponseEntity getUserInfo(@PathVariable("idx") String id } @PutMapping("/{idx}") - public ResponseEntity changeUserName(@PathVariable("idx") String idx, final String name) { - userService.changeUserName(idx, name); + public ResponseEntity changeUserName(@PathVariable("idx") String idx, @RequestBody UserNameReqDto userNameReqDto) { + userService.changeUserName(idx, userNameReqDto); return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java new file mode 100644 index 0000000..2d5a76b --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java @@ -0,0 +1,28 @@ +package org.dailystudio.springbootstudy.domain; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import lombok.Getter; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "team") +@Getter +public class Team { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "teamIdx") + private Long teamIdx; + + @Column + private String teamName; + + //@JoinColumn(name = "teamIdx") //순환참조 문제가 발생한다. + @OneToMany(mappedBy = "team") + @JsonBackReference + private List users = new ArrayList<>(); + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java index 1f780d6..c5ca8d1 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/User.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -1,10 +1,14 @@ package org.dailystudio.springbootstudy.domain; +import com.fasterxml.jackson.annotation.JsonManagedReference; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @Getter @NoArgsConstructor @@ -30,6 +34,15 @@ public class User { @Column(name = "userAuth") private String userAuth; + @OneToMany + @JoinColumn(name = "userIdx") + private List userImgs = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "teamIdx", insertable = false, updatable = false) + @JsonManagedReference + Team team; + @Builder public User(String userEmail, String userPass, String userName, String userPhone, String userAuth) { this.userEmail = userEmail; @@ -39,7 +52,7 @@ public User(String userEmail, String userPass, String userName, String userPhone this.userPhone = userPhone; } - public void setName(String name) { - this.userName = name; + public void updateName(UserNameReqDto userNameReqDto) { + this.userName = userNameReqDto.getUserName(); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java b/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java new file mode 100644 index 0000000..17d29fc --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java @@ -0,0 +1,32 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Getter +@Entity +@Table(name = "userimg") +@NoArgsConstructor +public class UserImg { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long userImgIdx; + + private Long userIdx; + + @Column + private String userImgUrl = "default URL"; + + public UserImg(User user) { + this.userIdx = user.getUserIdx(); + } + + public UserImg(User user, String url) { + this.userIdx = user.getUserIdx(); + this.userImgUrl = url; + } + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java new file mode 100644 index 0000000..741b482 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java @@ -0,0 +1,24 @@ +package org.dailystudio.springbootstudy.dto.team; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.dailystudio.springbootstudy.domain.Team; +import org.dailystudio.springbootstudy.dto.user.UserSimpleInfoResDto; + +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@NoArgsConstructor +public class TeamInfoResDto { + private String teamName; + + private List userSimpleInfoResDtos; + + public TeamInfoResDto(Team team) { + this.teamName = team.getTeamName(); + this.userSimpleInfoResDtos = team.getUsers().stream() + .map(user -> new UserSimpleInfoResDto(user)) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java new file mode 100644 index 0000000..46038d1 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java @@ -0,0 +1,13 @@ +package org.dailystudio.springbootstudy.dto.team; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Team; + +@Getter +public class TeamNameResDto { + private String teamName; + + public TeamNameResDto(Team team) { + this.teamName = team.getTeamName(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java index 8f4b248..e4541ec 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java @@ -2,14 +2,22 @@ import lombok.Getter; import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.domain.UserImg; +import org.dailystudio.springbootstudy.dto.team.TeamNameResDto; + +import java.util.List; @Getter public class UserInfoResDto { private String email; private String name; + private List userImgs; + private TeamNameResDto teamNameResDto; public UserInfoResDto(User user) { this.email = user.getUserEmail(); this.name = user.getUserName(); + this.userImgs = user.getUserImgs(); + this.teamNameResDto = new TeamNameResDto(user.getTeam()); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java new file mode 100644 index 0000000..dfda338 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java @@ -0,0 +1,8 @@ +package org.dailystudio.springbootstudy.dto.user; + +import lombok.Getter; + +@Getter +public class UserNameReqDto { + private String userName; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java new file mode 100644 index 0000000..678653c --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java @@ -0,0 +1,20 @@ +package org.dailystudio.springbootstudy.dto.user; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.domain.UserImg; + +import java.util.List; + +@Getter +public class UserSimpleInfoResDto { + private String email; + private String name; + private List userImgs; + + public UserSimpleInfoResDto(User user) { + this.email = user.getUserEmail(); + this.name = user.getUserName(); + this.userImgs = user.getUserImgs(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java new file mode 100644 index 0000000..2133266 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.Team; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TeamRepository extends JpaRepository { +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java new file mode 100644 index 0000000..3b748dc --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.UserImg; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserImgRepository extends JpaRepository { +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java index 118d387..219a861 100644 --- a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java +++ b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java @@ -3,14 +3,7 @@ import org.dailystudio.springbootstudy.domain.User; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; public interface UserRepository extends JpaRepository { User findByUserIdx(Long idx); - - @Modifying - @Query("UPDATE User u SET u.userName = :name WHERE u.userIdx = :idx") - void updateUserName(@Param("idx") Long userIdx, @Param("name") String userName); } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java new file mode 100644 index 0000000..9d60748 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java @@ -0,0 +1,25 @@ +package org.dailystudio.springbootstudy.service; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.domain.Team; +import org.dailystudio.springbootstudy.dto.team.TeamInfoResDto; +import org.dailystudio.springbootstudy.repository.TeamRepository; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class TeamService { + + private final TeamRepository teamRepository; + + public List getAllTeam() { + List teams = teamRepository.findAll(); + List teamInfoResDtos = teams.stream() + .map(team -> new TeamInfoResDto(team)) + .collect(Collectors.toList()); + return teamInfoResDtos; + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index 0f3ab17..eafda6b 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -2,8 +2,11 @@ import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.domain.UserImg; import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; +import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; +import org.dailystudio.springbootstudy.repository.UserImgRepository; import org.dailystudio.springbootstudy.repository.UserRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,57 +19,44 @@ public class UserService { private final UserRepository userRepository; + private final UserImgRepository userImgRepository; @Transactional public void save(UserSaveReqDto userSaveReqDto) { User user = userSaveReqDto.toEntity(); - userRepository.save(user); + user = userRepository.save(user); + UserImg userImg = new UserImg(user); + userImgRepository.save(userImg); } public List getAll() { - //모든 유저 찾는 작업 -> DB에서 SELECT 해야겠지? List users = userRepository.findAll(); - //반환 시킬 객체 준비 List userInfoResDtos; - //domain -> dto 변환 userInfoResDtos = users.stream() .map(user -> new UserInfoResDto(user)) .collect(Collectors.toList()); - //가공된 dto 반환 return userInfoResDtos; } public UserInfoResDto findUserByIdx(String idx) { - //DB에 userIdx는 보통 정수로 저장되어있으니까 String으로 받은 idx를 Long(int보다 큰 정수형)으로 변환하자. Long userIdx = Long.valueOf(idx); - //반환시킬 객체 준비 UserInfoResDto userInfoResDto; - //디비에서 userIdx를 이용하여 User객체를 찾아온다. User user = userRepository.findByUserIdx(userIdx); - //domain -> dto 변환 userInfoResDto = new UserInfoResDto(user); - //가공된 dto 반환 return userInfoResDto; } @Transactional - public void changeUserName(String idx, String name) { + public void changeUserName(String idx, UserNameReqDto userNameReqDto) { Long userIdx = Long.valueOf(idx); - //유저 정보를 수정하는 과정 User user = userRepository.findByUserIdx(userIdx); - //쿼리를 작성하는 방법 - //userRepository.updateUserName(userIdx, name); - - //Setter를 이용한 방법 - user.setName(name); - - //더 나은 방법은 없을까? + //유저 정보를 수정하는 과정 + user.updateName(userNameReqDto); } @Transactional public void deleteUser(String idx) { Long userIdx = Long.valueOf(idx); - //유저 정보를 제거하는 과정 User user = userRepository.findByUserIdx(userIdx); userRepository.delete(user); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b654424..a7f77e7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ ## ͺ̽ ⺻ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver -spring.datasource.username=userName -spring.datasource.password=userPass +spring.datasource.username=root +spring.datasource.password=saul2449 ## ͺ̽ Ű ּ ## jdbc:mysql://ּ/Ű̸? spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC From 09cbfd90f5fb2e7ebb2cf3318169a5e77635aa54 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 02:13:47 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이름전략 변경으로 인한 초기화 --- .../controller/TeamController.java | 21 +++++--- .../controller/UserController.java | 32 ++--------- .../springbootstudy/domain/Team.java | 19 +++---- .../springbootstudy/domain/User.java | 53 +++++++------------ .../springbootstudy/domain/UserImg.java | 32 ----------- .../dto/team/TeamInfoResDto.java | 24 --------- .../dto/team/TeamNameResDto.java | 13 ----- .../dto/team/TeamSaveReqDto.java | 14 +++++ .../dto/user/UserInfoResDto.java | 23 -------- .../dto/user/UserNameReqDto.java | 8 --- .../dto/user/UserSaveReqDto.java | 30 ++++------- .../dto/user/UserSimpleInfoResDto.java | 20 ------- .../repository/UserImgRepository.java | 7 --- .../repository/UserRepository.java | 8 +++ .../springbootstudy/service/TeamService.java | 15 +++--- .../springbootstudy/service/UserService.java | 46 ---------------- src/main/resources/application.properties | 13 +++-- 17 files changed, 93 insertions(+), 285 deletions(-) delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java index 5d14f95..4ab9c77 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -1,12 +1,11 @@ package org.dailystudio.springbootstudy.controller; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.team.TeamInfoResDto; +import org.dailystudio.springbootstudy.domain.Team; +import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.service.TeamService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -17,11 +16,17 @@ public class TeamController { private final TeamService teamService; - @GetMapping - public ResponseEntity> getAllTeam() { + @PostMapping("/save") + public ResponseEntity saveTeam(@RequestBody TeamSaveReqDto teamSaveReqDto){ + teamService.save(teamSaveReqDto); - List teamInfoResDtos = teamService.getAllTeam(); + return ResponseEntity.ok().build(); + } - return ResponseEntity.ok().body(teamInfoResDtos); + @GetMapping + public ResponseEntity> findAll(){ + List teams = teamService.getTeams(); + return ResponseEntity.ok(teams); } + } diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java index eb778da..8abad08 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java @@ -4,14 +4,13 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; -import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; import org.dailystudio.springbootstudy.service.UserService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /* UserService의 메소드는 현재 깡통이야. @@ -38,28 +37,5 @@ public ResponseEntity saveUser(@RequestBody UserSaveReqDto userSaveReqDto) return ResponseEntity.ok().build(); } - @GetMapping - public ResponseEntity> getAllUser() { - List resDtos = userService.getAll(); - return ResponseEntity.ok().body(resDtos); - } - - @GetMapping("/{idx}") - public ResponseEntity getUserInfo(@PathVariable("idx") String idx) { - UserInfoResDto userInfoResDto = userService.findUserByIdx(idx); - return ResponseEntity.ok().body(userInfoResDto); - } - - @PutMapping("/{idx}") - public ResponseEntity changeUserName(@PathVariable("idx") String idx, @RequestBody UserNameReqDto userNameReqDto) { - userService.changeUserName(idx, userNameReqDto); - return ResponseEntity.ok().build(); - } - - @DeleteMapping("/{idx}") - public ResponseEntity deleteUser(@PathVariable("idx") String idx) { - userService.deleteUser(idx); - return ResponseEntity.ok().build(); - } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java index 2d5a76b..3ebcdc1 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java @@ -1,28 +1,29 @@ package org.dailystudio.springbootstudy.domain; -import com.fasterxml.jackson.annotation.JsonBackReference; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import javax.persistence.*; -import java.util.ArrayList; import java.util.List; @Entity @Table(name = "team") @Getter +@NoArgsConstructor public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "teamIdx") - private Long teamIdx; + private Long id; - @Column - private String teamName; + private String name; - //@JoinColumn(name = "teamIdx") //순환참조 문제가 발생한다. @OneToMany(mappedBy = "team") - @JsonBackReference - private List users = new ArrayList<>(); + private List users; + @Builder + public Team(String name) { + this.name = name; + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java index c5ca8d1..3d937ef 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/User.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -1,58 +1,41 @@ package org.dailystudio.springbootstudy.domain; -import com.fasterxml.jackson.annotation.JsonManagedReference; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import javax.persistence.*; -import java.util.ArrayList; -import java.util.List; +import javax.validation.constraints.NotNull; @Getter @NoArgsConstructor @Entity @Table(name = "users") public class User { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long userIdx; - - @Column(name = "userEmail") - private String userEmail; - - @Column(name = "userName") - private String userName; + private Long id; - @Column(name = "userPass") - private String userPass; + @NotNull + @Column + private String email; - @Column(name = "userPhone") - private String userPhone; + @NotNull + private String name; - @Column(name = "userAuth") - private String userAuth; + @NotNull + private String pass; - @OneToMany - @JoinColumn(name = "userIdx") - private List userImgs = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "teamIdx", insertable = false, updatable = false) - @JsonManagedReference - Team team; + @ManyToOne + @JoinColumn(name = "team_id") + private Team team; @Builder - public User(String userEmail, String userPass, String userName, String userPhone, String userAuth) { - this.userEmail = userEmail; - this.userAuth = userAuth; - this.userName = userName; - this.userPass = userPass; - this.userPhone = userPhone; - } - - public void updateName(UserNameReqDto userNameReqDto) { - this.userName = userNameReqDto.getUserName(); + public User(String email, String name, String pass, Team team){ + this.email=email; + this.name=name; + this.pass=pass; + this.team=team; } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java b/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java deleted file mode 100644 index 17d29fc..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/domain/UserImg.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.dailystudio.springbootstudy.domain; - -import lombok.Getter; -import lombok.NoArgsConstructor; - -import javax.persistence.*; - -@Getter -@Entity -@Table(name = "userimg") -@NoArgsConstructor -public class UserImg { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long userImgIdx; - - private Long userIdx; - - @Column - private String userImgUrl = "default URL"; - - public UserImg(User user) { - this.userIdx = user.getUserIdx(); - } - - public UserImg(User user, String url) { - this.userIdx = user.getUserIdx(); - this.userImgUrl = url; - } - -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java deleted file mode 100644 index 741b482..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamInfoResDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.dto.user.UserSimpleInfoResDto; - -import java.util.List; -import java.util.stream.Collectors; - -@Getter -@NoArgsConstructor -public class TeamInfoResDto { - private String teamName; - - private List userSimpleInfoResDtos; - - public TeamInfoResDto(Team team) { - this.teamName = team.getTeamName(); - this.userSimpleInfoResDtos = team.getUsers().stream() - .map(user -> new UserSimpleInfoResDto(user)) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java deleted file mode 100644 index 46038d1..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameResDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Team; - -@Getter -public class TeamNameResDto { - private String teamName; - - public TeamNameResDto(Team team) { - this.teamName = team.getTeamName(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java new file mode 100644 index 0000000..17d930f --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java @@ -0,0 +1,14 @@ +package org.dailystudio.springbootstudy.dto.team; + +import org.dailystudio.springbootstudy.domain.Team; + +public class TeamSaveReqDto { + + private String teamName; + + public Team toEntity(){ + return Team.builder() + .name(this.teamName) + .build(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java deleted file mode 100644 index e4541ec..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserInfoResDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.dailystudio.springbootstudy.dto.user; - -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.User; -import org.dailystudio.springbootstudy.domain.UserImg; -import org.dailystudio.springbootstudy.dto.team.TeamNameResDto; - -import java.util.List; - -@Getter -public class UserInfoResDto { - private String email; - private String name; - private List userImgs; - private TeamNameResDto teamNameResDto; - - public UserInfoResDto(User user) { - this.email = user.getUserEmail(); - this.name = user.getUserName(); - this.userImgs = user.getUserImgs(); - this.teamNameResDto = new TeamNameResDto(user.getTeam()); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java deleted file mode 100644 index dfda338..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserNameReqDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.dailystudio.springbootstudy.dto.user; - -import lombok.Getter; - -@Getter -public class UserNameReqDto { - private String userName; -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java index c3119dc..d18064b 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java @@ -1,33 +1,21 @@ package org.dailystudio.springbootstudy.dto.user; -import io.swagger.annotations.ApiModelProperty; import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Team; import org.dailystudio.springbootstudy.domain.User; @Getter public class UserSaveReqDto { - private static final String USER_AUTH = "USER"; + private String userEmail; + private String userName; + private String userPass; - @ApiModelProperty(example = "example@gmail.com", position = 1) - private String email; - - @ApiModelProperty(example = "박찬인", position = 2) - private String name; - - @ApiModelProperty(example = "q1w2e3r4!", position = 3) - private String pass; - - @ApiModelProperty(example = "010-1234-1234", position = 4) - private String phone; - - - public User toEntity() { + public User toEntity(Team team){ return User.builder() - .userEmail(this.email) - .userName(this.name) - .userPass(this.pass) - .userPhone(this.phone) - .userAuth(USER_AUTH) + .team(team) + .email(this.userEmail) + .name(this.userName) + .pass(this.userPass) .build(); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java deleted file mode 100644 index 678653c..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSimpleInfoResDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.dailystudio.springbootstudy.dto.user; - -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.User; -import org.dailystudio.springbootstudy.domain.UserImg; - -import java.util.List; - -@Getter -public class UserSimpleInfoResDto { - private String email; - private String name; - private List userImgs; - - public UserSimpleInfoResDto(User user) { - this.email = user.getUserEmail(); - this.name = user.getUserName(); - this.userImgs = user.getUserImgs(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java deleted file mode 100644 index 3b748dc..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/repository/UserImgRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.dailystudio.springbootstudy.repository; - -import org.dailystudio.springbootstudy.domain.UserImg; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserImgRepository extends JpaRepository { -} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java index 219a861..75d301d 100644 --- a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java +++ b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java @@ -2,8 +2,16 @@ import org.dailystudio.springbootstudy.domain.User; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; public interface UserRepository extends JpaRepository { User findByUserIdx(Long idx); + +// @EntityGraph(attributePaths = "userImgs") +// @Query("SELECT a FROM users a") +// List findAllEntityGraph(); } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java index 9d60748..50f54f0 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java @@ -2,12 +2,11 @@ import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.dto.team.TeamInfoResDto; +import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.repository.TeamRepository; import org.springframework.stereotype.Service; import java.util.List; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -15,11 +14,13 @@ public class TeamService { private final TeamRepository teamRepository; - public List getAllTeam() { + public void save(TeamSaveReqDto teamSaveReqDto){ + Team team = teamSaveReqDto.toEntity(); + teamRepository.save(team); + } + + public List getTeams(){ List teams = teamRepository.findAll(); - List teamInfoResDtos = teams.stream() - .map(team -> new TeamInfoResDto(team)) - .collect(Collectors.toList()); - return teamInfoResDtos; + return teams; } } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java index eafda6b..472f839 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java @@ -1,63 +1,17 @@ package org.dailystudio.springbootstudy.service; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.User; -import org.dailystudio.springbootstudy.domain.UserImg; -import org.dailystudio.springbootstudy.dto.user.UserInfoResDto; -import org.dailystudio.springbootstudy.dto.user.UserNameReqDto; import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; -import org.dailystudio.springbootstudy.repository.UserImgRepository; import org.dailystudio.springbootstudy.repository.UserRepository; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; - private final UserImgRepository userImgRepository; - @Transactional public void save(UserSaveReqDto userSaveReqDto) { - User user = userSaveReqDto.toEntity(); - user = userRepository.save(user); - UserImg userImg = new UserImg(user); - userImgRepository.save(userImg); - } - - public List getAll() { - List users = userRepository.findAll(); - List userInfoResDtos; - userInfoResDtos = users.stream() - .map(user -> new UserInfoResDto(user)) - .collect(Collectors.toList()); - return userInfoResDtos; - } - - public UserInfoResDto findUserByIdx(String idx) { - Long userIdx = Long.valueOf(idx); - UserInfoResDto userInfoResDto; - User user = userRepository.findByUserIdx(userIdx); - userInfoResDto = new UserInfoResDto(user); - return userInfoResDto; - } - - @Transactional - public void changeUserName(String idx, UserNameReqDto userNameReqDto) { - Long userIdx = Long.valueOf(idx); - User user = userRepository.findByUserIdx(userIdx); - //유저 정보를 수정하는 과정 - user.updateName(userNameReqDto); - } - @Transactional - public void deleteUser(String idx) { - Long userIdx = Long.valueOf(idx); - User user = userRepository.findByUserIdx(userIdx); - userRepository.delete(user); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a7f77e7..d1efbce 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,17 +7,22 @@ spring.datasource.password=saul2449 spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC ## Ǵ SQL մϴ. spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true + ## α մϴ -logging.level.org.hibernate.type=trace -logging.level.org.hibernate=info +#logging.level.org.hibernate.type=trace +#logging.level.org.hibernate=info + ##ҹ ̽ ذ -spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + ##ī̽ ھ ̸ ϱ ## #spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy # ## #spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy -#MYSQL + +##MYSQL spring.jpa.database=mysql spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file From cebe4c464e6e8543585d544f7559f2fa03f95f82 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 02:35:21 +0900 Subject: [PATCH 12/23] =?UTF-8?q?CRUD=20=EC=98=88=EC=A0=9C=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TEAM 엔티티를 이용하여 CRUD 예제 작성 --- ...serController.java => MemberController.java} | 12 ++++++------ .../controller/TeamController.java | 15 +++++++++++++++ .../domain/{User.java => Member.java} | 6 +++--- .../springbootstudy/domain/Team.java | 10 +++++++++- .../MemberSaveReqDto.java} | 10 +++++----- .../dto/team/TeamDeleteReqDto.java | 8 ++++++++ .../dto/team/TeamNameChangeReqDto.java | 9 +++++++++ .../dto/team/TeamSaveReqDto.java | 2 ++ .../repository/MemberRepository.java | 8 ++++++++ .../repository/UserRepository.java | 17 ----------------- .../springbootstudy/service/MemberService.java | 17 +++++++++++++++++ .../springbootstudy/service/TeamService.java | 17 +++++++++++++++++ .../springbootstudy/service/UserService.java | 17 ----------------- src/main/resources/application.properties | 17 ++++++++--------- 14 files changed, 107 insertions(+), 58 deletions(-) rename src/main/java/org/dailystudio/springbootstudy/controller/{UserController.java => MemberController.java} (77%) rename src/main/java/org/dailystudio/springbootstudy/domain/{User.java => Member.java} (84%) rename src/main/java/org/dailystudio/springbootstudy/dto/{user/UserSaveReqDto.java => member/MemberSaveReqDto.java} (62%) create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/service/MemberService.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/service/UserService.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java similarity index 77% rename from src/main/java/org/dailystudio/springbootstudy/controller/UserController.java rename to src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java index 8abad08..9b15682 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java @@ -4,8 +4,8 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; -import org.dailystudio.springbootstudy.service.UserService; +import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; +import org.dailystudio.springbootstudy.service.MemberService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -21,9 +21,9 @@ @RestController @RequestMapping("api/user") @RequiredArgsConstructor -public class UserController { +public class MemberController { - private final UserService userService; + private final MemberService memberService; @ApiOperation(value = "유저 정보 저장하기", notes = "유저 정보를 저장합니다.") @@ -32,8 +32,8 @@ public class UserController { @ApiResponse(code = 500, message = "서버에러") }) @PostMapping("/save") - public ResponseEntity saveUser(@RequestBody UserSaveReqDto userSaveReqDto) { - userService.save(userSaveReqDto); + public ResponseEntity saveUser(@RequestBody MemberSaveReqDto memberSaveReqDto) { + memberService.save(memberSaveReqDto); return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java index 4ab9c77..8b73a75 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -2,6 +2,8 @@ import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.domain.Team; +import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; +import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.service.TeamService; import org.springframework.http.ResponseEntity; @@ -29,4 +31,17 @@ public ResponseEntity> findAll(){ return ResponseEntity.ok(teams); } + @PutMapping + public ResponseEntity changeTeamName(@RequestBody TeamNameChangeReqDto teamNameChangeReqDto){ + teamService.changeTeamName(teamNameChangeReqDto); + + return ResponseEntity.ok().build(); + } + + @DeleteMapping + public ResponseEntity DeleteTeam(@RequestBody TeamDeleteReqDto teamDeleteReqDto){ + teamService.deleteTeam(teamDeleteReqDto); + + return ResponseEntity.ok().build(); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java similarity index 84% rename from src/main/java/org/dailystudio/springbootstudy/domain/User.java rename to src/main/java/org/dailystudio/springbootstudy/domain/Member.java index 3d937ef..33765fb 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/User.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java @@ -10,8 +10,8 @@ @Getter @NoArgsConstructor @Entity -@Table(name = "users") -public class User { +@Table(name = "member") +public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -32,7 +32,7 @@ public class User { private Team team; @Builder - public User(String email, String name, String pass, Team team){ + public Member(String email, String name, String pass, Team team){ this.email=email; this.name=name; this.pass=pass; diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java index 3ebcdc1..5c84ab8 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java @@ -3,8 +3,10 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; import javax.persistence.*; +import javax.validation.constraints.NotNull; import java.util.List; @Entity @@ -15,15 +17,21 @@ public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "team_id") private Long id; + @NotNull private String name; @OneToMany(mappedBy = "team") - private List users; + private List members; @Builder public Team(String name) { this.name = name; } + + public void changeName(TeamNameChangeReqDto teamNameChangeReqDto) { + this.name = teamNameChangeReqDto.getName(); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java similarity index 62% rename from src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java rename to src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java index d18064b..2362a2e 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/user/UserSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java @@ -1,17 +1,17 @@ -package org.dailystudio.springbootstudy.dto.user; +package org.dailystudio.springbootstudy.dto.member; import lombok.Getter; import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.domain.Member; @Getter -public class UserSaveReqDto { +public class MemberSaveReqDto { private String userEmail; private String userName; private String userPass; - public User toEntity(Team team){ - return User.builder() + public Member toEntity(Team team){ + return Member.builder() .team(team) .email(this.userEmail) .name(this.userName) diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java new file mode 100644 index 0000000..b0f4a65 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java @@ -0,0 +1,8 @@ +package org.dailystudio.springbootstudy.dto.team; + +import lombok.Getter; + +@Getter +public class TeamDeleteReqDto { + private Long id; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java new file mode 100644 index 0000000..536b64d --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java @@ -0,0 +1,9 @@ +package org.dailystudio.springbootstudy.dto.team; + +import lombok.Getter; + +@Getter +public class TeamNameChangeReqDto { + private Long id; + private String name; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java index 17d930f..88648d5 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java @@ -1,7 +1,9 @@ package org.dailystudio.springbootstudy.dto.team; +import lombok.Getter; import org.dailystudio.springbootstudy.domain.Team; +@Getter public class TeamSaveReqDto { private String teamName; diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java new file mode 100644 index 0000000..0773043 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java @@ -0,0 +1,8 @@ +package org.dailystudio.springbootstudy.repository; + + +import org.dailystudio.springbootstudy.domain.Member; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRepository extends JpaRepository { +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java deleted file mode 100644 index 75d301d..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.dailystudio.springbootstudy.repository; - - -import org.dailystudio.springbootstudy.domain.User; -import org.springframework.data.jpa.repository.EntityGraph; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; - -import java.util.List; - -public interface UserRepository extends JpaRepository { - User findByUserIdx(Long idx); - -// @EntityGraph(attributePaths = "userImgs") -// @Query("SELECT a FROM users a") -// List findAllEntityGraph(); -} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java b/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java new file mode 100644 index 0000000..7c6f3fc --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java @@ -0,0 +1,17 @@ +package org.dailystudio.springbootstudy.service; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; +import org.dailystudio.springbootstudy.repository.MemberRepository; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + + public void save(MemberSaveReqDto memberSaveReqDto) { + + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java index 50f54f0..7331b72 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java @@ -2,9 +2,12 @@ import lombok.RequiredArgsConstructor; import org.dailystudio.springbootstudy.domain.Team; +import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; +import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.repository.TeamRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -14,13 +17,27 @@ public class TeamService { private final TeamRepository teamRepository; + @Transactional public void save(TeamSaveReqDto teamSaveReqDto){ Team team = teamSaveReqDto.toEntity(); teamRepository.save(team); } + @Transactional(readOnly = true) public List getTeams(){ List teams = teamRepository.findAll(); return teams; } + + @Transactional + public void changeTeamName(TeamNameChangeReqDto teamNameChangeReqDto) { + Team team = teamRepository.getOne(teamNameChangeReqDto.getId()); + team.changeName(teamNameChangeReqDto); + } + + @Transactional + public void deleteTeam(TeamDeleteReqDto teamDeleteReqDto) { + Team team = teamRepository.getOne(teamDeleteReqDto.getId()); + teamRepository.delete(team); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java b/src/main/java/org/dailystudio/springbootstudy/service/UserService.java deleted file mode 100644 index 472f839..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/service/UserService.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.dailystudio.springbootstudy.service; - -import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.user.UserSaveReqDto; -import org.dailystudio.springbootstudy.repository.UserRepository; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class UserService { - - private final UserRepository userRepository; - - public void save(UserSaveReqDto userSaveReqDto) { - - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d1efbce..eb1dd49 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,26 +2,25 @@ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=saul2449 + + ## ͺ̽ Ű ּ ## jdbc:mysql://ּ/Ű̸? spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC + + ## Ǵ SQL մϴ. spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true + +## ̸ ϱ + + ## α մϴ #logging.level.org.hibernate.type=trace #logging.level.org.hibernate=info -##ҹ ̽ ذ -#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - -##ī̽ ھ ̸ ϱ -## -#spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy -# -## -#spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy ##MYSQL spring.jpa.database=mysql From 768abea00c8df97db32ab048b5dbf59c7f24bfef Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 03:04:15 +0900 Subject: [PATCH 13/23] =?UTF-8?q?=EC=8A=A4=ED=84=B0=EB=94=94=20=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 순환참조 문제 2. 직접 작성 유도 --- .../controller/MemberController.java | 22 ++++++++++++------- .../controller/TeamController.java | 19 +++++++++++++--- .../springbootstudy/domain/Member.java | 1 + .../springbootstudy/domain/Team.java | 14 ++++++++++++ .../dto/member/MemberSaveReqDto.java | 12 ++++++++-- .../springbootstudy/dto/team/TeamResDto.java | 13 +++++++++++ .../dto/team/TeamSaveReqDto.java | 2 ++ .../service/MemberService.java | 9 +++++++- .../springbootstudy/service/TeamService.java | 17 ++++++++++++-- src/main/resources/application.properties | 3 --- 10 files changed, 93 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java index 9b15682..36a23fb 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java @@ -4,13 +4,13 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.domain.Member; import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; import org.dailystudio.springbootstudy.service.MemberService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /* UserService의 메소드는 현재 깡통이야. @@ -25,17 +25,23 @@ public class MemberController { private final MemberService memberService; - @ApiOperation(value = "유저 정보 저장하기", - notes = "유저 정보를 저장합니다.") + @ApiOperation(value = "멤버 정보 저장하기", + notes = "멤버 정보를 저장합니다.") @ApiResponses(value = { - @ApiResponse(code = 201, message = "유저 저장 성공"), + @ApiResponse(code = 201, message = "멤버 저장 성공"), @ApiResponse(code = 500, message = "서버에러") }) @PostMapping("/save") - public ResponseEntity saveUser(@RequestBody MemberSaveReqDto memberSaveReqDto) { + public ResponseEntity saveMember(@RequestBody MemberSaveReqDto memberSaveReqDto) { memberService.save(memberSaveReqDto); return ResponseEntity.ok().build(); } + /* + 요구사항 + 1. 모든 멤버의 정보를 가져오기 + * 순환참조가 발생하지 않게 할 것 + */ + } diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java index 8b73a75..0a9fff2 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -4,6 +4,7 @@ import org.dailystudio.springbootstudy.domain.Team; import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; +import org.dailystudio.springbootstudy.dto.team.TeamResDto; import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.service.TeamService; import org.springframework.http.ResponseEntity; @@ -25,12 +26,24 @@ public ResponseEntity saveTeam(@RequestBody TeamSaveReqDto teamSaveReqDto) return ResponseEntity.ok().build(); } - @GetMapping - public ResponseEntity> findAll(){ - List teams = teamService.getTeams(); + @GetMapping("/dont") + public ResponseEntity> dontGetAll(){ + List teams = teamService.dontGetTeams(); return ResponseEntity.ok(teams); } + @GetMapping + public ResponseEntity> getAll(){ + List teamResDtos = teamService.getTeams(); + return ResponseEntity.ok(teamResDtos); + } + + /* + 요구사항 + 1. 한 개의 팀의 정보만 불러오도록 할것 + * 순환참조가 발생하지 않도록 할 것. + */ + @PutMapping public ResponseEntity changeTeamName(@RequestBody TeamNameChangeReqDto teamNameChangeReqDto){ teamService.changeTeamName(teamNameChangeReqDto); diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java index 33765fb..55369cb 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java @@ -15,6 +15,7 @@ public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "member_id") private Long id; @NotNull diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java index 5c84ab8..73225e3 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; +import org.dailystudio.springbootstudy.dto.team.TeamResDto; import javax.persistence.*; import javax.validation.constraints.NotNull; @@ -31,7 +32,20 @@ public Team(String name) { this.name = name; } + public Team(Long id, String name) { + this.id = id; + this.name = name; + } + public void changeName(TeamNameChangeReqDto teamNameChangeReqDto) { this.name = teamNameChangeReqDto.getName(); } + + public static Team getBasic(){ + return new Team(1L,"기본팀"); + } + + public TeamResDto toDto(){ + return new TeamResDto(this); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java index 2362a2e..7725b4b 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java @@ -1,21 +1,29 @@ package org.dailystudio.springbootstudy.dto.member; +import io.swagger.annotations.ApiModelProperty; import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Team; import org.dailystudio.springbootstudy.domain.Member; +import org.dailystudio.springbootstudy.domain.Team; @Getter public class MemberSaveReqDto { + + @ApiModelProperty(example = "example@gmail.com", position = 1) private String userEmail; + + @ApiModelProperty(example = "박찬인", position = 2) private String userName; + + @ApiModelProperty(example = "q1w2e3", position = 3) private String userPass; - public Member toEntity(Team team){ + public Member toEntity(Team team) { return Member.builder() .team(team) .email(this.userEmail) .name(this.userName) .pass(this.userPass) + .team(team) .build(); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java new file mode 100644 index 0000000..3d32743 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java @@ -0,0 +1,13 @@ +package org.dailystudio.springbootstudy.dto.team; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Team; + +@Getter +public class TeamResDto { + private String teamName; + + public TeamResDto(Team team) { + this.teamName = team.getName(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java index 88648d5..750e840 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java @@ -1,11 +1,13 @@ package org.dailystudio.springbootstudy.dto.team; +import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import org.dailystudio.springbootstudy.domain.Team; @Getter public class TeamSaveReqDto { + @ApiModelProperty(example = "팀 스부스", position = 1) private String teamName; public Team toEntity(){ diff --git a/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java b/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java index 7c6f3fc..5198c9d 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java @@ -1,10 +1,14 @@ package org.dailystudio.springbootstudy.service; import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.domain.Member; +import org.dailystudio.springbootstudy.domain.Team; import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; import org.dailystudio.springbootstudy.repository.MemberRepository; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor public class MemberService { @@ -12,6 +16,9 @@ public class MemberService { private final MemberRepository memberRepository; public void save(MemberSaveReqDto memberSaveReqDto) { - + Team basicTeam = Team.getBasic(); + Member member = memberSaveReqDto.toEntity(basicTeam); + memberRepository.save(member); } + } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java index 7331b72..44044b0 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java @@ -4,12 +4,14 @@ import org.dailystudio.springbootstudy.domain.Team; import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; +import org.dailystudio.springbootstudy.dto.team.TeamResDto; import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; import org.dailystudio.springbootstudy.repository.TeamRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -18,17 +20,28 @@ public class TeamService { private final TeamRepository teamRepository; @Transactional - public void save(TeamSaveReqDto teamSaveReqDto){ + public void save(TeamSaveReqDto teamSaveReqDto) { Team team = teamSaveReqDto.toEntity(); teamRepository.save(team); } @Transactional(readOnly = true) - public List getTeams(){ + public List dontGetTeams() { List teams = teamRepository.findAll(); return teams; } + @Transactional(readOnly = true) + public List getTeams() { + List teams = teamRepository.findAll(); + + List teamResDtos = teams.stream() + .map(team -> team.toDto()) + .collect(Collectors.toList()); + + return teamResDtos; + } + @Transactional public void changeTeamName(TeamNameChangeReqDto teamNameChangeReqDto) { Team team = teamRepository.getOne(teamNameChangeReqDto.getId()); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index eb1dd49..308448d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,9 +14,6 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true -## ̸ ϱ - - ## α մϴ #logging.level.org.hibernate.type=trace #logging.level.org.hibernate=info From b1d410e60230002441ea7eb485944c4ca2da1e69 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 03:12:32 +0900 Subject: [PATCH 14/23] =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=A0=9C=ED=95=9C?= =?UTF-8?q?=EC=9E=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/dailystudio/springbootstudy/domain/Team.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java index 73225e3..97bbcd1 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java @@ -32,7 +32,7 @@ public Team(String name) { this.name = name; } - public Team(Long id, String name) { + private Team(Long id, String name) { this.id = id; this.name = name; } From c59e669cda29492b29801477dbd34c764266c25e Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 03:16:57 +0900 Subject: [PATCH 15/23] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 순환참조 피하기 2. 일부정보만 불러오기 --- .../springbootstudy/controller/MemberController.java | 1 + .../dailystudio/springbootstudy/controller/TeamController.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java index 36a23fb..cbd473c 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java @@ -41,6 +41,7 @@ public ResponseEntity saveMember(@RequestBody MemberSaveReqDto memberSaveR 요구사항 1. 모든 멤버의 정보를 가져오기 * 순환참조가 발생하지 않게 할 것 + * 멤버가 속한 팀의 이름을 포함할 것 */ diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java index 0a9fff2..6eae7b4 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -41,7 +41,9 @@ public ResponseEntity> getAll(){ /* 요구사항 1. 한 개의 팀의 정보만 불러오도록 할것 + 2. 팀에 속한 멤버의 정보를 포함할 것. * 순환참조가 발생하지 않도록 할 것. + * 멤버의 정보중 비밀번호를 제외한 정보를 포함할 것 */ @PutMapping From 7fd7d013e56e9db959586347bfd3f12d2d366c33 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Sun, 31 Mar 2019 03:19:00 +0900 Subject: [PATCH 16/23] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootstudy/controller/MemberController.java | 7 +++++++ .../springbootstudy/controller/TeamController.java | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java index cbd473c..5ac36df 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java @@ -40,8 +40,15 @@ public ResponseEntity saveMember(@RequestBody MemberSaveReqDto memberSaveR /* 요구사항 1. 모든 멤버의 정보를 가져오기 + * 순환참조가 발생하지 않게 할 것 * 멤버가 속한 팀의 이름을 포함할 것 + + 2. 멤버의 이름을 바꿀 것 + + * setter를 사용하지 말 것 + + 3. 멤버의 정보를 삭제 할 것 */ diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java index 6eae7b4..e01159c 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java @@ -41,7 +41,9 @@ public ResponseEntity> getAll(){ /* 요구사항 1. 한 개의 팀의 정보만 불러오도록 할것 + 2. 팀에 속한 멤버의 정보를 포함할 것. + * 순환참조가 발생하지 않도록 할 것. * 멤버의 정보중 비밀번호를 제외한 정보를 포함할 것 */ From ae839fddcf21ba552c0c59ba5dc3a6431b38380c Mon Sep 17 00:00:00 2001 From: pci2676 Date: Mon, 1 Apr 2019 01:24:36 +0900 Subject: [PATCH 17/23] =?UTF-8?q?JPA=20=EC=98=88=EC=A0=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 단뱡향맵핑 ManyToOne 2. 단뱡향맵핑 OneToMany --- .../controller/FamilyController.java | 47 +++++++++++ .../springbootstudy/domain/Child.java | 29 +++++++ .../springbootstudy/domain/Parent.java | 29 +++++++ .../springbootstudy/dto/parent/ParentDto.java | 21 +++++ .../repository/ChildRepository.java | 7 ++ .../repository/ParentRepository.java | 7 ++ .../service/FamilyService.java | 80 +++++++++++++++++++ src/main/resources/application.properties | 2 +- 8 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Child.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Parent.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java new file mode 100644 index 0000000..9a3fa29 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java @@ -0,0 +1,47 @@ +package org.dailystudio.springbootstudy.controller; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.domain.Child; +import org.dailystudio.springbootstudy.domain.Parent; +import org.dailystudio.springbootstudy.dto.parent.ParentDto; +import org.dailystudio.springbootstudy.service.FamilyService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("api/family") +@RequiredArgsConstructor +public class FamilyController { + + private final FamilyService familyService; + + @PostMapping("/mto") + public ResponseEntity> manyToOne(){ + //부모저장 + familyService.saveParentForManyToOne(); + //자식저장 + familyService.saveChildForManyToOne(); + //자식 불러오기 + List children = familyService.getAllChild(); + + return ResponseEntity.ok(children); + } + +// @PostMapping("/otm") +// public ResponseEntity oneToMany() { +// //부모, 자식 저장 +// familyService.saveParentForOneToMany(); +// return ResponseEntity.ok().build(); +// } +// +// @GetMapping("/otm") +// public ResponseEntity oneToManyGet(Long id) { +// Parent parent = familyService.getParent(id); +// return ResponseEntity.ok(new ParentDto(parent)); +// } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java new file mode 100644 index 0000000..0d9bf0c --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java @@ -0,0 +1,29 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; + +@Entity +@Table(name = "child") +@Getter +@Setter +public class Child { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "child_id") + private Long id; + + @NotNull + private String name; + + @ManyToOne + @JoinColumn(name = "parent_id") + private Parent parent; + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java new file mode 100644 index 0000000..20a3437 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java @@ -0,0 +1,29 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "parent") +@Getter +@Setter +public class Parent { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "parent_id") + private Long id; + + @NotNull + private String name; + +// @OneToMany(cascade = CascadeType.ALL) +// @JoinColumn(name = "parent_id") +// private List children = new ArrayList<>(); + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java new file mode 100644 index 0000000..3b343c0 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java @@ -0,0 +1,21 @@ +package org.dailystudio.springbootstudy.dto.parent; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Child; +import org.dailystudio.springbootstudy.domain.Parent; + +import java.util.List; + +@Getter +public class ParentDto { + private Long id; + private String name; + + private List children; + + public ParentDto(Parent parent){ + this.id=parent.getId(); + this.name=parent.getName(); + this.children=parent.getChildren(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java new file mode 100644 index 0000000..06d24ee --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.Child; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ChildRepository extends JpaRepository { +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java new file mode 100644 index 0000000..92930a7 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.Parent; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ParentRepository extends JpaRepository { +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java new file mode 100644 index 0000000..dac004d --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java @@ -0,0 +1,80 @@ +package org.dailystudio.springbootstudy.service; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.domain.Child; +import org.dailystudio.springbootstudy.domain.Parent; +import org.dailystudio.springbootstudy.repository.ChildRepository; +import org.dailystudio.springbootstudy.repository.ParentRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class FamilyService { + + private final ParentRepository parentRepository; + private final ChildRepository childRepository; + + @Transactional(readOnly = true) + public List getAllChild(){ + List children = childRepository.findAll(); + return children; + } + + @Transactional + public void saveParentForManyToOne() { + Parent parent1 = new Parent(); + parent1.setName("부모님1"); + Parent parent2 = new Parent(); + parent2.setName("부모님2"); + + parentRepository.save(parent1); + parentRepository.save(parent2); + } + + @Transactional + public void saveChildForManyToOne() { + Parent parent1 = parentRepository.getOne(1L); + + Child child1 = new Child(); + Child child2 = new Child(); + + child1.setName("자식1"); + child1.setParent(parent1); + + child2.setName("자식2"); + child2.setParent(parent1); + + childRepository.save(child1); + childRepository.save(child2); + } + + +// @Transactional(readOnly = true) +// public Parent getParent(Long id) { +// Parent parent = parentRepository.getOne(id); +// return parent; +// } +// +// @Transactional +// public void saveParentForOneToMany() { +// Parent parent3 = new Parent(); +// parent3.setName("부모님3"); +// +// Child child1 = new Child(); +// Child child2 = new Child(); +// +// child1.setName("자식3"); +// child2.setName("자식4"); +// +// +// parent3.getChildren().add(child1); +// parent3.getChildren().add(child2); +// +// parentRepository.save(parent3); +// } + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 308448d..a7c6543 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.format_sql=true ## α մϴ -#logging.level.org.hibernate.type=trace +logging.level.org.hibernate.type=trace #logging.level.org.hibernate=info From 93cc439717c9bb496ce281806a575f1157e9e936 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Mon, 1 Apr 2019 01:26:11 +0900 Subject: [PATCH 18/23] =?UTF-8?q?=EC=98=A4=EB=A5=98=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=A3=BC=EC=84=9D=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dailystudio/springbootstudy/dto/parent/ParentDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java index 3b343c0..b22fd94 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java @@ -16,6 +16,6 @@ public class ParentDto { public ParentDto(Parent parent){ this.id=parent.getId(); this.name=parent.getName(); - this.children=parent.getChildren(); +// this.children=parent.getChildren(); } } From 5bc7a4862bfdd5a633da3dff6b7696a91bfbd35c Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 2 Apr 2019 18:04:47 +0900 Subject: [PATCH 19/23] =?UTF-8?q?H2=20=EB=82=B4=EC=9E=A5=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. H2를 사용하기 위한 의존성 추가 2. properties 분할 하여 사용하기 --- build.gradle | 3 + .../controller/FamilyController.java | 55 ++++++----- .../springbootstudy/domain/Child.java | 6 +- .../springbootstudy/domain/Parent.java | 6 +- .../dto/child/ChildResDto.java | 15 +++ .../springbootstudy/dto/parent/ParentDto.java | 2 +- .../service/FamilyService.java | 92 +++++++++---------- .../resources/application-local.properties | 5 + .../resources/application-prod.properties | 14 +++ src/main/resources/application.properties | 18 +--- 10 files changed, 124 insertions(+), 92 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java create mode 100644 src/main/resources/application-local.properties create mode 100644 src/main/resources/application-prod.properties diff --git a/build.gradle b/build.gradle index 24e56a3..07a0afc 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,9 @@ repositories { } dependencies { + runtimeOnly('com.h2database:h2') + compile("org.springframework.boot:spring-boot-devtools") + runtimeOnly 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java index 9a3fa29..63e8310 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java @@ -1,7 +1,6 @@ package org.dailystudio.springbootstudy.controller; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.Child; import org.dailystudio.springbootstudy.domain.Parent; import org.dailystudio.springbootstudy.dto.parent.ParentDto; import org.dailystudio.springbootstudy.service.FamilyService; @@ -11,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - @RestController @RequestMapping("api/family") @RequiredArgsConstructor @@ -20,28 +17,38 @@ public class FamilyController { private final FamilyService familyService; - @PostMapping("/mto") - public ResponseEntity> manyToOne(){ - //부모저장 - familyService.saveParentForManyToOne(); - //자식저장 - familyService.saveChildForManyToOne(); - //자식 불러오기 - List children = familyService.getAllChild(); - - return ResponseEntity.ok(children); - } - -// @PostMapping("/otm") -// public ResponseEntity oneToMany() { -// //부모, 자식 저장 -// familyService.saveParentForOneToMany(); -// return ResponseEntity.ok().build(); +// @PostMapping("/mto") +// public ResponseEntity> manyToOne(){ +// //부모저장 +// familyService.saveParentForManyToOne(); +// //자식저장 +// familyService.saveChildForManyToOne(); +// //자식 불러오기 +// List children = familyService.getAllChild(); +// +// return ResponseEntity.ok(children); // } // -// @GetMapping("/otm") -// public ResponseEntity oneToManyGet(Long id) { -// Parent parent = familyService.getParent(id); -// return ResponseEntity.ok(new ParentDto(parent)); +// @GetMapping("mto") +// public ResponseEntity> manyToOneLazy(){ +// //자식 불러오기 +// List children = familyService.getAllChild(); +// List childResDtos = children.stream() +// .map(child -> new ChildResDto(child)) +// .collect(Collectors.toList()); +// return ResponseEntity.ok(childResDtos); // } + + @PostMapping("/otm") + public ResponseEntity oneToMany() { + //부모, 자식 저장 + familyService.saveParentForOneToMany(); + return ResponseEntity.ok().build(); + } + + @GetMapping("/otm") + public ResponseEntity oneToManyGet(Long id) { + Parent parent = familyService.getParent(id); + return ResponseEntity.ok(new ParentDto(parent)); + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java index 0d9bf0c..6eeaff1 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java @@ -22,8 +22,8 @@ public class Child { @NotNull private String name; - @ManyToOne - @JoinColumn(name = "parent_id") - private Parent parent; +// @ManyToOne(fetch = FetchType.LAZY) +// @JoinColumn(name = "parent_id") +// private Parent parent; } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java index 20a3437..fccd8b6 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java @@ -22,8 +22,8 @@ public class Parent { @NotNull private String name; -// @OneToMany(cascade = CascadeType.ALL) -// @JoinColumn(name = "parent_id") -// private List children = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "parent_id") + private List children = new ArrayList<>(); } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java new file mode 100644 index 0000000..6a13d9a --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java @@ -0,0 +1,15 @@ +//package org.dailystudio.springbootstudy.dto.child; +// +//import lombok.Getter; +//import org.dailystudio.springbootstudy.domain.Child; +// +//@Getter +//public class ChildResDto { +// private String name; +// private String parentName; +// +// public ChildResDto(Child child) { +// this.name = child.getName(); +// this.parentName = child.getParent().getName(); +// } +//} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java index b22fd94..3b343c0 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java @@ -16,6 +16,6 @@ public class ParentDto { public ParentDto(Parent parent){ this.id=parent.getId(); this.name=parent.getName(); -// this.children=parent.getChildren(); + this.children=parent.getChildren(); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java index dac004d..ae1f168 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java @@ -17,64 +17,64 @@ public class FamilyService { private final ParentRepository parentRepository; private final ChildRepository childRepository; - @Transactional(readOnly = true) - public List getAllChild(){ - List children = childRepository.findAll(); - return children; - } +// @Transactional(readOnly = true) +// public List getAllChild(){ +// List children = childRepository.findAll(); +// return children; +// } +// +// @Transactional +// public void saveParentForManyToOne() { +// Parent parent1 = new Parent(); +// parent1.setName("부모님1"); +// Parent parent2 = new Parent(); +// parent2.setName("부모님2"); +// +// parentRepository.save(parent1); +// parentRepository.save(parent2); +// } +// +// @Transactional +// public void saveChildForManyToOne() { +// Parent parent1 = parentRepository.getOne(1L); +// +// Child child1 = new Child(); +// Child child2 = new Child(); +// +// child1.setName("자식1"); +// child1.setParent(parent1); +// +// child2.setName("자식2"); +// child2.setParent(parent1); +// +// childRepository.save(child1); +// childRepository.save(child2); +// } - @Transactional - public void saveParentForManyToOne() { - Parent parent1 = new Parent(); - parent1.setName("부모님1"); - Parent parent2 = new Parent(); - parent2.setName("부모님2"); - parentRepository.save(parent1); - parentRepository.save(parent2); + @Transactional(readOnly = true) + public Parent getParent(Long id) { + Parent parent = parentRepository.getOne(id); + return parent; } @Transactional - public void saveChildForManyToOne() { - Parent parent1 = parentRepository.getOne(1L); + public void saveParentForOneToMany() { + Parent parent3 = new Parent(); + parent3.setName("부모님3"); Child child1 = new Child(); Child child2 = new Child(); - child1.setName("자식1"); - child1.setParent(parent1); + child1.setName("자식3"); + child2.setName("자식4"); - child2.setName("자식2"); - child2.setParent(parent1); - childRepository.save(child1); - childRepository.save(child2); - } + parent3.getChildren().add(child1); + parent3.getChildren().add(child2); - -// @Transactional(readOnly = true) -// public Parent getParent(Long id) { -// Parent parent = parentRepository.getOne(id); -// return parent; -// } -// -// @Transactional -// public void saveParentForOneToMany() { -// Parent parent3 = new Parent(); -// parent3.setName("부모님3"); -// -// Child child1 = new Child(); -// Child child2 = new Child(); -// -// child1.setName("자식3"); -// child2.setName("자식4"); -// -// -// parent3.getChildren().add(child1); -// parent3.getChildren().add(child2); -// -// parentRepository.save(parent3); -// } + parentRepository.save(parent3); + } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties new file mode 100644 index 0000000..79c4cd0 --- /dev/null +++ b/src/main/resources/application-local.properties @@ -0,0 +1,5 @@ +spring.h2.console.path=/h2 +spring.datasource.url=jdbc:h2:~/ds;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.h2.console.enabled=true +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties new file mode 100644 index 0000000..0e6aef9 --- /dev/null +++ b/src/main/resources/application-prod.properties @@ -0,0 +1,14 @@ +## ͺ̽ ⺻ +spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver +spring.datasource.username=root +spring.datasource.password=saul2449 + + +## ͺ̽ Ű ּ +## jdbc:mysql://ּ/Ű̸? +spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC + + +##MYSQL +spring.jpa.database=mysql +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a7c6543..059cf2a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,12 +1,5 @@ -## ͺ̽ ⺻ -spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=saul2449 - - -## ͺ̽ Ű ּ -## jdbc:mysql://ּ/Ű̸? -spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC +## properties մϴ. +spring.profiles.active=local ## Ǵ SQL մϴ. @@ -16,9 +9,4 @@ spring.jpa.properties.hibernate.format_sql=true ## α մϴ logging.level.org.hibernate.type=trace -#logging.level.org.hibernate=info - - -##MYSQL -spring.jpa.database=mysql -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file +#logging.level.org.hibernate=info \ No newline at end of file From 3388e8963f75c3cb3c3b086ad2a235c448e9b5c4 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 2 Apr 2019 18:28:21 +0900 Subject: [PATCH 20/23] =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController.java | 14 ++++---------- .../dailystudio/springbootstudy/domain/Member.java | 10 +++++----- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java index 5ac36df..9ad5170 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java @@ -4,19 +4,13 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.Member; import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; import org.dailystudio.springbootstudy.service.MemberService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/* - UserService의 메소드는 현재 깡통이야. - 디비와 연결을 하지 않았기 때문에 실제로 불러오는 값이 존재하지않아. - 이번 소스코드에서는 swagger의 기능들을 살펴보고 넘어가자. - */ +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/user") diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java index 55369cb..f263085 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java @@ -33,10 +33,10 @@ public class Member { private Team team; @Builder - public Member(String email, String name, String pass, Team team){ - this.email=email; - this.name=name; - this.pass=pass; - this.team=team; + public Member(String email, String name, String pass, Team team) { + this.email = email; + this.name = name; + this.pass = pass; + this.team = team; } } From b0d5798071078845eea853239acc1447100fb6e7 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Thu, 4 Apr 2019 23:20:30 +0900 Subject: [PATCH 21/23] =?UTF-8?q?ignore=20=EC=9E=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 63177e3..cf4dc8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +generated + HELP.md .gradle /build/ From 5c654327c31272b2a691862d53a8d12a122980b3 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Mon, 8 Apr 2019 01:18:53 +0900 Subject: [PATCH 22/23] =?UTF-8?q?=EC=96=91=EB=B0=A9=ED=96=A5=EC=98=88?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.양방향예제와 dto해결법 --- .../controller/FamilyController.java | 42 ++++------- .../controller/MemberController.java | 49 ------------- .../controller/TeamController.java | 64 ----------------- .../springbootstudy/domain/Child.java | 6 +- .../springbootstudy/domain/Member.java | 42 ----------- .../springbootstudy/domain/Parent.java | 3 +- .../springbootstudy/domain/Team.java | 51 -------------- .../dto/child/ChildResDto.java | 28 ++++---- .../dto/member/MemberSaveReqDto.java | 29 -------- .../springbootstudy/dto/parent/ParentDto.java | 15 ++-- .../dto/team/TeamDeleteReqDto.java | 8 --- .../dto/team/TeamNameChangeReqDto.java | 9 --- .../springbootstudy/dto/team/TeamResDto.java | 13 ---- .../dto/team/TeamSaveReqDto.java | 18 ----- .../repository/MemberRepository.java | 8 --- .../repository/TeamRepository.java | 7 -- .../service/FamilyService.java | 69 ++++++------------- .../service/MemberService.java | 24 ------- .../springbootstudy/service/TeamService.java | 56 --------------- .../resources/application-local.properties | 2 +- 20 files changed, 60 insertions(+), 483 deletions(-) delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Member.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Team.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/service/MemberService.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/service/TeamService.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java index 63e8310..79ce321 100644 --- a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java +++ b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java @@ -17,38 +17,22 @@ public class FamilyController { private final FamilyService familyService; -// @PostMapping("/mto") -// public ResponseEntity> manyToOne(){ -// //부모저장 -// familyService.saveParentForManyToOne(); -// //자식저장 -// familyService.saveChildForManyToOne(); -// //자식 불러오기 -// List children = familyService.getAllChild(); -// -// return ResponseEntity.ok(children); -// } -// -// @GetMapping("mto") -// public ResponseEntity> manyToOneLazy(){ -// //자식 불러오기 -// List children = familyService.getAllChild(); -// List childResDtos = children.stream() -// .map(child -> new ChildResDto(child)) -// .collect(Collectors.toList()); -// return ResponseEntity.ok(childResDtos); -// } + @PostMapping("/save/parent") + public ResponseEntity saveParent(){ + familyService.saveParent(); + return ResponseEntity.ok().build(); + } - @PostMapping("/otm") - public ResponseEntity oneToMany() { - //부모, 자식 저장 - familyService.saveParentForOneToMany(); + @PostMapping("/save/children") + public ResponseEntity saveChildren(){ + familyService.saveChild(); return ResponseEntity.ok().build(); } - @GetMapping("/otm") - public ResponseEntity oneToManyGet(Long id) { - Parent parent = familyService.getParent(id); - return ResponseEntity.ok(new ParentDto(parent)); + @GetMapping("/parent") + public ResponseEntity getParent(){ + Parent parent = familyService.getParent(); + ParentDto parentDto = new ParentDto(parent); + return ResponseEntity.ok(parentDto); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java b/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java deleted file mode 100644 index 9ad5170..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.dailystudio.springbootstudy.controller; - -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; -import org.dailystudio.springbootstudy.service.MemberService; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("api/user") -@RequiredArgsConstructor -public class MemberController { - - private final MemberService memberService; - - @ApiOperation(value = "멤버 정보 저장하기", - notes = "멤버 정보를 저장합니다.") - @ApiResponses(value = { - @ApiResponse(code = 201, message = "멤버 저장 성공"), - @ApiResponse(code = 500, message = "서버에러") - }) - @PostMapping("/save") - public ResponseEntity saveMember(@RequestBody MemberSaveReqDto memberSaveReqDto) { - memberService.save(memberSaveReqDto); - return ResponseEntity.ok().build(); - } - - /* - 요구사항 - 1. 모든 멤버의 정보를 가져오기 - - * 순환참조가 발생하지 않게 할 것 - * 멤버가 속한 팀의 이름을 포함할 것 - - 2. 멤버의 이름을 바꿀 것 - - * setter를 사용하지 말 것 - - 3. 멤버의 정보를 삭제 할 것 - */ - - -} diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java b/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java deleted file mode 100644 index e01159c..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.dailystudio.springbootstudy.controller; - -import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; -import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; -import org.dailystudio.springbootstudy.dto.team.TeamResDto; -import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; -import org.dailystudio.springbootstudy.service.TeamService; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping("api/team") -@RequiredArgsConstructor -public class TeamController { - - private final TeamService teamService; - - @PostMapping("/save") - public ResponseEntity saveTeam(@RequestBody TeamSaveReqDto teamSaveReqDto){ - teamService.save(teamSaveReqDto); - - return ResponseEntity.ok().build(); - } - - @GetMapping("/dont") - public ResponseEntity> dontGetAll(){ - List teams = teamService.dontGetTeams(); - return ResponseEntity.ok(teams); - } - - @GetMapping - public ResponseEntity> getAll(){ - List teamResDtos = teamService.getTeams(); - return ResponseEntity.ok(teamResDtos); - } - - /* - 요구사항 - 1. 한 개의 팀의 정보만 불러오도록 할것 - - 2. 팀에 속한 멤버의 정보를 포함할 것. - - * 순환참조가 발생하지 않도록 할 것. - * 멤버의 정보중 비밀번호를 제외한 정보를 포함할 것 - */ - - @PutMapping - public ResponseEntity changeTeamName(@RequestBody TeamNameChangeReqDto teamNameChangeReqDto){ - teamService.changeTeamName(teamNameChangeReqDto); - - return ResponseEntity.ok().build(); - } - - @DeleteMapping - public ResponseEntity DeleteTeam(@RequestBody TeamDeleteReqDto teamDeleteReqDto){ - teamService.deleteTeam(teamDeleteReqDto); - - return ResponseEntity.ok().build(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java index 6eeaff1..8ff70f8 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Child.java @@ -22,8 +22,8 @@ public class Child { @NotNull private String name; -// @ManyToOne(fetch = FetchType.LAZY) -// @JoinColumn(name = "parent_id") -// private Parent parent; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private Parent parent; } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java b/src/main/java/org/dailystudio/springbootstudy/domain/Member.java deleted file mode 100644 index f263085..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Member.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.dailystudio.springbootstudy.domain; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; - -@Getter -@NoArgsConstructor -@Entity -@Table(name = "member") -public class Member { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "member_id") - private Long id; - - @NotNull - @Column - private String email; - - @NotNull - private String name; - - @NotNull - private String pass; - - @ManyToOne - @JoinColumn(name = "team_id") - private Team team; - - @Builder - public Member(String email, String name, String pass, Team team) { - this.email = email; - this.name = name; - this.pass = pass; - this.team = team; - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java index fccd8b6..6032186 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java @@ -22,8 +22,7 @@ public class Parent { @NotNull private String name; - @OneToMany(cascade = CascadeType.ALL) - @JoinColumn(name = "parent_id") + @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent") private List children = new ArrayList<>(); } diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java b/src/main/java/org/dailystudio/springbootstudy/domain/Team.java deleted file mode 100644 index 97bbcd1..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Team.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dailystudio.springbootstudy.domain; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; -import org.dailystudio.springbootstudy.dto.team.TeamResDto; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Entity -@Table(name = "team") -@Getter -@NoArgsConstructor -public class Team { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "team_id") - private Long id; - - @NotNull - private String name; - - @OneToMany(mappedBy = "team") - private List members; - - @Builder - public Team(String name) { - this.name = name; - } - - private Team(Long id, String name) { - this.id = id; - this.name = name; - } - - public void changeName(TeamNameChangeReqDto teamNameChangeReqDto) { - this.name = teamNameChangeReqDto.getName(); - } - - public static Team getBasic(){ - return new Team(1L,"기본팀"); - } - - public TeamResDto toDto(){ - return new TeamResDto(this); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java index 6a13d9a..9ccbde3 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java @@ -1,15 +1,13 @@ -//package org.dailystudio.springbootstudy.dto.child; -// -//import lombok.Getter; -//import org.dailystudio.springbootstudy.domain.Child; -// -//@Getter -//public class ChildResDto { -// private String name; -// private String parentName; -// -// public ChildResDto(Child child) { -// this.name = child.getName(); -// this.parentName = child.getParent().getName(); -// } -//} +package org.dailystudio.springbootstudy.dto.child; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Child; + +@Getter +public class ChildResDto { + private String name; + + public ChildResDto(Child child) { + this.name = child.getName(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java deleted file mode 100644 index 7725b4b..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.dailystudio.springbootstudy.dto.member; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Member; -import org.dailystudio.springbootstudy.domain.Team; - -@Getter -public class MemberSaveReqDto { - - @ApiModelProperty(example = "example@gmail.com", position = 1) - private String userEmail; - - @ApiModelProperty(example = "박찬인", position = 2) - private String userName; - - @ApiModelProperty(example = "q1w2e3", position = 3) - private String userPass; - - public Member toEntity(Team team) { - return Member.builder() - .team(team) - .email(this.userEmail) - .name(this.userName) - .pass(this.userPass) - .team(team) - .build(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java index 3b343c0..1e8e020 100644 --- a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java +++ b/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java @@ -1,21 +1,24 @@ package org.dailystudio.springbootstudy.dto.parent; import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Child; import org.dailystudio.springbootstudy.domain.Parent; +import org.dailystudio.springbootstudy.dto.child.ChildResDto; import java.util.List; +import java.util.stream.Collectors; @Getter public class ParentDto { private Long id; private String name; - private List children; + private List children; - public ParentDto(Parent parent){ - this.id=parent.getId(); - this.name=parent.getName(); - this.children=parent.getChildren(); + public ParentDto(Parent parent) { + this.id = parent.getId(); + this.name = parent.getName(); + this.children = parent.getChildren().stream() + .map(child -> new ChildResDto(child)) + .collect(Collectors.toList()); } } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java deleted file mode 100644 index b0f4a65..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamDeleteReqDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import lombok.Getter; - -@Getter -public class TeamDeleteReqDto { - private Long id; -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java deleted file mode 100644 index 536b64d..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamNameChangeReqDto.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import lombok.Getter; - -@Getter -public class TeamNameChangeReqDto { - private Long id; - private String name; -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java deleted file mode 100644 index 3d32743..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamResDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Team; - -@Getter -public class TeamResDto { - private String teamName; - - public TeamResDto(Team team) { - this.teamName = team.getName(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java deleted file mode 100644 index 750e840..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/team/TeamSaveReqDto.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.dailystudio.springbootstudy.dto.team; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import org.dailystudio.springbootstudy.domain.Team; - -@Getter -public class TeamSaveReqDto { - - @ApiModelProperty(example = "팀 스부스", position = 1) - private String teamName; - - public Team toEntity(){ - return Team.builder() - .name(this.teamName) - .build(); - } -} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java deleted file mode 100644 index 0773043..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/repository/MemberRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.dailystudio.springbootstudy.repository; - - -import org.dailystudio.springbootstudy.domain.Member; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface MemberRepository extends JpaRepository { -} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java deleted file mode 100644 index 2133266..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.dailystudio.springbootstudy.repository; - -import org.dailystudio.springbootstudy.domain.Team; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface TeamRepository extends JpaRepository { -} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java index ae1f168..7708fb8 100644 --- a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java +++ b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java @@ -17,64 +17,35 @@ public class FamilyService { private final ParentRepository parentRepository; private final ChildRepository childRepository; -// @Transactional(readOnly = true) -// public List getAllChild(){ -// List children = childRepository.findAll(); -// return children; -// } -// -// @Transactional -// public void saveParentForManyToOne() { -// Parent parent1 = new Parent(); -// parent1.setName("부모님1"); -// Parent parent2 = new Parent(); -// parent2.setName("부모님2"); -// -// parentRepository.save(parent1); -// parentRepository.save(parent2); -// } -// -// @Transactional -// public void saveChildForManyToOne() { -// Parent parent1 = parentRepository.getOne(1L); -// -// Child child1 = new Child(); -// Child child2 = new Child(); -// -// child1.setName("자식1"); -// child1.setParent(parent1); -// -// child2.setName("자식2"); -// child2.setParent(parent1); -// -// childRepository.save(child1); -// childRepository.save(child2); -// } - - - @Transactional(readOnly = true) - public Parent getParent(Long id) { - Parent parent = parentRepository.getOne(id); - return parent; + public void saveParent(){ + Parent parent = new Parent(); + parent.setName("부모님"); + parentRepository.save(parent); } - @Transactional - public void saveParentForOneToMany() { - Parent parent3 = new Parent(); - parent3.setName("부모님3"); - + public void saveChild(){ Child child1 = new Child(); Child child2 = new Child(); - child1.setName("자식3"); - child2.setName("자식4"); + child1.setName("자식"); + child2.setName("자식"); + Parent parent = parentRepository.findAll().get(0); - parent3.getChildren().add(child1); - parent3.getChildren().add(child2); + child1.setParent(parent); + child2.setParent(parent); - parentRepository.save(parent3); + childRepository.save(child1); + childRepository.save(child2); } + public Parent getParent(){ + Parent parent = parentRepository.findAll().get(0); + System.out.println("parent id = "+parent.getId()); + System.out.println("parent name = "+parent.getName()); + + System.out.println("parent has "+parent.getChildren().size()+" children."); + return parent; + } } diff --git a/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java b/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java deleted file mode 100644 index 5198c9d..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/service/MemberService.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.dailystudio.springbootstudy.service; - -import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.Member; -import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.dto.member.MemberSaveReqDto; -import org.dailystudio.springbootstudy.repository.MemberRepository; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class MemberService { - - private final MemberRepository memberRepository; - - public void save(MemberSaveReqDto memberSaveReqDto) { - Team basicTeam = Team.getBasic(); - Member member = memberSaveReqDto.toEntity(basicTeam); - memberRepository.save(member); - } - -} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java b/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java deleted file mode 100644 index 44044b0..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/service/TeamService.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dailystudio.springbootstudy.service; - -import lombok.RequiredArgsConstructor; -import org.dailystudio.springbootstudy.domain.Team; -import org.dailystudio.springbootstudy.dto.team.TeamDeleteReqDto; -import org.dailystudio.springbootstudy.dto.team.TeamNameChangeReqDto; -import org.dailystudio.springbootstudy.dto.team.TeamResDto; -import org.dailystudio.springbootstudy.dto.team.TeamSaveReqDto; -import org.dailystudio.springbootstudy.repository.TeamRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.stream.Collectors; - -@Service -@RequiredArgsConstructor -public class TeamService { - - private final TeamRepository teamRepository; - - @Transactional - public void save(TeamSaveReqDto teamSaveReqDto) { - Team team = teamSaveReqDto.toEntity(); - teamRepository.save(team); - } - - @Transactional(readOnly = true) - public List dontGetTeams() { - List teams = teamRepository.findAll(); - return teams; - } - - @Transactional(readOnly = true) - public List getTeams() { - List teams = teamRepository.findAll(); - - List teamResDtos = teams.stream() - .map(team -> team.toDto()) - .collect(Collectors.toList()); - - return teamResDtos; - } - - @Transactional - public void changeTeamName(TeamNameChangeReqDto teamNameChangeReqDto) { - Team team = teamRepository.getOne(teamNameChangeReqDto.getId()); - team.changeName(teamNameChangeReqDto); - } - - @Transactional - public void deleteTeam(TeamDeleteReqDto teamDeleteReqDto) { - Team team = teamRepository.getOne(teamDeleteReqDto.getId()); - teamRepository.delete(team); - } -} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 79c4cd0..35168f0 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -2,4 +2,4 @@ spring.h2.console.path=/h2 spring.datasource.url=jdbc:h2:~/ds;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.jpa.hibernate.ddl-auto=create \ No newline at end of file From 6f7da95cb4c7658b546f4851d715e22b3b3263c6 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Thu, 11 Apr 2019 12:25:14 +0900 Subject: [PATCH 23/23] =?UTF-8?q?jpa=20=EA=B8=B0=EB=B3=B8=EC=98=88?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserController.java | 57 +++++++++++++++++++ .../springbootstudy/domain/User.java | 36 ++++++++++++ .../repository/UserRepository.java | 7 +++ .../resources/application-prod.properties | 6 +- src/main/resources/application.properties | 2 +- 5 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/UserController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/User.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java new file mode 100644 index 0000000..9bbfe05 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/UserController.java @@ -0,0 +1,57 @@ +package org.dailystudio.springbootstudy.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dailystudio.springbootstudy.domain.User; +import org.dailystudio.springbootstudy.repository.UserRepository; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("api/user") +@RequiredArgsConstructor +@Slf4j +public class UserController { + + private final UserRepository userRepository; + + + @PostMapping + @Transactional + public ResponseEntity testUser() { + + //저장할 User를 만든다. + User user = new User(); + user.setName("이름"); + user.setEmail("example@gmail.com"); + user.setPass("1234"); + user.setPhone("010-0100-0101"); + + //user를 저장한다. (영속상태로 만들고 flush한다.) + userRepository.save(user); + + //모든 user 정보를 가져온다. + List users = userRepository.findAll(); + + //그중 하나의 user정보를 확인해본다. + User someOne = users.get(0); + log.info("SomeOne email - " + someOne.getEmail()); + log.info("SomeOne name - " + someOne.getName()); + log.info("SomeOne pass - " + someOne.getPass()); + log.info("SomeOne phone - " + someOne.getPhone()); + + //정보를 바꿔보자. + someOne.setName("바뀐이름"); + log.info("SomeOne name - " +someOne.getName()); + + //정보를 지워보자. + userRepository.delete(someOne); + + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/User.java b/src/main/java/org/dailystudio/springbootstudy/domain/User.java new file mode 100644 index 0000000..f941b8e --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/User.java @@ -0,0 +1,36 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; + + +@Entity +@Table(name = "user") +@NoArgsConstructor +@Getter +@Setter +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @NotNull + private String email; + + @NotNull + private String name; + + @NotNull + private String pass; + + @NotNull + private String phone; + +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java new file mode 100644 index 0000000..0ad9916 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/UserRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 0e6aef9..3d82c11 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -11,4 +11,8 @@ spring.datasource.url=jdbc:mysql://localhost/ds?useSSL=false&serverTimezone=UTC ##MYSQL spring.jpa.database=mysql -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect \ No newline at end of file +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect + +## ͺ̽ ڵ +spring.jpa.hibernate.ddl-auto=update +spring.jpa.generate-ddl=true \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 059cf2a..6d7ec57 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ ## properties մϴ. -spring.profiles.active=local +spring.profiles.active=prod ## Ǵ SQL մϴ.