diff --git a/pom.xml b/pom.xml index d134ce3..5fc1000 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,17 @@ org.springframework.boot spring-boot-starter-thymeleaf + + + com.querydsl + querydsl-apt + provided + + + + com.querydsl + querydsl-jpa + @@ -70,6 +81,23 @@ + + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + + process + + + target/generated-sources/java + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + diff --git a/src/main/java/com/security/basic/configure/JpaConfiguration.java b/src/main/java/com/security/basic/configure/JpaConfiguration.java new file mode 100644 index 0000000..a1bd5fb --- /dev/null +++ b/src/main/java/com/security/basic/configure/JpaConfiguration.java @@ -0,0 +1,21 @@ +package com.security.basic.configure; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@Configuration +@EnableJpaAuditing +public class JpaConfiguration { + + @PersistenceContext + private EntityManager em; + + @Bean + public JPAQueryFactory jpaQueryFactory () { + return new JPAQueryFactory(em); + } +} diff --git a/src/main/java/com/security/basic/mapped/BaseItem.java b/src/main/java/com/security/basic/mapped/BaseItem.java new file mode 100644 index 0000000..0120adc --- /dev/null +++ b/src/main/java/com/security/basic/mapped/BaseItem.java @@ -0,0 +1,15 @@ +package com.security.basic.mapped; + +import javax.persistence.*; + +@MappedSuperclass +public abstract class BaseItem { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", nullable = false) + private Long id; + + @Column(name = "name", nullable = false) + private String name; +} diff --git a/src/main/java/com/security/basic/mapped/BaseItemRepository.java b/src/main/java/com/security/basic/mapped/BaseItemRepository.java new file mode 100644 index 0000000..118f4db --- /dev/null +++ b/src/main/java/com/security/basic/mapped/BaseItemRepository.java @@ -0,0 +1,36 @@ +package com.security.basic.mapped; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@RequiredArgsConstructor +@Repository +public class BaseItemRepository { + + private final JPAQueryFactory queryFactory; + + com.security.basic.mapped.QBaseItem qItemA = com.security.basic.mapped.QItemA.itemA._super; + com.security.basic.mapped.QBaseItem qItemB = com.security.basic.mapped.QItemB.itemB._super; + + public List itemAList() { + return queryFactory.select(Projections.constructor(ItemDto.class, + qItemA.id, + qItemA.name + )) + .from(qItemA) + .fetch(); + } + + public List itemBList() { + return queryFactory.select(Projections.constructor(ItemDto.class, + qItemB.id, + qItemB.name + )) + .from(qItemB) + .fetch(); + } +} diff --git a/src/main/java/com/security/basic/mapped/Controller.java b/src/main/java/com/security/basic/mapped/Controller.java new file mode 100644 index 0000000..554e9d0 --- /dev/null +++ b/src/main/java/com/security/basic/mapped/Controller.java @@ -0,0 +1,25 @@ +package com.security.basic.mapped; + +import lombok.RequiredArgsConstructor; +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; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/mapped") +public class Controller { + + private final BaseItemRepository baseItemRepository; + + @GetMapping("/a") + public ResponseEntity a() { + return ResponseEntity.ok(baseItemRepository.itemAList()); + } + + @GetMapping("/b") + public ResponseEntity b() { + return ResponseEntity.ok(baseItemRepository.itemBList()); + } +} diff --git a/src/main/java/com/security/basic/mapped/ItemA.java b/src/main/java/com/security/basic/mapped/ItemA.java new file mode 100644 index 0000000..df2e243 --- /dev/null +++ b/src/main/java/com/security/basic/mapped/ItemA.java @@ -0,0 +1,8 @@ +package com.security.basic.mapped; + +import javax.persistence.Entity; + +@Entity +public class ItemA extends BaseItem{ + +} diff --git a/src/main/java/com/security/basic/mapped/ItemB.java b/src/main/java/com/security/basic/mapped/ItemB.java new file mode 100644 index 0000000..6bef1a1 --- /dev/null +++ b/src/main/java/com/security/basic/mapped/ItemB.java @@ -0,0 +1,10 @@ +package com.security.basic.mapped; + +import javax.persistence.Entity; +import javax.persistence.Table; + +@Table(name = "item_a") +@Entity +public class ItemB extends BaseItem{ + +} diff --git a/src/main/java/com/security/basic/mapped/ItemDto.java b/src/main/java/com/security/basic/mapped/ItemDto.java new file mode 100644 index 0000000..2422bda --- /dev/null +++ b/src/main/java/com/security/basic/mapped/ItemDto.java @@ -0,0 +1,14 @@ +package com.security.basic.mapped; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class ItemDto { + + private Long id; + private String name; +}