๐Ÿ“˜
Kotlin JDSL
Discord
ko
ko
  • Kotlin JDSL
  • JPQL with Kotlin JDSL
    • Statements
    • Entities
    • Paths
    • Expressions
    • Predicates
    • Sorts
    • Subqueries
    • Custom DSL
    • Spring supports
    • Migration 2.X to 3.X
  • Kotlin JDSL Roadmap
  • FAQ
    • ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋œ ์ฟผ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”?
    • Kotlin value class ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?
    • Kotlin JDSL๊ณผ jOOQ, QueryDSL์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • ์™œ Kotlin JDSL์€ Nullableํ•œ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ํ—ˆ์šฉํ•˜๋‚˜์š”?
Powered by GitBook
On this page
  • Spring Boot AutoConfigure
  • Spring Data Repository
  • Spring Batch
  1. JPQL with Kotlin JDSL

Spring supports

Spring Boot AutoConfigure

Kotlin JDSL์€ Spring Boot AutoConfigure๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ๊ฐ€ Spring Boot์™€ com.linecorp.kotlin-jdsl:spring-data-jpa-support dependency๋ฅผ ๊ฐ™์ด ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, JpqlRenderContext bean์ด KotlinJdslAutoConfiguration์„ ํ†ตํ•ด ์ž๋™ ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ JpqlSerializer ๋˜๋Š” JpqlIntrospector๋ฅผ bean์œผ๋กœ ์„ ์–ธํ–ˆ๋‹ค๋ฉด, ์ž๋™์œผ๋กœ JpqlRenderContext์— ํ•ด๋‹น bean์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Spring Data Repository

๋งŒ์•ฝ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” JpaRepository๊ฐ€ KotlinJdslJpqlExecutor๋ฅผ ์ƒ์†ํ•˜๋ฉด, Kotlin JDSL์ด ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

interface BookRepository : JpaRepository<Book, Isbn>, KotlinJdslJpqlExecutor

val result: List<Isbn?> = bookRepository.findAll {
    select(
        path(Book::isbn),
    ).from(
        entity(Book::class),
    )
}

val result: Page<Isbn?> = bookRepository.findPage(pageable) {
    select(
        path(Book::isbn),
    ).from(
        entity(Book::class),
    )
}

val result: Slice<Isbn?> = bookRepository.findSlice(pageable) {
    select(
        path(Book::isbn),
    ).from(
        entity(Book::class),
    )
}

val result: Stream<Isbn?> = bookRepository.findStream {
    select(
        path(Book::isbn),
    ).from(
        entity(Book::class),
    )
}

๋งŒ์•ฝ KotlinJdslJpqlExecutor๋ฅผ @DataJpaTest์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด KotlinJdslAutoConfiguration๋ฅผ ํ…Œ์ŠคํŠธ์—์„œ ์ง์ ‘ import ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @DataJpaTest๋Š” slice test์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ bean๋งŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด bean์—๋Š” KotlinJdslAutoConfiguration์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ @DataJpaTest์—์„œ Kotlin JDSL์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ์—์„œ KotlinJdslAutoConfiguration๋ฅผ ์ง์ ‘ import ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Spring Batch

SpringBatch๋Š” JPQL๋กœ ์ฟผ๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก JpaPagingItemReader์™€ JpaCursorItemReader๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Kotlin JDSL์€ DSL๋กœ ์ƒ์„ฑ๋œ JPQL ์ฟผ๋ฆฌ๊ฐ€ ์œ„ ItemReader๋“ค์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก KotlinJdslQueryProvider๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@Auwoired
lateinit var queryProviderFactory: KotlinJdslQueryProviderFactory

val queryProvider = queryProviderFactory.create {
    select(
        path(Book::isbn)
    ).from(
        entity(Book::class),
    )
}

JpaCursorItemReaderBuilder<Isbn>()
    .entityManagerFactory(entityManagerFactory)
    .queryProvider(queryProvider)
    .saveState(false)
    .build()
PreviousCustom DSLNextMigration 2.X to 3.X

Last updated 4 months ago