Проблемы построения ENTITY и DAO
Я делаю первый веб-проект по java, с использованием JSP+JSTL+JDBC + нельзя использовать ORM-фреймворки или Spring
Одно из основных заданий - используя JSTL core, вывести в странице браузера информацию в следующем формате:
Таблица записей на услугу:
| № | Название услуги | Стоимость услуги | Мастер | Статус выполнения | Время и дата оказания услуги |
|---|---|---|---|---|---|
| 1 | Стрижка | 100 у.е. | Иван Иванов | Запланирован | 20.06.2022 10:30 |
Основываясь на этом я написал следующую ENTITY и DAO:
public class Reception extends BaseEntity {
private Service service;
private User master;
private User client;
private int cost;
private LocalDateTime receptionDateTime;
private Status status;
// getters setters
}
public class ReceptionDAO implements GenericDAO<Reception> {
public List<Reception> findAll(long userId) throws DaoException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
List<Reception> receptions = new ArrayList<>();
try {
connection = dbManager.getConnection();
statement = connection.prepareStatement("SELECT * FROM reception WHERE user_id=?");
statement.setLong(1, userId);
resultSet = statement.executeQuery();
while (resultSet.next()) {
Reception reception = mapReception(resultSet);
receptions.add(reception);
}
} catch (SQLException e) {
throw new DaoException("//informative text", e);
} finally {
close(resultSet);
close(statement);
close(connection);
}
return receptions;
}
public Reception mapReception(ResultSet resultSet) throws SQLException, DaoException {
Reception reception = new Reception();
long receptionId = resultSet.getLong("id");
long serviceId = resultSet.getLong("service_id");
long masterId = resultSet.getLong("master_id");
long clientId = resultSet.getLong("client_id");
int cost = resultSet.getInt("cost");
LocalDateTime dateTime =resultSet.getTimestamp("reception_date_time").toLocalDateTime();
int statusId = resultSet.getInt("status_id");
UserDAO userDAO = new UserDAO();
ServiceDAO serviceDAO = new ServiceDAO();
reception.setId(receptionId);
reception.setService(serviceDAO.findById(serviceId));
reception.setMaster(userDAO.findById(masterId));
reception.setClient(userDAO.findById(clientId));
reception.setCost(cost);
reception.setReceptionDateTime(dateTime);
reception.setStatus(Status.getStatus(statusId));
return reception;
}
Меня терзают сомнения о правильности построения ENTITY и DAO в целом, так как для того, чтобы достать сущность из базы данных, я использую UserDAO и ServiceDAO внутри ReceptionDAO. Исходя из этого у меня есть несколько вопросов:
- Всё ли так плохо в построении ENTITY и DAO? Имеет ли такая структура право на жизнь?
- Хорошая ли это идея использовать DAO внутри другого DAO?
- Если такое построение DAO и ENTITY неправильное, тогда что надо добавить в проект, чтобы получить желаемый результат?