From 15088ebb4e95b7c4c37ebb4cabbe83d8f772bae1 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 26 Mar 2019 01:28:20 +0900 Subject: [PATCH 01/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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/25] =?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 cd2e7edaa8463a5073798c0312fbf95f268bfd7a Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 2 Apr 2019 20:29:09 +0900 Subject: [PATCH 21/25] =?UTF-8?q?QueryDSL=20=EC=84=A4=EC=A0=95=20=EB=B0=8F?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=99=98=EA=B2=BD=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. QueryDSL 의존성설정 2. test core 의존성 설정 3. Q클래스 설정 4. test 코드 추가 --- build.gradle | 75 +++++++++++++---- .../springbootstudy/domain/QStore.java | 41 ++++++++++ .../config/QueryDSLConfig.java | 20 +++++ .../controller/FamilyController.java | 54 ------------- .../controller/MemberController.java | 49 ------------ .../controller/StoreController.java | 17 ++++ .../controller/TeamController.java | 64 --------------- .../springbootstudy/domain/Child.java | 29 ------- .../springbootstudy/domain/Member.java | 42 ---------- .../springbootstudy/domain/Parent.java | 29 ------- .../springbootstudy/domain/Store.java | 30 +++++++ .../springbootstudy/domain/Team.java | 51 ------------ .../dto/child/ChildResDto.java | 15 ---- .../dto/member/MemberSaveReqDto.java | 29 ------- .../springbootstudy/dto/parent/ParentDto.java | 21 ----- .../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/ParentRepository.java | 7 -- ...ldRepository.java => StoreRepository.java} | 4 +- .../repository/TeamRepository.java | 7 -- .../querydsl/StoreRepositorySupport.java | 28 +++++++ .../service/FamilyService.java | 80 ------------------- .../service/MemberService.java | 24 ------ .../springbootstudy/service/TeamService.java | 56 ------------- .../controller/StoreControllerTest.java | 52 ++++++++++++ 28 files changed, 251 insertions(+), 629 deletions(-) create mode 100644 src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/config/QueryDSLConfig.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/MemberController.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/StoreController.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/controller/TeamController.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Child.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Member.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Parent.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Store.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Team.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/member/MemberSaveReqDto.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.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/ParentRepository.java rename src/main/java/org/dailystudio/springbootstudy/repository/{ChildRepository.java => StoreRepository.java} (51%) delete mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/TeamRepository.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java delete mode 100644 src/main/java/org/dailystudio/springbootstudy/service/FamilyService.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 create mode 100644 src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java diff --git a/build.gradle b/build.gradle index 07a0afc..3309015 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,16 @@ -plugins { - id 'org.springframework.boot' version '2.1.3.RELEASE' - id 'java' +buildscript { + ext { + springBootVersion = '2.1.3.RELEASE' + querydslPluginVersion = '1.0.10' + } + repositories { + mavenCentral() + maven { url "https://plugins.gradle.org/m2/" } // plugin 저장소 + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:${querydslPluginVersion}") + } } apply plugin: 'java' @@ -11,27 +21,64 @@ group = 'org.dailystudio' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' + +repositories { + mavenCentral() +} + + configurations { compileOnly { extendsFrom annotationProcessor } } -repositories { - mavenCentral() -} + dependencies { - runtimeOnly('com.h2database:h2') + + compile("com.querydsl:querydsl-jpa") // querydsl + compile("com.querydsl:querydsl-apt") // querydsl + + runtimeOnly('com.h2database:h2')//h2 compile("org.springframework.boot:spring-boot-devtools") - - runtimeOnly 'mysql:mysql-connector-java' - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - - implementation('io.springfox:springfox-swagger2:+') + + runtimeOnly 'mysql:mysql-connector-java'//mysql + implementation 'org.springframework.boot:spring-boot-starter-data-jpa'//jpa + + implementation('io.springfox:springfox-swagger2:+')//swagger implementation('io.springfox:springfox-swagger-ui:+') - - compile "org.projectlombok:lombok:+" + + compile "org.projectlombok:lombok:+"//lombok implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' + + testCompile('org.assertj:assertj-core:3.9.0')//test용 +} + +// querydsl 적용 +apply plugin: "com.ewerk.gradle.plugins.querydsl" // Plugin 적용 +def querydslSrcDir = 'src/main/generated' //QClass 생성 위치 + +querydsl { + library = "com.querydsl:querydsl-apt" + jpa = true + querydslSourcesDir = querydslSrcDir +} + +sourceSets { + main { + java { + srcDirs 'src/main/java', querydslSrcDir + } + } +} + +//JPA Annotation Processor Error를 잡아준다. +compileQuerydsl{ + options.annotationProcessorPath = configurations.querydsl +} + +configurations { + querydsl.extendsFrom compileClasspath } diff --git a/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java b/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java new file mode 100644 index 0000000..ac6b8d0 --- /dev/null +++ b/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java @@ -0,0 +1,41 @@ +package org.dailystudio.springbootstudy.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.Generated; +import com.querydsl.core.types.Path; + + +/** + * QStore is a Querydsl query type for Store + */ +@Generated("com.querydsl.codegen.EntitySerializer") +public class QStore extends EntityPathBase { + + private static final long serialVersionUID = 850959364L; + + public static final QStore store = new QStore("store"); + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + public final StringPath phone = createString("phone"); + + public QStore(String variable) { + super(Store.class, forVariable(variable)); + } + + public QStore(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QStore(PathMetadata metadata) { + super(Store.class, metadata); + } + +} + diff --git a/src/main/java/org/dailystudio/springbootstudy/config/QueryDSLConfig.java b/src/main/java/org/dailystudio/springbootstudy/config/QueryDSLConfig.java new file mode 100644 index 0000000..2406904 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/config/QueryDSLConfig.java @@ -0,0 +1,20 @@ +package org.dailystudio.springbootstudy.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +@Configuration +public class QueryDSLConfig { + + @PersistenceContext + private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java b/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java deleted file mode 100644 index 63e8310..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/controller/FamilyController.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.dailystudio.springbootstudy.controller; - -import lombok.RequiredArgsConstructor; -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; - -@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); -// } -// -// @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/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/StoreController.java b/src/main/java/org/dailystudio/springbootstudy/controller/StoreController.java new file mode 100644 index 0000000..27f058b --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/controller/StoreController.java @@ -0,0 +1,17 @@ +package org.dailystudio.springbootstudy.controller; + +import lombok.RequiredArgsConstructor; +import org.dailystudio.springbootstudy.repository.StoreRepository; +import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/test") +public class StoreController { + + private final StoreRepository storeRepository; + private final StoreRepositorySupport storeRepositorySupport; + +} 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 deleted file mode 100644 index 6eeaff1..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Child.java +++ /dev/null @@ -1,29 +0,0 @@ -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(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 deleted file mode 100644 index fccd8b6..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Parent.java +++ /dev/null @@ -1,29 +0,0 @@ -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/domain/Store.java b/src/main/java/org/dailystudio/springbootstudy/domain/Store.java new file mode 100644 index 0000000..69bf5bf --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Store.java @@ -0,0 +1,30 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; + +@Entity +@Table(name = "store") +@Getter +@NoArgsConstructor +public class Store { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + private String name; + + @NotNull + private String phone; + + @Builder + public Store(String name, String phone){ + this.name=name; + this.phone=phone; + } +} 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 deleted file mode 100644 index 6a13d9a..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/child/ChildResDto.java +++ /dev/null @@ -1,15 +0,0 @@ -//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/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 deleted file mode 100644 index 3b343c0..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/dto/parent/ParentDto.java +++ /dev/null @@ -1,21 +0,0 @@ -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/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/ParentRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java deleted file mode 100644 index 92930a7..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/repository/ParentRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -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/repository/ChildRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/StoreRepository.java similarity index 51% rename from src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java rename to src/main/java/org/dailystudio/springbootstudy/repository/StoreRepository.java index 06d24ee..03152ac 100644 --- a/src/main/java/org/dailystudio/springbootstudy/repository/ChildRepository.java +++ b/src/main/java/org/dailystudio/springbootstudy/repository/StoreRepository.java @@ -1,7 +1,7 @@ package org.dailystudio.springbootstudy.repository; -import org.dailystudio.springbootstudy.domain.Child; +import org.dailystudio.springbootstudy.domain.Store; import org.springframework.data.jpa.repository.JpaRepository; -public interface ChildRepository extends JpaRepository { +public interface StoreRepository 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/repository/querydsl/StoreRepositorySupport.java b/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java new file mode 100644 index 0000000..a4a6e37 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java @@ -0,0 +1,28 @@ +package org.dailystudio.springbootstudy.repository.querydsl; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import org.dailystudio.springbootstudy.domain.Store; +import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static org.dailystudio.springbootstudy.domain.QStore.store; + +@Repository +public class StoreRepositorySupport extends QuerydslRepositorySupport { + + private final JPAQueryFactory jpaQueryFactory; + + public StoreRepositorySupport(JPAQueryFactory jpaQueryFactory){ + super(Store.class); + this.jpaQueryFactory=jpaQueryFactory; + } + + public List findByName(String name){ + return jpaQueryFactory + .selectFrom(store) + .where(store.name.eq(name)) + .fetch(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java b/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java deleted file mode 100644 index ae1f168..0000000 --- a/src/main/java/org/dailystudio/springbootstudy/service/FamilyService.java +++ /dev/null @@ -1,80 +0,0 @@ -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/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/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java new file mode 100644 index 0000000..03fd609 --- /dev/null +++ b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java @@ -0,0 +1,52 @@ +package org.dailystudio.springbootstudy.controller; + +import org.dailystudio.springbootstudy.domain.Store; +import org.dailystudio.springbootstudy.repository.StoreRepository; +import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class StoreControllerTest { + + @Autowired + private StoreRepository storeRepository; + + @Autowired + private StoreRepositorySupport storeRepositorySupport; + + @After + public void tearDown() throws Exception { + storeRepository.deleteAllInBatch(); + } + + @Test + public void 쿼리디에셀_작동테스트() { + //given + String name = "김밥천국"; + String phone = "010-1234-5678"; + + String name1 = "천국김밥"; + String phone1 = "010-5678-1234"; + storeRepository.save(new Store(name, phone)); + storeRepository.save(new Store(name1, phone1)); + + //when + List stores = storeRepositorySupport.findByName(name); + + //then + assertThat(stores.size()).isEqualTo(1); + assertThat(stores.get(0).getName()).isEqualTo(name); + } + +} \ No newline at end of file From eaf2d5fbd62292cd7876faf77d2593ae3cfb9a85 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Tue, 2 Apr 2019 20:57:31 +0900 Subject: [PATCH 22/25] =?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 | 3 ++ .../springbootstudy/domain/QStore.java | 41 ------------------- 2 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java diff --git a/.gitignore b/.gitignore index 63177e3..e2dda84 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +##QueryDSL +generated + HELP.md .gradle /build/ diff --git a/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java b/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java deleted file mode 100644 index ac6b8d0..0000000 --- a/src/main/generated/org/dailystudio/springbootstudy/domain/QStore.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.dailystudio.springbootstudy.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.Generated; -import com.querydsl.core.types.Path; - - -/** - * QStore is a Querydsl query type for Store - */ -@Generated("com.querydsl.codegen.EntitySerializer") -public class QStore extends EntityPathBase { - - private static final long serialVersionUID = 850959364L; - - public static final QStore store = new QStore("store"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - public final StringPath phone = createString("phone"); - - public QStore(String variable) { - super(Store.class, forVariable(variable)); - } - - public QStore(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QStore(PathMetadata metadata) { - super(Store.class, metadata); - } - -} - From 94b9e79c92a530b96830df86070915680c572960 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Thu, 4 Apr 2019 17:49:11 +0900 Subject: [PATCH 23/25] commit --- .../springbootstudy/controller/StoreControllerTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java index 03fd609..570b6d9 100644 --- a/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java +++ b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java @@ -11,7 +11,6 @@ import org.springframework.test.context.junit4.SpringRunner; import java.util.List; -import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; From 268792e83861438f29efa73adab236d63502c7e4 Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 5 Apr 2019 04:03:57 +0900 Subject: [PATCH 24/25] =?UTF-8?q?=EC=96=91=EB=B0=A9=ED=96=A5=20h2=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootstudy/domain/Clerk.java | 23 + .../springbootstudy/domain/Store.java | 6 + .../repository/ClerkRespository.java | 7 + .../resources/application-local.properties | 4 +- src/main/resources/application.properties | 9 +- src/main/resources/import.sql | 452 ++++++++++++++++++ .../controller/StoreControllerTest.java | 19 +- .../springbootstudy/domain/ClerkTest.java | 50 ++ .../springbootstudy/domain/StoreTest.java | 33 ++ 9 files changed, 590 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java create mode 100644 src/main/java/org/dailystudio/springbootstudy/repository/ClerkRespository.java create mode 100644 src/main/resources/import.sql create mode 100644 src/test/java/org/dailystudio/springbootstudy/domain/ClerkTest.java create mode 100644 src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java b/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java new file mode 100644 index 0000000..4d708e4 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java @@ -0,0 +1,23 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Getter; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; + +@Entity +@Table(name = "clerk") +@Getter +public class Clerk { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "clerk_id") + private Long id; + + @NotNull + private String name; + + @ManyToOne(fetch = FetchType.LAZY ) + @JoinColumn(name = "store_id") + private Store store; +} diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Store.java b/src/main/java/org/dailystudio/springbootstudy/domain/Store.java index 69bf5bf..c1f0717 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Store.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Store.java @@ -6,6 +6,8 @@ import javax.persistence.*; import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; @Entity @Table(name = "store") @@ -14,6 +16,7 @@ public class Store { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") private Long id; @NotNull @@ -22,6 +25,9 @@ public class Store { @NotNull private String phone; + @OneToMany(mappedBy = "store") + private List clerks = new ArrayList<>(); + @Builder public Store(String name, String phone){ this.name=name; diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/ClerkRespository.java b/src/main/java/org/dailystudio/springbootstudy/repository/ClerkRespository.java new file mode 100644 index 0000000..f37bc8e --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/ClerkRespository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.Clerk; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ClerkRespository extends JpaRepository { +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 79c4cd0..9808e8e 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -2,4 +2,6 @@ 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 + +spring.jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 059cf2a..e3b6313 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,12 +1,11 @@ ## properties մϴ. spring.profiles.active=local - -## Ǵ SQL մϴ. +# Database spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true -## α մϴ -logging.level.org.hibernate.type=trace -#logging.level.org.hibernate=info \ No newline at end of file +# Log +logging.level.org.hibernate.SQL=DEBUG +logging.level.org.hibernate.type=TRACE \ No newline at end of file diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql new file mode 100644 index 0000000..501e7ee --- /dev/null +++ b/src/main/resources/import.sql @@ -0,0 +1,452 @@ +--상점 50개 더미 데이터 + 점원 400개 더미 데이터 +INSERT INTO store (name, phone) VALUES ('name 001', 'phone 001'); +INSERT INTO store (name, phone) VALUES ('name 002', 'phone 002'); +INSERT INTO store (name, phone) VALUES ('name 003', 'phone 003'); +INSERT INTO store (name, phone) VALUES ('name 004', 'phone 004'); +INSERT INTO store (name, phone) VALUES ('name 005', 'phone 005'); +INSERT INTO store (name, phone) VALUES ('name 006', 'phone 006'); +INSERT INTO store (name, phone) VALUES ('name 007', 'phone 007'); +INSERT INTO store (name, phone) VALUES ('name 008', 'phone 008'); +INSERT INTO store (name, phone) VALUES ('name 009', 'phone 009'); +INSERT INTO store (name, phone) VALUES ('name 010', 'phone 010'); +INSERT INTO store (name, phone) VALUES ('name 011', 'phone 011'); +INSERT INTO store (name, phone) VALUES ('name 012', 'phone 012'); +INSERT INTO store (name, phone) VALUES ('name 013', 'phone 013'); +INSERT INTO store (name, phone) VALUES ('name 014', 'phone 014'); +INSERT INTO store (name, phone) VALUES ('name 015', 'phone 015'); +INSERT INTO store (name, phone) VALUES ('name 016', 'phone 016'); +INSERT INTO store (name, phone) VALUES ('name 017', 'phone 017'); +INSERT INTO store (name, phone) VALUES ('name 018', 'phone 018'); +INSERT INTO store (name, phone) VALUES ('name 019', 'phone 019'); +INSERT INTO store (name, phone) VALUES ('name 020', 'phone 020'); +INSERT INTO store (name, phone) VALUES ('name 021', 'phone 021'); +INSERT INTO store (name, phone) VALUES ('name 022', 'phone 022'); +INSERT INTO store (name, phone) VALUES ('name 023', 'phone 023'); +INSERT INTO store (name, phone) VALUES ('name 024', 'phone 024'); +INSERT INTO store (name, phone) VALUES ('name 025', 'phone 025'); +INSERT INTO store (name, phone) VALUES ('name 026', 'phone 026'); +INSERT INTO store (name, phone) VALUES ('name 027', 'phone 027'); +INSERT INTO store (name, phone) VALUES ('name 028', 'phone 028'); +INSERT INTO store (name, phone) VALUES ('name 029', 'phone 029'); +INSERT INTO store (name, phone) VALUES ('name 030', 'phone 030'); +INSERT INTO store (name, phone) VALUES ('name 031', 'phone 031'); +INSERT INTO store (name, phone) VALUES ('name 032', 'phone 032'); +INSERT INTO store (name, phone) VALUES ('name 033', 'phone 033'); +INSERT INTO store (name, phone) VALUES ('name 034', 'phone 034'); +INSERT INTO store (name, phone) VALUES ('name 035', 'phone 035'); +INSERT INTO store (name, phone) VALUES ('name 036', 'phone 036'); +INSERT INTO store (name, phone) VALUES ('name 037', 'phone 037'); +INSERT INTO store (name, phone) VALUES ('name 038', 'phone 038'); +INSERT INTO store (name, phone) VALUES ('name 039', 'phone 039'); +INSERT INTO store (name, phone) VALUES ('name 040', 'phone 040'); +INSERT INTO store (name, phone) VALUES ('name 041', 'phone 041'); +INSERT INTO store (name, phone) VALUES ('name 042', 'phone 042'); +INSERT INTO store (name, phone) VALUES ('name 043', 'phone 043'); +INSERT INTO store (name, phone) VALUES ('name 044', 'phone 044'); +INSERT INTO store (name, phone) VALUES ('name 045', 'phone 045'); +INSERT INTO store (name, phone) VALUES ('name 046', 'phone 046'); +INSERT INTO store (name, phone) VALUES ('name 047', 'phone 047'); +INSERT INTO store (name, phone) VALUES ('name 048', 'phone 048'); +INSERT INTO store (name, phone) VALUES ('name 049', 'phone 049'); +INSERT INTO store (name, phone) VALUES ('name 050', 'phone 050'); + +INSERT INTO clerk (name, store_id) VALUES ('name 0001', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0002', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0003', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0004', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0005', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0006', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0007', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0008', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0009', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0010', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0011', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0012', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0013', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0014', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0015', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0016', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0017', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0018', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0019', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0020', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0021', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0022', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0023', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0024', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0025', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0026', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0027', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0028', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0029', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0030', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0031', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0032', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0033', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0034', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0035', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0036', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0037', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0038', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0039', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0040', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0041', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0042', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0043', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0044', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0045', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0046', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0047', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0048', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0049', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0050', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0051', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0052', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0053', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0054', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0055', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0056', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0057', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0058', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0059', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0060', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0061', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0062', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0063', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0064', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0065', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0066', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0067', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0068', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0069', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0070', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0071', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0072', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0073', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0074', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0075', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0076', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0077', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0078', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0079', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0080', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0081', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0082', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0083', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0084', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0085', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0086', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0087', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0088', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0089', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0090', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0091', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0092', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0093', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0094', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0095', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0096', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0097', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0098', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0099', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0100', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0101', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0102', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0103', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0104', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0105', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0106', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0107', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0108', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0109', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0110', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0111', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0112', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0113', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0114', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0115', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0116', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0117', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0118', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0119', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0120', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0121', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0122', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0123', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0124', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0125', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0126', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0127', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0128', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0129', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0130', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0131', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0132', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0133', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0134', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0135', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0136', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0137', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0138', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0139', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0140', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0141', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0142', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0143', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0144', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0145', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0146', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0147', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0148', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0149', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0150', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0151', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0152', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0153', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0154', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0155', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0156', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0157', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0158', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0159', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0160', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0161', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0162', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0163', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0164', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0165', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0166', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0167', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0168', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0169', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0170', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0171', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0172', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0173', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0174', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0175', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0176', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0177', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0178', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0179', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0180', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0181', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0182', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0183', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0184', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0185', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0186', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0187', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0188', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0189', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0190', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0191', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0192', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0193', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0194', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0195', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0196', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0197', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0198', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0199', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0200', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0201', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0202', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0203', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0204', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0205', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0206', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0207', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0208', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0209', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0210', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0211', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0212', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0213', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0214', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0215', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0216', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0217', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0218', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0219', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0220', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0221', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0222', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0223', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0224', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0225', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0226', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0227', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0228', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0229', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0230', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0231', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0232', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0233', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0234', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0235', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0236', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0237', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0238', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0239', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0240', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0241', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0242', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0243', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0244', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0245', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0246', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0247', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0248', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0249', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0250', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0251', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0252', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0253', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0254', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0255', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0256', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0257', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0258', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0259', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0260', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0261', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0262', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0263', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0264', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0265', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0266', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0267', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0268', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0269', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0270', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0271', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0272', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0273', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0274', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0275', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0276', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0277', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0278', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0279', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0280', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0281', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0282', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0283', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0284', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0285', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0286', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0287', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0288', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0289', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0290', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0291', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0292', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0293', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0294', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0295', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0296', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0297', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0298', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0299', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0300', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0301', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0302', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0303', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0304', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0305', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0306', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0307', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0308', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0309', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0310', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0311', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0312', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0313', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0314', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0315', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0316', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0317', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0318', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0319', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0320', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0321', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0322', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0323', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0324', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0325', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0326', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0327', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0328', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0329', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0330', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0331', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0332', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0333', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0334', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0335', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0336', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0337', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0338', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0339', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0340', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0341', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0342', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0343', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0344', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0345', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0346', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0347', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0348', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0349', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0350', 50); +INSERT INTO clerk (name, store_id) VALUES ('name 0351', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0352', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0353', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0354', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0355', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0356', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0357', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0358', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0359', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0360', 10); +INSERT INTO clerk (name, store_id) VALUES ('name 0361', 11); +INSERT INTO clerk (name, store_id) VALUES ('name 0362', 12); +INSERT INTO clerk (name, store_id) VALUES ('name 0363', 13); +INSERT INTO clerk (name, store_id) VALUES ('name 0364', 14); +INSERT INTO clerk (name, store_id) VALUES ('name 0365', 15); +INSERT INTO clerk (name, store_id) VALUES ('name 0366', 16); +INSERT INTO clerk (name, store_id) VALUES ('name 0367', 17); +INSERT INTO clerk (name, store_id) VALUES ('name 0368', 18); +INSERT INTO clerk (name, store_id) VALUES ('name 0369', 19); +INSERT INTO clerk (name, store_id) VALUES ('name 0370', 20); +INSERT INTO clerk (name, store_id) VALUES ('name 0371', 21); +INSERT INTO clerk (name, store_id) VALUES ('name 0372', 22); +INSERT INTO clerk (name, store_id) VALUES ('name 0373', 23); +INSERT INTO clerk (name, store_id) VALUES ('name 0374', 24); +INSERT INTO clerk (name, store_id) VALUES ('name 0375', 25); +INSERT INTO clerk (name, store_id) VALUES ('name 0376', 26); +INSERT INTO clerk (name, store_id) VALUES ('name 0377', 27); +INSERT INTO clerk (name, store_id) VALUES ('name 0378', 28); +INSERT INTO clerk (name, store_id) VALUES ('name 0379', 29); +INSERT INTO clerk (name, store_id) VALUES ('name 0380', 30); +INSERT INTO clerk (name, store_id) VALUES ('name 0381', 31); +INSERT INTO clerk (name, store_id) VALUES ('name 0382', 32); +INSERT INTO clerk (name, store_id) VALUES ('name 0383', 33); +INSERT INTO clerk (name, store_id) VALUES ('name 0384', 34); +INSERT INTO clerk (name, store_id) VALUES ('name 0385', 35); +INSERT INTO clerk (name, store_id) VALUES ('name 0386', 36); +INSERT INTO clerk (name, store_id) VALUES ('name 0387', 37); +INSERT INTO clerk (name, store_id) VALUES ('name 0388', 38); +INSERT INTO clerk (name, store_id) VALUES ('name 0389', 39); +INSERT INTO clerk (name, store_id) VALUES ('name 0390', 40); +INSERT INTO clerk (name, store_id) VALUES ('name 0391', 41); +INSERT INTO clerk (name, store_id) VALUES ('name 0392', 42); +INSERT INTO clerk (name, store_id) VALUES ('name 0393', 43); +INSERT INTO clerk (name, store_id) VALUES ('name 0394', 44); +INSERT INTO clerk (name, store_id) VALUES ('name 0395', 45); +INSERT INTO clerk (name, store_id) VALUES ('name 0396', 46); +INSERT INTO clerk (name, store_id) VALUES ('name 0397', 47); +INSERT INTO clerk (name, store_id) VALUES ('name 0398', 48); +INSERT INTO clerk (name, store_id) VALUES ('name 0399', 49); +INSERT INTO clerk (name, store_id) VALUES ('name 0400', 50); \ No newline at end of file diff --git a/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java index 570b6d9..b28d178 100644 --- a/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java +++ b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java @@ -4,6 +4,7 @@ import org.dailystudio.springbootstudy.repository.StoreRepository; import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -24,13 +25,8 @@ public class StoreControllerTest { @Autowired private StoreRepositorySupport storeRepositorySupport; - @After - public void tearDown() throws Exception { - storeRepository.deleteAllInBatch(); - } - - @Test - public void 쿼리디에셀_작동테스트() { + @Before + public void setUp() throws Exception{ //given String name = "김밥천국"; String phone = "010-1234-5678"; @@ -39,7 +35,16 @@ public void tearDown() throws Exception { String phone1 = "010-5678-1234"; storeRepository.save(new Store(name, phone)); storeRepository.save(new Store(name1, phone1)); + } + @After + public void tearDown() throws Exception { + storeRepository.deleteAllInBatch(); + } + + @Test + public void 쿼리디에셀_작동테스트() { + String name = "김밥천국"; //when List stores = storeRepositorySupport.findByName(name); diff --git a/src/test/java/org/dailystudio/springbootstudy/domain/ClerkTest.java b/src/test/java/org/dailystudio/springbootstudy/domain/ClerkTest.java new file mode 100644 index 0000000..1b20fc8 --- /dev/null +++ b/src/test/java/org/dailystudio/springbootstudy/domain/ClerkTest.java @@ -0,0 +1,50 @@ +package org.dailystudio.springbootstudy.domain; + +import org.dailystudio.springbootstudy.repository.ClerkRespository; +import org.dailystudio.springbootstudy.repository.StoreRepository; +import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ClerkTest { + + + @Autowired + private StoreRepository storeRepository; + + @Autowired + private StoreRepositorySupport storeRepositorySupport; + + @Autowired + private ClerkRespository clerkRespository; + + @Before + public void setUp() throws Exception { + + } + + @Test + public void 모든_점원정보_가져오기() { + List clerks = clerkRespository.findAll(); + int size = clerks.size(); + assertThat(size).isEqualTo(400); + } + + @After + public void tearDown() throws Exception { + clerkRespository.deleteAllInBatch(); + storeRepository.deleteAllInBatch(); + } +} \ No newline at end of file diff --git a/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java b/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java new file mode 100644 index 0000000..fdaa2cc --- /dev/null +++ b/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java @@ -0,0 +1,33 @@ +package org.dailystudio.springbootstudy.domain; + +import org.dailystudio.springbootstudy.repository.StoreRepository; +import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; +import org.junit.After; +import org.junit.Before; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.junit.Assert.*; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class StoreTest { + + @Autowired + private StoreRepository storeRepository; + + @Autowired + private StoreRepositorySupport storeRepositorySupport; + + + @Before + public void setUp() throws Exception { + + } + + @After + public void tearDown() throws Exception { + } +} \ No newline at end of file From e07b2614d52b983606b7702c7ca05c3575f547eb Mon Sep 17 00:00:00 2001 From: pci2676 Date: Fri, 5 Apr 2019 05:17:35 +0900 Subject: [PATCH 25/25] =?UTF-8?q?querydsl=EC=9D=84=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=9C=20n+1=20=EB=A1=9C=EB=94=A9=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EA=B7=B9=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 더미 데이터 추가 2. 예제 추가 --- .../springbootstudy/domain/Clerk.java | 2 +- .../springbootstudy/dto/ClerkNameDto.java | 14 + .../querydsl/StoreRepositorySupport.java | 12 + src/main/resources/application.properties | 6 +- src/main/resources/import.sql | 786 ++++++++---------- .../springbootstudy/domain/StoreTest.java | 59 +- 6 files changed, 441 insertions(+), 438 deletions(-) create mode 100644 src/main/java/org/dailystudio/springbootstudy/dto/ClerkNameDto.java diff --git a/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java b/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java index 4d708e4..07e45f7 100644 --- a/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java @@ -17,7 +17,7 @@ public class Clerk { @NotNull private String name; - @ManyToOne(fetch = FetchType.LAZY ) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "store_id") private Store store; } diff --git a/src/main/java/org/dailystudio/springbootstudy/dto/ClerkNameDto.java b/src/main/java/org/dailystudio/springbootstudy/dto/ClerkNameDto.java new file mode 100644 index 0000000..4c73846 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/dto/ClerkNameDto.java @@ -0,0 +1,14 @@ +package org.dailystudio.springbootstudy.dto; + +import lombok.Getter; +import org.dailystudio.springbootstudy.domain.Clerk; + +@Getter +public class ClerkNameDto { + + private String name; + + public ClerkNameDto(Clerk clerk){ + this.name = clerk.getName(); + } +} diff --git a/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java b/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java index a4a6e37..968dd01 100644 --- a/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java +++ b/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java @@ -1,6 +1,8 @@ package org.dailystudio.springbootstudy.repository.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; +import org.dailystudio.springbootstudy.domain.QClerk; +import org.dailystudio.springbootstudy.domain.QStore; import org.dailystudio.springbootstudy.domain.Store; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; import org.springframework.stereotype.Repository; @@ -25,4 +27,14 @@ public List findByName(String name){ .where(store.name.eq(name)) .fetch(); } + + public List findAllEager(){ + QStore store = QStore.store; + QClerk clerk = QClerk.clerk; + + return from(store) + .leftJoin(store.clerks,clerk).fetchJoin() + .distinct() + .fetch(); + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e3b6313..43730c6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,9 +3,9 @@ spring.profiles.active=local # Database spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true +#spring.jpa.properties.hibernate.format_sql=true # Log -logging.level.org.hibernate.SQL=DEBUG -logging.level.org.hibernate.type=TRACE \ No newline at end of file +#logging.level.org.hibernate.SQL=debug +logging.level.org.hibernate.type=debug \ No newline at end of file diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql index 501e7ee..4772f7c 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -1,4 +1,4 @@ ---상점 50개 더미 데이터 + 점원 400개 더미 데이터 +--상점 10개 더미 데이터 + 점원 360개 더미 데이터 = 1상가 36점원 INSERT INTO store (name, phone) VALUES ('name 001', 'phone 001'); INSERT INTO store (name, phone) VALUES ('name 002', 'phone 002'); INSERT INTO store (name, phone) VALUES ('name 003', 'phone 003'); @@ -8,47 +8,7 @@ INSERT INTO store (name, phone) VALUES ('name 006', 'phone 006'); INSERT INTO store (name, phone) VALUES ('name 007', 'phone 007'); INSERT INTO store (name, phone) VALUES ('name 008', 'phone 008'); INSERT INTO store (name, phone) VALUES ('name 009', 'phone 009'); -INSERT INTO store (name, phone) VALUES ('name 010', 'phone 010'); -INSERT INTO store (name, phone) VALUES ('name 011', 'phone 011'); -INSERT INTO store (name, phone) VALUES ('name 012', 'phone 012'); -INSERT INTO store (name, phone) VALUES ('name 013', 'phone 013'); -INSERT INTO store (name, phone) VALUES ('name 014', 'phone 014'); -INSERT INTO store (name, phone) VALUES ('name 015', 'phone 015'); -INSERT INTO store (name, phone) VALUES ('name 016', 'phone 016'); -INSERT INTO store (name, phone) VALUES ('name 017', 'phone 017'); -INSERT INTO store (name, phone) VALUES ('name 018', 'phone 018'); -INSERT INTO store (name, phone) VALUES ('name 019', 'phone 019'); -INSERT INTO store (name, phone) VALUES ('name 020', 'phone 020'); -INSERT INTO store (name, phone) VALUES ('name 021', 'phone 021'); -INSERT INTO store (name, phone) VALUES ('name 022', 'phone 022'); -INSERT INTO store (name, phone) VALUES ('name 023', 'phone 023'); -INSERT INTO store (name, phone) VALUES ('name 024', 'phone 024'); -INSERT INTO store (name, phone) VALUES ('name 025', 'phone 025'); -INSERT INTO store (name, phone) VALUES ('name 026', 'phone 026'); -INSERT INTO store (name, phone) VALUES ('name 027', 'phone 027'); -INSERT INTO store (name, phone) VALUES ('name 028', 'phone 028'); -INSERT INTO store (name, phone) VALUES ('name 029', 'phone 029'); -INSERT INTO store (name, phone) VALUES ('name 030', 'phone 030'); -INSERT INTO store (name, phone) VALUES ('name 031', 'phone 031'); -INSERT INTO store (name, phone) VALUES ('name 032', 'phone 032'); -INSERT INTO store (name, phone) VALUES ('name 033', 'phone 033'); -INSERT INTO store (name, phone) VALUES ('name 034', 'phone 034'); -INSERT INTO store (name, phone) VALUES ('name 035', 'phone 035'); -INSERT INTO store (name, phone) VALUES ('name 036', 'phone 036'); -INSERT INTO store (name, phone) VALUES ('name 037', 'phone 037'); -INSERT INTO store (name, phone) VALUES ('name 038', 'phone 038'); -INSERT INTO store (name, phone) VALUES ('name 039', 'phone 039'); -INSERT INTO store (name, phone) VALUES ('name 040', 'phone 040'); -INSERT INTO store (name, phone) VALUES ('name 041', 'phone 041'); -INSERT INTO store (name, phone) VALUES ('name 042', 'phone 042'); -INSERT INTO store (name, phone) VALUES ('name 043', 'phone 043'); -INSERT INTO store (name, phone) VALUES ('name 044', 'phone 044'); -INSERT INTO store (name, phone) VALUES ('name 045', 'phone 045'); -INSERT INTO store (name, phone) VALUES ('name 046', 'phone 046'); -INSERT INTO store (name, phone) VALUES ('name 047', 'phone 047'); -INSERT INTO store (name, phone) VALUES ('name 048', 'phone 048'); -INSERT INTO store (name, phone) VALUES ('name 049', 'phone 049'); -INSERT INTO store (name, phone) VALUES ('name 050', 'phone 050'); + INSERT INTO clerk (name, store_id) VALUES ('name 0001', 1); INSERT INTO clerk (name, store_id) VALUES ('name 0002', 2); @@ -59,394 +19,354 @@ INSERT INTO clerk (name, store_id) VALUES ('name 0006', 6); INSERT INTO clerk (name, store_id) VALUES ('name 0007', 7); INSERT INTO clerk (name, store_id) VALUES ('name 0008', 8); INSERT INTO clerk (name, store_id) VALUES ('name 0009', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0010', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0011', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0012', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0013', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0014', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0015', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0016', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0017', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0018', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0019', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0020', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0021', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0022', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0023', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0024', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0025', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0026', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0027', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0028', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0029', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0030', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0031', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0032', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0033', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0034', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0035', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0036', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0037', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0038', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0039', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0040', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0041', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0042', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0043', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0044', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0045', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0046', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0047', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0048', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0049', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0050', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0051', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0052', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0053', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0054', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0055', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0056', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0057', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0058', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0059', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0060', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0061', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0062', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0063', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0064', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0065', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0066', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0067', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0068', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0069', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0070', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0071', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0072', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0073', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0074', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0075', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0076', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0077', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0078', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0079', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0080', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0081', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0082', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0083', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0084', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0085', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0086', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0087', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0088', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0089', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0090', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0091', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0092', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0093', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0094', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0095', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0096', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0097', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0098', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0099', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0100', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0101', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0102', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0103', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0104', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0105', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0106', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0107', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0108', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0109', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0110', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0111', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0112', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0113', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0114', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0115', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0116', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0117', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0118', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0119', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0120', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0121', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0122', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0123', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0124', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0125', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0126', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0127', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0128', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0129', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0130', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0131', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0132', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0133', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0134', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0135', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0136', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0137', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0138', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0139', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0140', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0141', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0142', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0143', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0144', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0145', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0146', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0147', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0148', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0149', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0150', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0151', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0152', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0153', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0154', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0155', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0156', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0157', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0158', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0159', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0160', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0161', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0162', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0163', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0164', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0165', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0166', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0167', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0168', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0169', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0170', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0171', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0172', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0173', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0174', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0175', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0176', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0177', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0178', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0179', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0180', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0181', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0182', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0183', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0184', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0185', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0186', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0187', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0188', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0189', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0190', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0191', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0192', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0193', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0194', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0195', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0196', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0197', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0198', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0199', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0200', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0201', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0202', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0203', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0204', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0205', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0206', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0207', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0208', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0209', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0210', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0211', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0212', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0213', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0214', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0215', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0216', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0217', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0218', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0219', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0220', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0221', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0222', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0223', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0224', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0225', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0226', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0227', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0228', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0229', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0230', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0231', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0232', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0233', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0234', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0235', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0236', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0237', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0238', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0239', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0240', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0241', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0242', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0243', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0244', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0245', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0246', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0247', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0248', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0249', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0250', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0251', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0252', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0253', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0254', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0255', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0256', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0257', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0258', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0259', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0260', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0261', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0262', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0263', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0264', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0265', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0266', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0267', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0268', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0269', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0270', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0271', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0272', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0273', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0274', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0275', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0276', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0277', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0278', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0279', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0280', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0281', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0282', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0283', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0284', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0285', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0286', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0287', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0288', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0289', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0290', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0291', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0292', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0293', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0294', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0295', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0296', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0297', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0298', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0299', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0300', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0301', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0302', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0303', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0304', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0305', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0306', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0307', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0308', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0309', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0310', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0311', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0312', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0313', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0314', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0315', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0316', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0317', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0318', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0319', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0320', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0321', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0322', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0323', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0324', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0325', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0326', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0327', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0328', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0329', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0330', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0331', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0332', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0333', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0334', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0335', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0336', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0337', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0338', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0339', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0340', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0341', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0342', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0343', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0344', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0345', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0346', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0347', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0348', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0349', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0350', 50); -INSERT INTO clerk (name, store_id) VALUES ('name 0351', 1); -INSERT INTO clerk (name, store_id) VALUES ('name 0352', 2); -INSERT INTO clerk (name, store_id) VALUES ('name 0353', 3); -INSERT INTO clerk (name, store_id) VALUES ('name 0354', 4); -INSERT INTO clerk (name, store_id) VALUES ('name 0355', 5); -INSERT INTO clerk (name, store_id) VALUES ('name 0356', 6); -INSERT INTO clerk (name, store_id) VALUES ('name 0357', 7); -INSERT INTO clerk (name, store_id) VALUES ('name 0358', 8); -INSERT INTO clerk (name, store_id) VALUES ('name 0359', 9); -INSERT INTO clerk (name, store_id) VALUES ('name 0360', 10); -INSERT INTO clerk (name, store_id) VALUES ('name 0361', 11); -INSERT INTO clerk (name, store_id) VALUES ('name 0362', 12); -INSERT INTO clerk (name, store_id) VALUES ('name 0363', 13); -INSERT INTO clerk (name, store_id) VALUES ('name 0364', 14); -INSERT INTO clerk (name, store_id) VALUES ('name 0365', 15); -INSERT INTO clerk (name, store_id) VALUES ('name 0366', 16); -INSERT INTO clerk (name, store_id) VALUES ('name 0367', 17); -INSERT INTO clerk (name, store_id) VALUES ('name 0368', 18); -INSERT INTO clerk (name, store_id) VALUES ('name 0369', 19); -INSERT INTO clerk (name, store_id) VALUES ('name 0370', 20); -INSERT INTO clerk (name, store_id) VALUES ('name 0371', 21); -INSERT INTO clerk (name, store_id) VALUES ('name 0372', 22); -INSERT INTO clerk (name, store_id) VALUES ('name 0373', 23); -INSERT INTO clerk (name, store_id) VALUES ('name 0374', 24); -INSERT INTO clerk (name, store_id) VALUES ('name 0375', 25); -INSERT INTO clerk (name, store_id) VALUES ('name 0376', 26); -INSERT INTO clerk (name, store_id) VALUES ('name 0377', 27); -INSERT INTO clerk (name, store_id) VALUES ('name 0378', 28); -INSERT INTO clerk (name, store_id) VALUES ('name 0379', 29); -INSERT INTO clerk (name, store_id) VALUES ('name 0380', 30); -INSERT INTO clerk (name, store_id) VALUES ('name 0381', 31); -INSERT INTO clerk (name, store_id) VALUES ('name 0382', 32); -INSERT INTO clerk (name, store_id) VALUES ('name 0383', 33); -INSERT INTO clerk (name, store_id) VALUES ('name 0384', 34); -INSERT INTO clerk (name, store_id) VALUES ('name 0385', 35); -INSERT INTO clerk (name, store_id) VALUES ('name 0386', 36); -INSERT INTO clerk (name, store_id) VALUES ('name 0387', 37); -INSERT INTO clerk (name, store_id) VALUES ('name 0388', 38); -INSERT INTO clerk (name, store_id) VALUES ('name 0389', 39); -INSERT INTO clerk (name, store_id) VALUES ('name 0390', 40); -INSERT INTO clerk (name, store_id) VALUES ('name 0391', 41); -INSERT INTO clerk (name, store_id) VALUES ('name 0392', 42); -INSERT INTO clerk (name, store_id) VALUES ('name 0393', 43); -INSERT INTO clerk (name, store_id) VALUES ('name 0394', 44); -INSERT INTO clerk (name, store_id) VALUES ('name 0395', 45); -INSERT INTO clerk (name, store_id) VALUES ('name 0396', 46); -INSERT INTO clerk (name, store_id) VALUES ('name 0397', 47); -INSERT INTO clerk (name, store_id) VALUES ('name 0398', 48); -INSERT INTO clerk (name, store_id) VALUES ('name 0399', 49); -INSERT INTO clerk (name, store_id) VALUES ('name 0400', 50); \ No newline at end of file +INSERT INTO clerk (name, store_id) VALUES ('name 0010', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0011', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0012', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0013', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0014', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0015', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0016', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0017', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0018', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0019', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0020', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0021', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0022', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0023', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0024', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0025', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0026', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0027', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0028', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0029', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0030', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0031', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0032', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0033', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0034', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0035', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0036', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0037', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0038', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0039', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0040', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0041', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0042', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0043', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0044', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0045', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0046', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0047', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0048', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0049', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0050', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0051', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0052', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0053', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0054', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0055', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0056', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0057', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0058', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0059', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0060', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0061', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0062', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0063', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0064', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0065', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0066', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0067', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0068', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0069', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0070', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0071', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0072', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0073', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0074', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0075', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0076', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0077', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0078', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0079', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0080', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0081', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0082', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0083', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0084', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0085', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0086', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0087', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0088', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0089', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0090', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0091', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0092', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0093', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0094', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0095', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0096', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0097', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0098', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0099', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0100', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0101', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0102', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0103', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0104', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0105', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0106', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0107', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0108', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0109', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0110', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0111', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0112', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0113', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0114', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0115', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0116', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0117', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0118', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0119', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0120', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0121', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0122', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0123', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0124', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0125', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0126', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0127', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0128', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0129', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0130', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0131', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0132', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0133', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0134', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0135', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0136', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0137', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0138', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0139', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0140', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0141', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0142', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0143', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0144', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0145', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0146', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0147', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0148', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0149', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0150', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0151', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0152', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0153', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0154', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0155', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0156', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0157', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0158', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0159', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0160', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0161', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0162', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0163', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0164', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0165', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0166', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0167', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0168', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0169', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0170', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0171', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0172', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0173', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0174', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0175', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0176', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0177', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0178', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0179', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0180', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0181', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0182', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0183', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0184', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0185', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0186', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0187', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0188', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0189', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0190', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0191', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0192', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0193', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0194', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0195', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0196', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0197', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0198', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0199', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0200', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0201', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0202', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0203', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0204', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0205', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0206', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0207', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0208', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0209', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0210', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0211', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0212', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0213', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0214', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0215', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0216', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0217', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0218', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0219', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0220', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0221', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0222', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0223', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0224', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0225', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0226', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0227', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0228', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0229', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0230', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0231', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0232', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0233', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0234', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0235', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0236', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0237', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0238', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0239', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0240', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0241', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0242', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0243', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0244', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0245', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0246', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0247', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0248', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0249', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0250', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0251', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0252', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0253', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0254', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0255', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0256', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0257', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0258', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0259', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0260', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0261', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0262', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0263', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0264', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0265', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0266', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0267', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0268', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0269', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0270', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0271', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0272', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0273', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0274', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0275', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0276', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0277', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0278', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0279', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0280', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0281', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0282', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0283', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0284', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0285', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0286', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0287', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0288', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0289', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0290', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0291', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0292', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0293', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0294', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0295', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0296', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0297', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0298', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0299', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0300', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0301', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0302', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0303', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0304', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0305', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0306', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0307', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0308', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0309', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0310', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0311', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0312', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0313', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0314', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0315', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0316', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0317', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0318', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0319', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0320', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0321', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0322', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0323', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0324', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0325', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0326', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0327', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0328', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0329', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0330', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0331', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0332', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0333', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0334', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0335', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0336', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0337', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0338', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0339', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0340', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0341', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0342', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0343', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0344', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0345', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0346', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0347', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0348', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0349', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0350', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0351', 9); +INSERT INTO clerk (name, store_id) VALUES ('name 0352', 1); +INSERT INTO clerk (name, store_id) VALUES ('name 0353', 2); +INSERT INTO clerk (name, store_id) VALUES ('name 0354', 3); +INSERT INTO clerk (name, store_id) VALUES ('name 0355', 4); +INSERT INTO clerk (name, store_id) VALUES ('name 0356', 5); +INSERT INTO clerk (name, store_id) VALUES ('name 0357', 6); +INSERT INTO clerk (name, store_id) VALUES ('name 0358', 7); +INSERT INTO clerk (name, store_id) VALUES ('name 0359', 8); +INSERT INTO clerk (name, store_id) VALUES ('name 0360', 9); diff --git a/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java b/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java index fdaa2cc..d02b126 100644 --- a/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java +++ b/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java @@ -1,15 +1,23 @@ package org.dailystudio.springbootstudy.domain; +import org.dailystudio.springbootstudy.dto.ClerkNameDto; +import org.dailystudio.springbootstudy.repository.ClerkRespository; import org.dailystudio.springbootstudy.repository.StoreRepository; import org.dailystudio.springbootstudy.repository.querydsl.StoreRepositorySupport; import org.junit.After; import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; -import static org.junit.Assert.*; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) @SpringBootTest @@ -18,6 +26,9 @@ public class StoreTest { @Autowired private StoreRepository storeRepository; + @Autowired + private ClerkRespository clerkRespository; + @Autowired private StoreRepositorySupport storeRepositorySupport; @@ -27,7 +38,53 @@ public void setUp() throws Exception { } + @Test + @Transactional + public void 상점에서_점원들_불러오기_엔플러스일문제발생() { + List stores = storeRepository.findAll(); + + + List names = new ArrayList<>(); + + for(Store store : stores){ + List eachNames = store.getClerks() + .stream() + .map(Clerk::getName) + .collect(Collectors.toList()); + names.addAll(eachNames); + } + + + int size = names.size(); + + assertThat(size).isEqualTo(360); + } + + @Test + @Transactional + public void 상점에서_점원들_불러오기() { + List stores = storeRepositorySupport.findAllEager(); +// Store store = storeRepository.getOne(1L); + + List names = new ArrayList<>(); + + for(Store store : stores){ + List eachNames = store.getClerks() + .stream() + .map(Clerk::getName) + .collect(Collectors.toList()); + names.addAll(eachNames); + } + + + int size = names.size(); + + assertThat(size).isEqualTo(360); + } + @After public void tearDown() throws Exception { + clerkRespository.deleteAllInBatch(); + storeRepository.deleteAllInBatch(); } } \ No newline at end of file