Skip to content

Commit

Permalink
close to end
Browse files Browse the repository at this point in the history
  • Loading branch information
banderan committed Jul 1, 2024
1 parent fe6c7d1 commit d960e6b
Show file tree
Hide file tree
Showing 7 changed files with 202 additions and 46 deletions.
13 changes: 5 additions & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,13 @@
</build>

<dependencies>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
</dependency>

</dependencies>

</project>
76 changes: 47 additions & 29 deletions src/main/java/mate/academy/StartClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,61 @@

import mate.academy.dao.BookDao;
import mate.academy.dao.BookDaoImpl;
import mate.academy.model.Book;
import mate.academy.service.BookService;
import mate.academy.service.BookServiceImpl;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class StartClass {
private final static BookDao bookDao = new BookDaoImpl();
private final static BookService bookService = new BookServiceImpl(bookDao);
private final static int AMOUNT_OF_BOOKS = 5;
private final static Long FIRST_BOOK_ID = 1L;
private final static Long SECOND_BOOK_ID = 2L;
private final static Long THIRD_BOOK_ID = 3L;
private final static Long FOURTH_BOOK_ID = 4L;
private final static Long FIFTH_BOOK_ID = 5L;


public static void main(String[] args) {
BookDao bookDao = new BookDaoImpl();
BookService bookService = new BookServiceImpl(bookDao);
/*
bookService.create();//C
bookService.readID();//R
bookService.readAll();
bookService.update();//U
bookService.delete();//D
*/
//------------------------
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root", "root");
String initTable = "src/main/resources/init_db.sql";
List<String> lines = Files.readAllLines(Path.of(initTable));
String sqlCodeForTable = lines.stream()
.collect(Collectors.joining(" "));
PreparedStatement statement = connection.prepareStatement(sqlCodeForTable);
statement.executeUpdate();
} catch (ClassNotFoundException | SQLException | IOException e) {
throw new RuntimeException(e);
List<Book> books = createBook();
Book newBook = new Book("okok", BigDecimal.valueOf(420));

bookService.create(books.get(0));//C
bookService.create(books.get(1));
bookService.create(books.get(2));
bookService.create(books.get(3));
bookService.create(books.get(4));

Optional<Book> book = bookService.readID(SECOND_BOOK_ID);//R

boolean delete = bookService.delete(THIRD_BOOK_ID);//D

Book update = bookService.update(newBook);//U

List<Book> listOfBooks = bookService.readAll();

System.out.println("We have " + book +
", we delete third book? -> " + delete +
" and we updated this book -> " + update);
for (int i = 0; i < listOfBooks.size(); i++) {
System.out.println("Our " + i + "th book: " + listOfBooks.get(i));
}
}

private static List<Book> createBook() {
String title = "Java";
BigDecimal price = BigDecimal.valueOf(12.32);
List<Book> books = new ArrayList<>();
for (int i = 0; i < AMOUNT_OF_BOOKS; i++) {
books.add(new Book(title + i,
price.add(BigDecimal.valueOf(i))));
}
return books;
}
}
121 changes: 113 additions & 8 deletions src/main/java/mate/academy/dao/BookDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,143 @@

import mate.academy.lib.Dao;
import mate.academy.model.Book;

import java.io.IOException;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Dao
public class BookDaoImpl implements BookDao{
public class BookDaoImpl implements BookDao {
private static final int FIRST_QUESTION_MARK_INDEX = 1;
private static final int SECOND_QUESTION_MARK_INDEX = 2;
private static final String ID = "id";
private static final String TITLE = "title";
private static final String PRICE = "price";
private static final String ADD_LINE = " ";
private static final String INIT_DB_SQL = "src/main/resources/init_db.sql";
private static final String TAKE_BOOK_FROM_DB = "SELECT * FROM book WHERE id = ?";
private static final String DELETE_BOOK_FROM_DB = "DELETE * FROM book WHERE id = ?";
private static final String TAKE_BOOKS_FROM_DB = "SELECT * FROM book";
private static final String SAVE_BOOK_IN_DB = "INSERT INTO book (title, price) VALUES (?, ?)";

@Override
public void createTable() {
try (Connection connection = ConnectionUtil.getConnection()) {
String sqlCodeForTable = Files.readAllLines(Path.of(INIT_DB_SQL))
.stream()
.collect(Collectors.joining(ADD_LINE));

PreparedStatement statement = connection.prepareStatement(sqlCodeForTable);
statement.executeUpdate();
} catch (SQLException | IOException e) {
throw new RuntimeException(e);
}
}

@Override
public Book save(Book book) {
return null;
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(SAVE_BOOK_IN_DB,
Statement.RETURN_GENERATED_KEYS)) {

statement.setString(FIRST_QUESTION_MARK_INDEX,
book.getTitle());
statement.setBigDecimal(SECOND_QUESTION_MARK_INDEX,
book.getPrice());
int end = statement.executeUpdate();
if (end < 1) {
throw new RuntimeException("Failed to save book");
}
ResultSet generatedKeys = statement.getGeneratedKeys();
if (generatedKeys.next()) {
Long id = generatedKeys.getObject(FIRST_QUESTION_MARK_INDEX, Long.class);
book.setId(id);
}

} catch (SQLException e) {
throw new RuntimeException(e);
}
return book;
}

@Override
public Optional<Book> findById(Long id) {
return Optional.empty();
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(TAKE_BOOK_FROM_DB)) {

statement.setLong(FIRST_QUESTION_MARK_INDEX, id);
ResultSet resultSet = statement.executeQuery();

if (resultSet.next()) {

Long idFromBook = resultSet.getObject(ID,
Long.class);
String titleFromBook = resultSet.getString(TITLE);
BigDecimal priceFromBook = resultSet.getObject(PRICE,
BigDecimal.class);

Book book = new Book(idFromBook, titleFromBook, priceFromBook);
return Optional.of(book);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return null;
}

@Override
public List<Book> findAll() {
return List.of();
}
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(TAKE_BOOKS_FROM_DB)) {
ResultSet resultSet = statement.executeQuery();
List<Book> books = new ArrayList<>();
while (resultSet.next()) {

@Override
public Book update(Book book) {
return null;
Long idFromBook = resultSet.getObject(ID,
Long.class);
String titleFromBook = resultSet.getString(TITLE);
BigDecimal priceFromBook = resultSet.getObject(PRICE,
BigDecimal.class);

Book book = new Book(idFromBook, titleFromBook, priceFromBook);
books.add(book);
}
return books;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

@Override
public boolean deleteById(Long id) {
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(DELETE_BOOK_FROM_DB)) {

statement.setLong(FIRST_QUESTION_MARK_INDEX, id);
ResultSet resultSet = statement.executeQuery();

if (resultSet.next()) {
return true;
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return false;
}

@Override
public Book update(Book book) {
long bookID = book.getId();
boolean deleteById = deleteById(bookID);
if (deleteById) {
save(book);
}
return book;
}
}
22 changes: 22 additions & 0 deletions src/main/java/mate/academy/dao/ConnectionUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package mate.academy.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionUtil {
private static final String DB_URL = "jdbc:mysql://localhost:3306/test";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "root";
private static final String CLASS_NAME = "com.mysql.cj.jdbc.Driver";
static {
try {
Class.forName(CLASS_NAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD);
}
}
14 changes: 14 additions & 0 deletions src/main/java/mate/academy/model/Book.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ public class Book {
private String title;
private BigDecimal price;

public Book() {
}

public Book(String title, BigDecimal price) {
this.title = title;
this.price = price;
}

public Book(Long id, String title, BigDecimal price) {
this.id = id;
this.title = title;
this.price = price;
}

public Long getId() {
return id;
}
Expand Down
1 change: 0 additions & 1 deletion src/main/java/mate/academy/service/BookService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package mate.academy.service;

import mate.academy.model.Book;

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

Expand Down
1 change: 1 addition & 0 deletions src/main/java/mate/academy/service/BookServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public BookServiceImpl(BookDao bookDao) {
bookDao.createTable();
}


@Override
public Book create(Book book) {
return bookDao.save(book);
Expand Down

0 comments on commit d960e6b

Please sign in to comment.