Использование Spring Data CrudRepository для доступа к базе данных
В этой части вы перенесёте уровень сервисов на использование Spring Data CrudRepository вместо JdbcTemplate для доступа к базе данных. CrudRepository — это интерфейс Spring Data для выполнения стандартных операций CRUD с репозиторием определённого типа. Он предоставляет несколько готовых методов для взаимодействия с базой данных.
Обновление приложения
Сначала нужно изменить класс Message для работы с API CrudRepository:
-
Добавьте аннотацию
@Tableк классуMessage, чтобы указать соответствие таблице базы данных.
Добавьте аннотацию@Idперед полемid.// Message.kt package com.example.demo import org.springframework.data.annotation.Id import org.springframework.data.relational.core.mapping.Table @Table("MESSAGES") data class Message(@Id val id: String?, val text: String)Кроме того, чтобы использовать класс
Messageболее идиоматично, можно задать для свойстваidзначение по умолчанию null и изменить порядок свойств класса данных:@Table("MESSAGES") data class Message(val text: String, @Id val id: String? = null)Теперь, если нужно создать новый экземпляр класса
Message, можно указать в качестве параметра только свойствоtext:val message = Message("Hello") // id is null -
Объявите интерфейс для
CrudRepository, который будет работать с классом данныхMessage. Создайте файлMessageRepository.ktи добавьте в него следующий код:// MessageRepository.kt package com.example.demo import org.springframework.data.repository.CrudRepository interface MessageRepository : CrudRepository<Message, String>
-
Обновите класс
MessageService. Теперь он будет использоватьMessageRepositoryвместо выполнения SQL-запросов:// MessageService.kt package com.example.demo import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service @Service class MessageService(private val db: MessageRepository) { fun findMessages(): List<Message> = db.findAll().toList() fun findMessageById(id: String): Message? = db.findByIdOrNull(id) fun save(message: Message): Message = db.save(message) }- Функции расширения
Функция
findByIdOrNull()— это функция расширения для интерфейсаCrudRepositoryв Spring Data JDBC.- Функция CrudRepository save()
-
Эта функция работает исходя из предположения, что у нового объекта нет идентификатора в базе данных. Поэтому при вставке идентификатор должен быть равен null.
Если идентификатор не равен null,
CrudRepositoryпредполагает, что объект уже существует в базе данных и выполняется операция обновления, а не операция вставки. После выполнения операции вставки хранилище данных сгенерируетidи присвоит его экземпляруMessage.
-
Обновите определение таблицы messages, чтобы идентификаторы вставляемых объектов генерировались автоматически. Поскольку
id— это строка, для генерации значения идентификатора по умолчанию можно использовать функциюRANDOM_UUID():-- schema.sql CREATE TABLE IF NOT EXISTS messages ( id VARCHAR(60) DEFAULT RANDOM_UUID() PRIMARY KEY, text VARCHAR NOT NULL ); -
Измените имя базы данных в файле
application.properties, расположенном в папкеsrc/main/resources:spring.application.name=demo spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:file:./data/testdb2 spring.datasource.username=name spring.datasource.password=password spring.sql.init.schema-locations=classpath:schema.sql spring.sql.init.mode=always
Полный код приложения:
Запуск приложения
Поздравляем! Приложение снова готово к запуску. После замены JdbcTemplate на CrudRepository функциональность не изменилась, поэтому приложение работает как и прежде.
Теперь можно выполнить HTTP-запросы POST и GET из файла requests.http и получить те же результаты.
Что дальше
Получите персональную карту языка, которая поможет ориентироваться в возможностях Kotlin и отслеживать прогресс в изучении языка:
Ознакомьтесь с документацией Spring Framework.
Создайте простое веб-приложение с защищёнными ресурсами, следуя руководству Защита веб-приложения.
Пройдите руководство Создание веб-приложений с помощью Spring Boot и Kotlin.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-spring-boot-using-crudrepository.html