Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методички / spring_lab4.pdf
Скачиваний:
0
Добавлен:
28.06.2026
Размер:
111.26 Кб
Скачать

Назначение настроек:

spring.datasource.url=${DB_URL} — адрес подключения к базе данных. Здесь Spring Boot берет значение из переменной окружения DB_URL .

spring.datasource.username=${DB_USERNAME} — имя пользователя для подключения

кPostgreSQL.

spring.datasource.password=${DB_PASSWORD} — пароль пользователя базы данных.

spring.jpa.hibernate.ddl-auto=update — указывает Hibernate автоматически обновлять структуру таблиц на основе JPA-сущностей. Если таблиц еще нет, они будут созданы. Если поля изменились, Hibernate попытается скорректировать структуру.

spring.jpa.show-sql=true — включает вывод SQL-запросов в консоль. Это удобно для

наблюдения за тем, какие запросы формирует Hibernate.

spring.jpa.properties.hibernate.format_sql=true — делает вывод SQL в логах более читаемым, разбивая его на строки и форматируя отступы.

Создайте структуру пакетов:

org.example ├──controller ├──service ├──repository ├──exception └──model

├──dto

├──entity └──enums

Часть 2. Создание сущностей и перечислений

2.1. Создайте перечисления NotificationChannel и NotificationStatus

package org.example.model.enums;

public enum NotificationChannel { EMAIL,

SMS,

PUSH,

TELEGRAM

}

package org.example.model.enums;

public enum NotificationStatus { CREATED,

SENT,

4

FAILED

}

2.2. Создайте сущность User

package org.example.model.entity;

import jakarta.persistence.*; import lombok.Getter;

import lombok.NoArgsConstructor; import lombok.Setter;

import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List;

@Getter

@Setter

@NoArgsConstructor

@Entity

@Table(name = "users") public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

@Column(nullable = false) private String name;

private String email;

private String phone;

private String deviceToken;

private String telegramChatId;

private LocalDateTime createdAt;

@OneToMany(mappedBy = "recipient", cascade = CascadeType.ALL) private List<Notification> notifications = new ArrayList<>();

}

2.3. Создайте сущность Notification

package org.example.model.entity;

import jakarta.persistence.*;

5

import lombok.Getter;

import lombok.NoArgsConstructor; import lombok.Setter;

import org.example.model.enums.NotificationChannel; import org.example.model.enums.NotificationStatus;

import java.time.LocalDateTime;

@Getter

@Setter

@NoArgsConstructor

@Entity

@Table(name = "notifications") public class Notification {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

@Column(nullable = false) private String title;

@Column(nullable = false, columnDefinition = "TEXT") private String message;

@Enumerated(EnumType.STRING) @Column(nullable = false)

private NotificationChannel channel;

@Enumerated(EnumType.STRING) @Column(nullable = false)

private NotificationStatus status;

private LocalDateTime createdAt;

private LocalDateTime sentAt;

@ManyToOne(fetch = FetchType.LAZY)

@JoinColumn(name = "recipient_id", nullable = false) private User recipient;

}

1.Запустите приложение и убедитесь, что Hibernate автоматически создал таблицы users

и notifications .

6

Соседние файлы в папке Методички