Conversation
- Методы выборки из таблицы книг.
- Добавление Spring Shell.
- Добавление Shell команд.
- Разделение методов на отдельные модули. - Добавление тестов.
| @Data | ||
| public class Book { | ||
|
|
||
| private int id; |
There was a problem hiding this comment.
Для идентификатора лучше использовать long + аналог для схемы БД
| private Date addRecordDate; | ||
| private String caption; | ||
| private int authorId; | ||
| private int genreId; |
There was a problem hiding this comment.
Лучше это убрать, оставив только Author и Genre
| this.comment = comment; | ||
| } | ||
|
|
||
| public String getAddRecordDateString() { |
There was a problem hiding this comment.
Этот функционал лучше вынеси в конвертер (хелпер или сервис), а из класса возвращать обычную дату
|
|
||
| public String getAuthorString() { | ||
| return (author != null) | ||
| ? ", author='" + author.toFormatedString() + '\'' |
There was a problem hiding this comment.
Я так понимаю все эти методы нужны, чтобы выводить нужным образом в интерфейсе. Лучше не подгонять код сущностей под нужды интерфейса. Потенциально они могут быть использованы в разных приложениях. Для подготовки данных к отображению лучше использовать сервис или dto
| @RequiredArgsConstructor | ||
| public class AuthorDaoJdbc implements AuthorDao<Author> { | ||
|
|
||
| private final JdbcOperations jdbcOperations; |
There was a problem hiding this comment.
Лучше использовать NamedParameterJdbcOperations
src/main/resources/schema.sql
Outdated
| ADD_RECORD_DATE DATE, | ||
| CAPTION VARCHAR(255) not null, | ||
| AUTHOR_ID INT not null, | ||
| GENRE_ID INT not null, |
There was a problem hiding this comment.
Если удалить автора или жанра с книгами то они удалятся, а книги останутся с идентификаторами для которых нет записей в соответствующих таблицах. Лучше обеспечить целостность данных на уровне схем БД с помощью внешних ключей
| @Override | ||
| public Book getFullBookById(int id) { | ||
| Book book = bookDao.getById(id); | ||
| return setBookInfo(book); |
There was a problem hiding this comment.
Такой подход приведет к n*2 + 1 запросам к БД (все книги + (жанры + авторы) * количество книг). Т.о. запрос 1000 книг выльется в 2001 запрос. При текущей структуре Book лучше во время запроса книг связать таблицы книг, авторов и жанров и получить все за один раз.
|
|
||
| @DisplayName("Класс AuthorDaoJdbc") | ||
| @RunWith(SpringRunner.class) | ||
| @SpringBootTest(classes = AppTestConfig.class) |
There was a problem hiding this comment.
Дао Jdbc лучше тестировать через @JdbcTest + @Import нужного дао (или @ComponentScan )
| .addScript("test_data.sql") | ||
| .build(); | ||
|
|
||
| authorDaoJdbc = new AuthorDaoJdbc(new JdbcTemplate(db)); |
There was a problem hiding this comment.
- Настройку DataSource лучше сделать в application.yml (
spring.datasource,spring.datasource.data). H2 буде по умолчанию если она есть pom (scope test) - Схема у приложения и тестов лучше, чтобы была одна. Т.е. "test_schema.sql" не нужно указывать
- Репозитории в тесты с контекстом лучше внедрить (
@Autowired).
- Изменены запросы книг. - Добавление внешних ключей для таблицы книг. - Изменение сущности Book. - Изменение типа id.
- Использование @jdbcTest.
No description provided.