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/build.gradle b/build.gradle index 3f2652e..3309015 100644 --- a/build.gradle +++ b/build.gradle @@ -1,27 +1,84 @@ -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' +apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'org.dailystudio' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' + +repositories { + mavenCentral() +} + + configurations { compileOnly { extendsFrom annotationProcessor } } -repositories { - mavenCentral() -} + dependencies { + + 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'//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:+"//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' + + 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/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/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/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/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/domain/Clerk.java b/src/main/java/org/dailystudio/springbootstudy/domain/Clerk.java new file mode 100644 index 0000000..07e45f7 --- /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 new file mode 100644 index 0000000..c1f0717 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/domain/Store.java @@ -0,0 +1,36 @@ +package org.dailystudio.springbootstudy.domain; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "store") +@Getter +@NoArgsConstructor +public class Store { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @NotNull + private String name; + + @NotNull + private String phone; + + @OneToMany(mappedBy = "store") + private List clerks = new ArrayList<>(); + + @Builder + public Store(String name, String phone){ + this.name=name; + this.phone=phone; + } +} 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/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/java/org/dailystudio/springbootstudy/repository/StoreRepository.java b/src/main/java/org/dailystudio/springbootstudy/repository/StoreRepository.java new file mode 100644 index 0000000..03152ac --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/StoreRepository.java @@ -0,0 +1,7 @@ +package org.dailystudio.springbootstudy.repository; + +import org.dailystudio.springbootstudy.domain.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoreRepository 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..968dd01 --- /dev/null +++ b/src/main/java/org/dailystudio/springbootstudy/repository/querydsl/StoreRepositorySupport.java @@ -0,0 +1,40 @@ +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; + +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(); + } + + 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-local.properties b/src/main/resources/application-local.properties new file mode 100644 index 0000000..9808e8e --- /dev/null +++ b/src/main/resources/application-local.properties @@ -0,0 +1,7 @@ +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=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-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 8b13789..43730c6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,11 @@ +## properties մϴ. +spring.profiles.active=local +# Database +spring.jpa.show-sql=true +#spring.jpa.properties.hibernate.format_sql=true + + +# Log +#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 new file mode 100644 index 0000000..4772f7c --- /dev/null +++ b/src/main/resources/import.sql @@ -0,0 +1,372 @@ +--상점 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'); +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 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', 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/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() { + } } 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..b28d178 --- /dev/null +++ b/src/test/java/org/dailystudio/springbootstudy/controller/StoreControllerTest.java @@ -0,0 +1,56 @@ +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.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.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class StoreControllerTest { + + @Autowired + private StoreRepository storeRepository; + + @Autowired + private StoreRepositorySupport storeRepositorySupport; + + @Before + public void setUp() throws Exception{ + //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)); + } + + @After + public void tearDown() throws Exception { + storeRepository.deleteAllInBatch(); + } + + @Test + public void 쿼리디에셀_작동테스트() { + String name = "김밥천국"; + //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 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..d02b126 --- /dev/null +++ b/src/test/java/org/dailystudio/springbootstudy/domain/StoreTest.java @@ -0,0 +1,90 @@ +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 java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class StoreTest { + + @Autowired + private StoreRepository storeRepository; + + @Autowired + private ClerkRespository clerkRespository; + + @Autowired + private StoreRepositorySupport storeRepositorySupport; + + + @Before + 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