Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 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
033c5da
- Добавлены названия тэстов.
uoles Jun 18, 2019
d790008
Изменена струкрура запроса для сущности Book.
Jun 20, 2019
6d1e02f
- Добавление сущности comment и клаччов к ней.
uoles Jun 21, 2019
13c56fc
- Изменение механизма добавления/обновления сущностей.
uoles Jun 22, 2019
f8d2433
Доработка выборки книг.
uoles Jun 22, 2019
1abe9cc
Update README.md
uoles Aug 19, 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
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
# OtusSpringHW-Library
Домашние задания по Spring для Otus с базами данных.

Домашнее задание #6:
- Переписать приложение для хранения книг на ORM.
- Использовать JPA, Hibernate только в качестве JPA-провайдера.
- Добавить комментарии к книгам, и высокоуровневые сервисы, оставляющие комментарии к книгам.
- Покрыть DAO тестами используя H2 базу данных и соответствующий H2 Hibernate-диалект.

### 19-06-19 Доработки:
- Добавлены названия тэстов.
- Связи OneToOne изменены на ManyToOne.

### 19-06-20 Доработки:
- Изменена струкрура запроса для сущности Book.

### 19-06-22 Доработки:
- Добавлена сущность Comment.
- Изменение механизма добавления/обновления сущностей.
- Добавление классов для обработки сущности Comment и покрытие тестами.
168 changes: 168 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
<?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.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-all</artifactId>
<version>1.10.19</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-jdbc</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.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</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>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</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>
</plugins>

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

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

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

@SpringBootApplication
@EnableConfigurationProperties
public class Application {

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
//Console.main(args);
}
}
23 changes: 23 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,23 @@
package ru.otus.mkulikov.app.dao;

import ru.otus.mkulikov.app.model.Author;

import java.util.List;

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

public interface AuthorDao<T extends Author> {

T getById(long id);

List<T> getAllObjects();

int save(T t);

int deleteObject(long id);
}
64 changes: 64 additions & 0 deletions src/main/java/ru/otus/mkulikov/app/dao/AuthorDaoJpa.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package ru.otus.mkulikov.app.dao;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ru.otus.mkulikov.app.model.Author;

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

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

@SuppressWarnings({"SqlNoDataSourceInspection", "ConstantConditions", "SqlDialectInspection"})
@Repository
@Transactional
@RequiredArgsConstructor
public class AuthorDaoJpa implements AuthorDao<Author> {

@PersistenceContext
private EntityManager em;

@Override
public Author getById(long id) {
List<Author> list = em.createQuery("select a from Author a where a.id = :id", Author.class)
.setParameter("id", id)
.getResultList();

em.clear();
return (list != null && !list.isEmpty()) ? list.get(0) : null;
}

@Override
public List<Author> getAllObjects() {
List<Author> list = em.createQuery("select a from Author a order by a.id", Author.class)
.getResultList();

em.clear();
return list;
}

@Override
public int save(Author author) {
if (author.getId() == 0) {
em.persist(author);
} else {
em.merge(author);
}
System.out.println("Author saved with id: " + author.getId());
return 1;
}

@Override
public int deleteObject(long id) {
return em.createQuery("delete from Author a where a.id = :id ")
.setParameter("id", id)
.executeUpdate();
}
}
23 changes: 23 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,23 @@
package ru.otus.mkulikov.app.dao;

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

import java.util.List;

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

public interface BookDao<T extends Book> {

T getById(long id);

List<T> getAllObjects();

int save(T t);

int deleteObject(long id);
}
Loading