Тэги: ООП, Kotlin, руководство.
Иногда в процессе разработки на Kotlin требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
Например, пусть у вас есть метод calculateDensity(), вычисляющий плотность вещества как массу, делённую на объём. Оба параметра передаём как тип Double:
Тогда вызов этого метода может выглядеть вот так:
Вроде всё тривиально, но без подсказок IDE довольно легко перепутать объём и плотность местами при вызове метода. И если такое произойдёт, компилятор вам никак не поможет.
Тэги: Java, руководство, ООП.
В Java 21 наряду с SequencedCollection (см. SequencedCollection и SequencedSet в Java и SequencedMap в Java) из статуса preview в статус production-ready перешла ещё одна фича – шаблоны сравнения (pattern matching) для конструкции switch. Рассмотрим возможности этой конструкции на конкретных примерах.
Предположим, что мы пишем метод displayScale(), в котором надо определить количество знаков после запятой в переданном нам числе. Причём это число поступает на вход как самый базовый тип Object. Напомню, что базовым для всех чисел является класс Number. Его производными типами являются, например, целые числа Integer и числа с произвольной точностью BigDecimal.
Тэги: Collections, Java, руководство, ООП.
В языке программирования Java есть механизм сравнения объектов, который основан на интерфейсе Comparable и методе compareTo(). Этот механизм позволяет определить порядок сортировки объектов и использовать их в коллекциях, которые требуют сравнения элементов.
Интерфейс Comparable определяет единственный метод compareTo(), который сравнивает текущий объект с переданным в аргументе.
Контракт метода compareTo() состоит из трех основных правил:
Тэги: Collections, Spring Data, Spring Boot, rest, Kotlin, YouTube, руководство, SQL.
В предыдущей статье Spring Data JPA, REST и Kotlin: "один-ко-многим", изменение данных мы научились изменять дочерние сущности городов при изменении родительской сущности страны. А сейчас давайте научимся выбирать из таблицы только те поля, которые нам реально нужны, а не всю сущность целиком. В Spring Data JPA есть такое понятие как проекции. Рассмотрим конкретный пример.
Давайте сделаем новый эндпоинт, который будет возвращать список названий всех стран, отсортированный по алфавиту. Кроме названий, других полей выводить не требуется. Опираясь на уже имеющиеся у нас знания из предыдущих статей, добавим в CountryRepository такой метод:
Тэги: Hibernate, Spring, Spring Boot, rest, SQL, PostgreSQL, gradle, Spring Data, Kotlin, json, yaml, YouTube, руководство.
Ранее я уже приводил пример в статье CrudRepository на Kotlin, как Spring Data позволяет легко выполнять основные операции над сущностями в БД. Теперь пойдём ещё дальше и рассмотрим как Spring Data Rest позволяет избежать написания контроллеров и сервисной логики. Поскольку писать будем на Kotlin, нам придётся учитывать специфику взаимодействия с Java-кодом, на который изначально был рассчитан Spring Data Rest.
Исходники тестового проекта, адаптированного под Spring Boot 3, доступны на github. Также доступен видеогайд.
Для начала создадим заготовку проекта. Проще всего это сделать с помощью Spring Initializr. В настройках выбираем в качестве языка Kotlin и в качестве сборщика Gradle – Kotlin. В dependency нам нужно последовательно добавить три зависимости: Spring Data JPA, Rest Repositories и PostgreSQL Driver. В итоге файл build.gradle.kts должен содержать следующие зависимости:
Тэги: Spring Data, Collections, YouTube, руководство, rest, Kotlin, Spring Boot.
В предыдущей статье Spring Data JPA, REST и Kotlin: "один-ко-многим", чтение данных мы добавили к родительской сущности «Страна» дочернюю сущность «Город». В итоге у нас получилось отношение «один-ко-многим». В продолжение этой темы научимся создавать, изменять и удалять города вместе со странами в рамках одного запроса от клиента.
Тэги: Collections, Spring Boot, YouTube, PostgreSQL, руководство, Spring Data, Kotlin, SQL, rest.
В предыдущей статье Spring Data JPA, REST и Kotlin: обработка ошибок мы научились менять формат ответа при возникновении ошибки. А сегодня добавим в базу данных отношение «один-ко-многим». У нас уже имеется таблица country, которая содержит страны.
Давайте создадим новую таблицу city, которая будет содержать города. И добавим между этими таблицами связь через поле country_id в таблице city. То есть несколько разных городов могут ссылаться на одну и ту же страну. Это и есть отношение «один-ко-многим».
Тэги: json, Spring Boot, YouTube, gradle, rest, руководство, Kotlin.
В предыдущей статье Spring Data JPA, REST и Kotlin: создание, обновление, удаление мы научились изменять данные в базе с помощью Spring Data JPA. При обновлении и удалении мы сначала проверяем, что запись существует. И если она не найдена – кидаем стандартное исключение. Обеспечивается это поведение через элвис-оператор:
Тэги: SQL, Spring Boot, руководство, YouTube, PostgreSQL, Kotlin, rest, Spring Data, json.
В предыдущей статье Spring Data JPA, REST и Kotlin: поиск записей мы научились искать записи по id и по части названия страны. Теперь рассмотрим, как реализовать создание записи, её обновление и удаление. Нам потребуется добавить в наше REST API три новых метода.
Методы создания и обновления будут принимать на вход ранее созданную нами DTO (data transfer object), в которой будут указаны все параметры страны. Однако при создании id страны нам неизвестно, поэтому нужно модифицировать DTO так, чтобы оно допускало null в качестве id:
Тэги: Spring Data, руководство, Kotlin, PostgreSQL, YouTube, Spring Boot, rest.
В предыдущей статье Spring Data JPA, REST и Kotlin: подключение к БД мы рассмотрели как можно подгружать из БД список всех стран, отсортированных по алфавиту и как реализовать постраничный вывод. А в данной статье узнаем, как искать страну по id и по части её названия.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.