Open Msksgm opened 1 year ago
build.gradle.kts に以下を記述
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
}
基本的な利用方法は以下
zenn に記事を作成した。
https://zenn.dev/msksgm/articles/20221028-kotlin-spring-data-jdbc-web-api
やり方は分かった
以下のようにやれば
class HogeRepoImpl implements HogeRepo, CrudRepo<User> {
override saveForhogeRepo(user: User) {
this.saveCrudRepo(user)
this.orgSave()
}
@Query("SELECT * FROM ...")
fn orgSave() {
}
}
やり方は分かった
以下のようにやれば
- セパレートインターフェースを汚さない
- 詰替えもORMの力を借りてやってくれる
- UseCase側からはドメインレポのメソッドしか見えない
class HogeRepoImpl implements HogeRepo, CrudRepo<User> { override saveForhogeRepo(user: User) { this.saveCrudRepo(user) this.orgSave() } @Query("SELECT * FROM ...") fn orgSave() { } }
CrudRepos を implements すると、以下のようになることがわかった。 一度定義しないと、メソッドの中身が確定しないから?
class HogeRepoImpl implements HogeRepo, CrudRepo<UserInt> {
override fun <S : Customer?> save(entity: S): S {
TODO("Not yet implemented")
}
override fun <S : Customer?> saveAll(entities: MutableIterable<S>): MutableIterable<S> {
TODO("Not yet implemented")
}
override fun findById(id: Int): Optional<Customer> {
TODO("Not yet implemented")
}
override fun existsById(id: Int): Boolean {
TODO("Not yet implemented")
}
override fun findAll(): MutableIterable<Customer> {
TODO("Not yet implemented")
}
override fun count(): Long {
TODO("Not yet implemented")
}
override fun deleteAll() {
TODO("Not yet implemented")
}
override fun deleteAll(entities: MutableIterable<Customer>) {
TODO("Not yet implemented")
}
override fun deleteAllById(ids: MutableIterable<Int>) {
TODO("Not yet implemented")
}
override fun delete(entity: Customer) {
TODO("Not yet implemented")
}
override fun deleteById(id: Int) {
TODO("Not yet implemented")
}
override fun findAllById(ids: MutableIterable<Int>): MutableIterable<Customer> {
TODO("Not yet implemented")
}
}
代替案
Impl の引数に、CrudRepository を継承した interface を引数に持たせる。
class HogeRepoImpl(val springDataHogeRepository: SpringDataHogeRepository) implements HogeRepo {
fun saveHoge(hoge: Hoge) {
val entityHoge = EntityHoge(...)
springDataHogeRepository.save(entityHoge)
}
}
概要
Spring Data JDBC について調査する。