Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
2dd30d9
Добавление файлов.
Apr 22, 2019
4533cd4
- Добавление скриптов.
May 23, 2019
628b8ae
- Добавление dao объектов.
May 23, 2019
b782bf3
Чтение вводимых данных.
May 24, 2019
56ba6a0
Доработки моделей.
May 24, 2019
f8f5da1
- Добавление DAO для таблиц авторов и жанров.
May 27, 2019
91e179e
Рефакторинг, добавление новых shell команд.
May 27, 2019
eaed856
Рефакторинг.
May 27, 2019
034a299
Добавление тестов для GenreDaoJdbc.
May 28, 2019
0c2804a
Добавление тестов для BookDaoJdbc.
May 28, 2019
64febb3
Доработка AuthorDaoJdbc, BookDaoJdbc и тесты к ним.
May 29, 2019
27e6538
Добавление тестов, расширение функционала сервиса.
May 29, 2019
f23fcd4
Добавление тестов для BooksManageSevice.
May 29, 2019
486d0a3
- Доработка функционала.
May 30, 2019
ff74ea4
- JdbcOperations заменен на NamedParameterJdbcOperations.
May 31, 2019
b019b1b
- Изменены тесты.
Jun 5, 2019
4599977
Описание задания.
Jun 6, 2019
0ed6680
Работа с бд через jpa.
Jun 13, 2019
a9d5968
Рефакторинг.
Jun 13, 2019
b228def
- Работа с бд через jpa.
uoles Jun 13, 2019
88398c9
Настройка тестов для jpa.
Jun 14, 2019
6447037
- Доработка dao.
Jun 17, 2019
f8ca945
Доработка тестов и скриптов для бд.
Jun 17, 2019
e2f98fd
Рефакторинг.
Jun 17, 2019
31e0dfa
Обновление readme.
Jun 18, 2019
033c5da
- Добавлены названия тэстов.
uoles Jun 18, 2019
d790008
Изменена струкрура запроса для сущности Book.
Jun 20, 2019
2fde702
Использование Spring Data JPA.
Jun 20, 2019
93be77d
Merge branch 'feature/hw-06' into feature/hw-07-spring-data-jpa
Jun 20, 2019
6d1e02f
- Добавление сущности comment и клаччов к ней.
uoles Jun 21, 2019
d45245e
Переработка под Data Jpa.
Jun 21, 2019
13c56fc
- Изменение механизма добавления/обновления сущностей.
uoles Jun 22, 2019
f8d2433
Доработка выборки книг.
uoles Jun 22, 2019
61e5a5a
Merge branch 'feature/hw-06' into feature/hw-07-spring-data-jpa
uoles Jun 22, 2019
2e578aa
- Переработка под Data Jpa.
uoles Jun 22, 2019
de67a82
Переработка под Data Jpa.
Jun 24, 2019
871c88f
Переработка под Data Jpa.
Jun 25, 2019
297e33e
Рефакторинг.
Jun 25, 2019
691f77f
- Убрал @RunWith(SpringRunner.class).
Jun 26, 2019
39d6ef9
Интеграция Mockito.
Jun 27, 2019
30868a5
Доработка тестов.
Jul 5, 2019
cf5d07d
- Использование Mockito для тестирования сервисов.
uoles Jul 6, 2019
057e0f9
Рефакторинг.
uoles Jul 6, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,12 @@
# OtusSpringHW-Library
Домашние задания по Spring для Otus с базами данных.

Домашнее задание #7:
- Переделать билиотеку на Spring Data JPA.
- Реализовать весь функционал работы с БД в приложении книг с использованием spring-data-jpa репозиториев.

### 19-06-22 Доработки
- Подключил liquibase.

### 19-07-07 Доработки
- Использование Mockito для тестирования сервисов.
- Использование @NamedEntityGraph.
220 changes: 220 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<name>home-work</name>

<groupId>ru.otus.mkulikov</groupId>
<artifactId>home-work</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<encoding>UTF-8</encoding>
</properties>

<dependencies>
<dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.3</version>
</dependency>

<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>

<!-- tests -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.12.2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.4.1</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.21.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>2.23.0</version>
<scope>test</scope>
</dependency>

<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework.shell</groupId>
<artifactId>spring-shell-starter</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

<!-- H2 database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>

<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>

<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${encoding}</encoding>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>

<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.6.3</version>
<configuration>
<propertyFileWillOverride>true</propertyFileWillOverride>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<changeLogFile>classpath:/db/changelog/db.changelog-master.yaml</changeLogFile>
</configuration>
<!--<executions>-->
<!--<execution>-->
<!--<phase>package</phase>-->
<!--<goals>-->
<!--<goal>update</goal>-->
<!--</goals>-->
<!--</execution>-->
<!--</executions>-->
<dependencies>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.23</version>
</dependency>
</dependencies>
</plugin>
</plugins>

<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.csv</include>
<include>**/*.properties</include>
<include>**/*.txt</include>
<include>**/*.yml</include>
<include>**/*.sql</include>
<include>**/*.yaml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
20 changes: 20 additions & 0 deletions src/main/java/ru/otus/mkulikov/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ru.otus.mkulikov;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 2019-03-14
* Time: 15:27
*/

@SpringBootApplication
public class Application {

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
//Console.main(args);
}
}
17 changes: 17 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/AuthorDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.mkulikov.app.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ru.otus.mkulikov.app.model.Author;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 23.05.2019
* Time: 17:06
*/

@Repository
public interface AuthorDao extends JpaRepository<Author, Long> {

}
17 changes: 17 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/BookDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.mkulikov.app.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ru.otus.mkulikov.app.model.Book;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 23.05.2019
* Time: 13:28
*/

@Repository
public interface BookDao extends JpaRepository<Book, Long>, BookDaoCustom<Book> {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    @EntityGraph("BookGraph")
    List<Book> findAll();

    @EntityGraph("BookGraph")
    Optional<Book> findById(long id);

}
22 changes: 22 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/BookDaoCustom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.otus.mkulikov.app.dao;

import org.springframework.stereotype.Repository;
import ru.otus.mkulikov.app.model.Book;

import java.util.List;
import java.util.Optional;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 24.06.2019
* Time: 11:48
*/

@Repository
public interface BookDaoCustom<T extends Book> {

Optional<T> getById(long id);

List<T> getAllObjects();
}
49 changes: 49 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/BookDaoCustomImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package ru.otus.mkulikov.app.dao;

import lombok.RequiredArgsConstructor;
import ru.otus.mkulikov.app.model.Book;

import javax.persistence.EntityGraph;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
import java.util.Optional;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 23.05.2019
* Time: 13:28
*/

@SuppressWarnings({"SqlNoDataSourceInspection", "ConstantConditions", "SqlDialectInspection"})
@RequiredArgsConstructor
public class BookDaoCustomImpl implements BookDaoCustom<Book> {

@PersistenceContext
private EntityManager em;

@Override
public Optional<Book> getById(long id) {
EntityGraph entityGraph = em.getEntityGraph("BookGraph");
List<Book> books = em.createQuery("select b from Book b where b.id = :id ", Book.class)
.setHint("javax.persistence.fetchgraph", entityGraph)
.setParameter("id", id)
.getResultList();

em.clear();
return (books != null && !books.isEmpty()) ? Optional.of(books.get(0)) : Optional.empty();
}

@Override
public List<Book> getAllObjects() {
EntityGraph entityGraph = em.getEntityGraph("BookGraph");
List<Book> books = em.createQuery("select b from Book b order by b.id ", Book.class)
.setHint("javax.persistence.fetchgraph", entityGraph)
.getResultList();

em.clear();
return books;
}
}

17 changes: 17 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/CommentDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.mkulikov.app.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ru.otus.mkulikov.app.model.Comment;

/**
* Created by IntelliJ IDEA.
* Developer: Maksim Kulikov
* Date: 20.06.2019
* Time: 23:48
*/

@Repository
public interface CommentDao extends JpaRepository<Comment, Long>, CommentDaoCustom<Comment> {

}
Loading