Spring Data with Requery
Spring Data for requery
requery는 대부분의 DB를 지원하는 Lightweight ORM Library 입니다. 또한 Java, Kotlin, Android 등 JVM 환경과 Android 환경 모두를 지원하여, 가벼우면서, 성능 좋은 라이브러리입니다.
참고: Requery Overview
Add jcenter repository
<repositories>
<repository>
<id>jcenter</id>
<url>http://jcenter.bintray.com</url>
</repository>
</repositories>
Add dependency
<dependency>
<groupId>com.coupang</groupId>
<artifactId>spring-data-requery</artifactId>
<version>2.0.3</version>
</dependency>
Use jcenter repository only
repository {
jcenter()
}
dependencies {
// for Java
compile "com.coupang:spring-data-requery:2.0.3"
// for Kotlin
compile "com.coupang:spring-data-requery-kotlin:2.0.3"
// for Spring Boopt 2
compile "com.coupang:spring-boot-starter-data-requery:2.0.3"
}
현재 branch 2.x 에서 제공하는 기능은 spring boot 2.0.x 을 사용하여 제작되었습니다. 향후 branch 1.x 에서는 spring boot 1.x 기반으로 제공될 예정입니다.
Java를 이용한 Backend 개발 시, Spring Data의 다양한 조회를 자동 생성하는 기능을 제공합니다.
현재 requery 기능의 한계로 다음과 같은 기능은 지원되지 않습니다.
spring-data-requery 를 Spring Boot 환경에서 쉽게 사용할 수 있도록 Auto Configuration 기능을 제공합니다.
spring boot 환경설정에서 다음과 같이 설정하면 쉽게 사용 가능합니다.
# spring-data-requery
spring.data.requery.modelName = org.springframework.boot.autoconfigure.data.requery.domain.Models.DEFAULT
spring.data.requery.batchUpdateSize = 50
spring.data.requery.statementCacheSize = 512
# if no need to create schema, make `tableCreationMode` to comments
spring.data.requery.tableCreationMode = CREATE_NOT_EXISTS
spring.datasource.hikari.driver-class-name = org.h2.Driver
spring.datasource.hikari.jdbc-url = jdbc:h2:mem:test
spring.datasource.hikari.username = sa
spring-data-requery-kotlin 은 kotlin 언어를 위해 독립적으로 제작, 지원됩니다. Domain Entity 정의 시 Kotlin은 Java와 달리 Interface로 정의해야 하고, 이를 field가 아는 method로 인식하게 되어, 내부 구현 시 Java와 혼용하기 어렵습니다. 그리고, primitive type에 대한 처리가 Java와는 달라 추가적인 작업이 필요했습니다.
사용법은 Java보다 조금 더 간편합니다만, 다음과 같은 default method를 이용하여 custom query를 만들 때에 주의할 점이 있습니다.
Java에서는 default
keyword를 지정하면 되지만, Kotlin에서는 @JvmDefault
annotation을 지정해 주어야 합니다.
@JvmDefault
fun findColleaguesFor(userId: Int?): List<UserEntity> {
return operations
.select(UserEntity::class)
.join(User_Colleagues::class).on(UserEntity::id eq User_Colleagues.USER_ID)
.where(User_Colleagues.FRIEND_ID.eq(userId))
.get()
.toList()
}
추후 지원 예정
곧 지원 예정
Apache Phoenix를 requery를 이용하여 사용하기 위한 라이브러리입니다.
HBase 가 INSERT
, UPDATE
대신 UPSERT
만을 지원하므로, Apache Phoenix용 SQL문을 생성하도록 하는 라이브러리입니다.