Spec-Zone.ru › Kotlin 1.9

Использование Spring Data CrudRepository для доступа к базе данных

В этой части вы перенесете слой сервиса на использование Spring Data CrudRepository вместо JdbcTemplate для доступа к базе данных. CrudRepository — это интерфейс Spring Data для общих операций CRUD над хранилищем определенного типа. Он предоставляет несколько методов "из коробки" для взаимодействия с базой данных.

Обновление вашего приложения

Сначала вам нужно адаптировать класс Message для работы с API CrudRepository:

  1. Добавьте аннотацию @Table к классу Message, чтобы объявить отображение на таблицу базы данных.
    Добавьте аннотацию @Id перед полем id.

    Эти аннотации также требуют дополнительных импортов.

    import org.springframework.data.annotation.Id
    import org.springframework.data.relational.core.mapping.Table
    
    @Table("MESSAGES")
    data class Message(@Id var id: String?, val text: String)
    

    Помимо добавления аннотаций, вам также нужно сделать id изменяемым (var) по причинам, связанным с тем, как CrudRepository работает при вставке новых объектов в базу данных.

  2. Объявите интерфейс для CrudRepository, который будет работать с Message классом данных:

    import org.springframework.data.repository.CrudRepository
    
    interface MessageRepository : CrudRepository<Message, String>
    
  3. Обновите класс MessageService. Теперь он будет обращаться к MessageRepository вместо выполнения SQL-запросов:

    @Service
    class MessageService(val db: MessageRepository) {
        fun findMessages(): List<Message> = db.findAll().toList()
    
        fun findMessageById(id: String): List<Message> = db.findById(id).toList()
    
        fun save(message: Message) {
            db.save(message)
        }
    
        fun <T : Any> Optional<out T>.toList(): List<T> =
            if (isPresent) listOf(get()) else emptyList()
    }
    
    Расширяющие функции

    Тип возвращаемого значения функции findById() в интерфейсе CrudRepository — экземпляр класса Optional. Однако было бы удобно возвращать List с единственным сообщением для согласованности. Для этого вам нужно распаковать значение Optional, если оно есть, и вернуть список со значением. Это можно реализовать как расширяющую функцию для типа Optional.

    В коде Optional<out T>.toList(), toList() — это расширяющая функция для Optional. Расширяющие функции позволяют писать дополнительные функции для любых классов, что особенно полезно при расширении функциональности класса какой-либо библиотеки.

    Функция save() CrudRepository

    Эта функция работает с предположением, что у нового объекта нет идентификатора в базе данных. Следовательно, идентификатор должен быть null для вставки.

    Если идентификатор не null, CrudRepository предполагает, что объект уже существует в базе данных, и это операция обновления, а не вставки. После операции вставки идентификатор id будет сгенерирован хранилищем данных и повторно назначен экземпляру Message. Вот почему свойство id должно быть объявлено с помощью ключевого слова var.

  4. Обновите определение таблицы сообщений, чтобы генерировать идентификаторы для вставленных объектов. Поскольку id — строка, вы можете использовать функцию RANDOM_UUID() для генерации значения идентификатора по умолчанию:

    CREATE TABLE messages (
       id                     VARCHAR(60)  DEFAULT RANDOM_UUID() PRIMARY KEY,
       text                   VARCHAR      NOT NULL
       );
    

Запуск приложения

Приложение готово к повторному запуску. Заменив JdbcTemplate на CrudRepository, функциональность не изменилась, поэтому приложение должно работать так же, как и раньше.

Следующий шаг

Получите свою персональную карту языковых выражений, чтобы помочь вам в навигации по функциям Kotlin и отслеживании вашего прогресса в изучении языка. Мы также отправим вам советы по языку и полезные материалы по использованию Kotlin с Spring.

Get the Kotlin language map

Для получения материалов вам необходимо будет указать свой адрес электронной почты на следующей странице.

Последнее изменение: 22 февраля 2023 г.
Добавление поддержки базы данных для проекта Spring Boot Тестирование кода с использованием JUnit в JVM – учебник

© 2010–2023 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API