24
24
будет реализован как Singleton.
25
25
*/
26
26
public class TicketDao implements Dao <Long , Ticket >{
27
- // Переменная экземпляра объекта
28
- private static TicketDao INSTANCE ;
29
- // Пустой приватный конструктор
27
+
28
+ private static TicketDao INSTANCE ; // Переменная экземпляра объекта
29
+
30
+ /* Пустой приватный конструктор */
30
31
private TicketDao () {
31
32
}
32
- /*
33
- Метод позволяющий инициализировать
34
- единственный объект класса TicketDao
35
- */
33
+
34
+ /* Метод позволяющий инициализировать единственный объект класса TicketDao */
36
35
public static TicketDao getInstance () {
37
36
if (INSTANCE == null ){
38
37
INSTANCE = new TicketDao ();
39
38
}
40
39
return INSTANCE ;
41
40
}
42
- /* Получаем экземпляр класса FlightDao */
43
- private final FlightDao flightDao = FlightDao .getInstance ();
44
- /*
45
- SQL запрос на удаление одной записи из таблицы
46
- Ticket по ID в формате PrepareStatement
47
- */
41
+
42
+ private final FlightDao flightDao = FlightDao .getInstance (); // Получаем экземпляр класса FlightDao
43
+
44
+ /* SQL запрос на удаление одной записи из таблицы Ticket по ID в формате PrepareStatement */
48
45
private static final String DELETE_SQL = """
49
46
DELETE FROM flight_repository.ticket
50
47
WHERE id = ?
51
48
""" ;
52
- /*
53
- SQL запрос на вставку одной записи в таблицу
54
- Ticket в формате PrepareStatement
55
- */
49
+
50
+ /* SQL запрос на вставку одной записи в таблицу Ticket в формате PrepareStatement */
56
51
private static final String SAVE_SQL = """
57
52
INSERT INTO flight_repository.ticket (passenger_no, passenger_name, flight_id, seat_no, cost)
58
53
VALUES (?, ?, ?, ?, ?);
59
54
""" ;
60
- /*
61
- SQL запрос на изменение одной записи в таблице
62
- Ticket по ID в формате PrepareStatement
63
- */
55
+
56
+ /* SQL запрос на изменение одной записи в таблице Ticket по ID в формате PrepareStatement */
64
57
private static final String UPDATE_SQL = """
65
58
UPDATE flight_repository.ticket
66
59
SET passenger_no = ?,
@@ -70,6 +63,7 @@ public static TicketDao getInstance() {
70
63
cost = ?
71
64
WHERE id = ?
72
65
""" ;
66
+
73
67
/* SQL запрос на получение всех записей из таблицы Ticket */
74
68
private static final String FIND_ALL_SQL = """
75
69
SELECT t.id,
@@ -89,75 +83,57 @@ public static TicketDao getInstance() {
89
83
JOIN flight_repository.flight AS f
90
84
ON t.flight_id = f.id
91
85
""" ;
92
- /*
93
- SQL запрос на получение данных одной записи в
94
- таблице Ticket по ID в формате PrepareStatement
95
- */
86
+
87
+ /* SQL запрос на получение данных одной записи в таблице Ticket по ID в формате PrepareStatement */
96
88
private static final String FIND_BY_ID_SQL = FIND_ALL_SQL + """
97
89
WHERE t.id = ?
98
90
""" ;
91
+
99
92
/*
100
- Метод для работы с FIND_ALL_SQL запросом. Перегруженный метод
101
- *.findAll(TicketFilter filter) приведен в самом низу данного
102
- класса, он принимает в качестве аргументов ссылку на
103
- TicketFilter - Data Transfer Object (DTO) — один из шаблонов
104
- проектирования, используется для передачи данных между
105
- подсистемами (слоями) приложения. Data Transfer Object, в отличие
106
- от business object или data access object не должен содержать
107
- какого-либо поведения.
93
+ Метод для работы с FIND_ALL_SQL запросом. Перегруженный метод *.findAll(TicketFilter filter) приведен в самом низу данного
94
+ класса, он принимает в качестве аргументов ссылку на TicketFilter - Data Transfer Object (DTO) — один из шаблонов
95
+ проектирования, используется для передачи данных между подсистемами (слоями) приложения. Data Transfer Object, в отличие
96
+ от business object или data access object не должен содержать какого-либо поведения.
108
97
*/
109
98
public List <Ticket > findAll () {
110
99
/* Устанавливаем связь с базой данных и готовим PrepareStatement объект */
111
100
try (var connection =
112
101
ConnectionPoolManager .getConnectionFromPool ();
113
102
var preparedStatement =
114
103
connection .prepareStatement (FIND_ALL_SQL )) {
115
- /* Получаем результат запроса, как коллекцию SET */
116
- var resultSet = preparedStatement .executeQuery ();
117
- /* Создаем список для хранения билетов полученных по запросу */
118
- List <Ticket > tickets = new ArrayList <>();
104
+
105
+ var resultSet = preparedStatement .executeQuery ();// Получаем результат запроса, как коллекцию SET
106
+
107
+ List <Ticket > tickets = new ArrayList <>();// Создаем список для хранения билетов полученных по запросу
119
108
while (resultSet .next ()) {
120
- /* Загружаем полученный список в коллекцию*/
121
- tickets .add (buildTicket (resultSet ));
109
+ tickets .add (buildTicket (resultSet )); // Загружаем полученный список в коллекцию
122
110
}
123
- /* Возвращаем результат */
124
- return tickets ;
111
+ return tickets ; // Возвращаем результат
125
112
} catch (SQLException throwables ) {
126
113
throw new DaoException (throwables );
127
114
}
128
115
}
129
- /*
130
- Метод для получения данных о билете по ID.
131
- Результат запроса неоднозначен, поскольку
132
- может быть запрошен ID которого нет в базе,
133
- отсюда и возвращаемый объект Optional.
116
+
117
+ /*
118
+ Метод для получения данных о билете по ID. Результат запроса неоднозначен, поскольку
119
+ может быть запрошен ID которого нет в базе, отсюда и возвращаемый объект Optional.
134
120
*/
135
121
public Optional <Ticket > findById (Long id ) {
136
122
/* Устанавливаем связь, передаем подготовленный FIND_BY_ID_SQL запрос */
137
123
try (var connection =
138
124
ConnectionPoolManager .getConnectionFromPool ();
139
125
var preparedStatement =
140
126
connection .prepareStatement (FIND_BY_ID_SQL )) {
141
- /* Устанавливаем интересующий нас параметр в запрос */
142
- preparedStatement .setLong (1 , id );
143
- /*
144
- Только после окончательного формирования запроса
145
- и установки всех параметров передаем запрос в базу
146
- данных
147
- */
148
- var resultSet = preparedStatement .executeQuery ();
149
- /* Создаем пустую ссылку на объект Ticket */
150
- Ticket ticket = null ;
127
+
128
+ preparedStatement .setLong (1 , id ); // Устанавливаем нужный нам параметр в запрос (в данном случае первый параметр)
129
+ var resultSet = preparedStatement .executeQuery (); //Только после окончательного формирования запроса и установки всех параметров передаем запрос в базу данных
130
+ Ticket ticket = null ; // Создаем пустую ссылку на объект Ticket
151
131
if (resultSet .next ()) {
152
- /*
153
- Инициализируем наш объект методом *.buildTicket()
154
- куда передали результат запроса
155
- */
156
- ticket = buildTicket (resultSet );
132
+ ticket = buildTicket (resultSet ); // Инициализируем наш объект методом *.buildTicket() куда передали результат запроса
157
133
}
134
+
158
135
/*
159
- Мы получаем объект, в котором может быть запрашиваемый объект —
160
- а может быть null. Но с Optional надо как-то работать дальше,
136
+ Мы получаем объект, в котором может быть запрашиваемый объект — а может быть null. Но с Optional надо как-то работать дальше,
161
137
нам нужна сущность, которую он содержит (или не содержит).
162
138
163
139
Cуществует всего три категории Optional:
@@ -167,14 +143,14 @@ public Optional<Ticket> findById(Long id) {
167
143
Optional-объект.
168
144
- Optional.empty - возвращает пустой Optional-объект.
169
145
170
- Существует так же два метода, вытекающие из познания, существует
171
- обёрнутый объект или нет — isPresent() и ifPresent()
146
+ Существует так же два метода, вытекающие из познания, существует обёрнутый объект или нет — isPresent() и ifPresent()
172
147
*/
173
148
return Optional .ofNullable (ticket );
174
149
} catch (SQLException throwables ) {
175
150
throw new DaoException (throwables );
176
151
}
177
152
}
153
+
178
154
/* Метод для обновления сведений о билете */
179
155
public void update (Ticket dataIn ) {
180
156
/* Создаем соединение с базой и передаем UPDATE_SQL запрос */
@@ -195,6 +171,7 @@ public void update(Ticket dataIn) {
195
171
throw new DaoException (throwables );
196
172
}
197
173
}
174
+
198
175
/*
199
176
Метод для сохранения данных нового билета в базе данных.
200
177
Сам объект-билет передается в качестве параметра из которого
@@ -216,16 +193,12 @@ public Ticket save(Ticket dataIn) {
216
193
preparedStatement .setLong (3 , dataIn .getFlight ().id ());
217
194
preparedStatement .setString (4 , dataIn .getSeatNo ());
218
195
preparedStatement .setBigDecimal (5 , dataIn .getCost ());
219
- /* Отправляем запрос в базу */
220
- preparedStatement .executeUpdate ();
221
- /* Получаем из базы вновь сгенерированный ID */
222
- var generatedKeys = preparedStatement .getGeneratedKeys ();
196
+ preparedStatement .executeUpdate (); // Отправляем запрос в базу
197
+ var generatedKeys = preparedStatement .getGeneratedKeys (); // Получаем из базы вновь сгенерированный ID
223
198
if (generatedKeys .next ()) {
224
- /* Помещаем его в полученный Ticket объект */
225
- dataIn .setId (generatedKeys .getLong ("id" ));
199
+ dataIn .setId (generatedKeys .getLong ("id" )); // Помещаем его в полученный Ticket объект
226
200
}
227
- /* Возвращаем полный Ticket объект */
228
- return dataIn ;
201
+ return dataIn ; // Возвращаем полный Ticket объект
229
202
} catch (SQLException throwables ) {
230
203
throw new DaoException (throwables );
231
204
}
@@ -432,4 +405,4 @@ public List<Ticket> findAll(TicketFilter filter) {
432
405
throw new DaoException (throwables );
433
406
}
434
407
}
435
- }
408
+ }
0 commit comments