diff --git a/pom.xml b/pom.xml
index 683e84ec..76157d43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,15 @@
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+
+
diff --git a/src/main/java/mate/academy/Book.java b/src/main/java/mate/academy/Book.java
new file mode 100644
index 00000000..244ae7b2
--- /dev/null
+++ b/src/main/java/mate/academy/Book.java
@@ -0,0 +1,38 @@
+package mate.academy;
+
+public class Book {
+ private Long id;
+ private String title;
+ private int price;
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getTitle() {
+ return this.title;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ @Override
+ public String toString() {
+ return "Book{" + "id=" + id
+ + ", title='" + title + '\''
+ + ", price=" + price + '}';
+ }
+}
diff --git a/src/main/java/mate/academy/ConnectionUtill.java b/src/main/java/mate/academy/ConnectionUtill.java
new file mode 100644
index 00000000..08dea28d
--- /dev/null
+++ b/src/main/java/mate/academy/ConnectionUtill.java
@@ -0,0 +1,28 @@
+package mate.academy;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class ConnectionUtill {
+ private static final String DB_URL = "jdbc:mysql://localhost:3306/book";
+ private static final Properties DB_PROPERTIES;
+
+ static {
+ DB_PROPERTIES = new Properties();
+ DB_PROPERTIES.put("user", "Admin");
+ DB_PROPERTIES.put("password", "admin");
+
+ try {
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("Can not load JDBC driver",e);
+ }
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return DriverManager.getConnection(DB_URL, DB_PROPERTIES);
+ }
+
+}
diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java
index 0058fbf9..c1814869 100644
--- a/src/main/java/mate/academy/Main.java
+++ b/src/main/java/mate/academy/Main.java
@@ -1,7 +1,20 @@
package mate.academy;
+import mate.academy.dao.BookDao;
+import mate.academy.dao.BookDaoImpl;
+
public class Main {
public static void main(String[] args) {
+ BookDao bookDao = new BookDaoImpl();
+ System.out.println(bookDao.get(3L));
+
+ Book kobzar = new Book();
+ kobzar.setTitle("Kobzar");
+ kobzar.setPrice(30);
+
+ Book kobzarUpdated = bookDao.save(kobzar);
+ System.out.println(kobzarUpdated);
}
}
+
diff --git a/src/main/java/mate/academy/dao/BookDao.java b/src/main/java/mate/academy/dao/BookDao.java
new file mode 100644
index 00000000..7878d629
--- /dev/null
+++ b/src/main/java/mate/academy/dao/BookDao.java
@@ -0,0 +1,16 @@
+package mate.academy.dao;
+
+import java.util.Optional;
+import mate.academy.Book;
+
+public interface BookDao {
+ Book save(Book book);
+
+ Book get(Long id);
+
+ Optional findById(Long id);
+
+ Book update(Book book);
+
+ boolean delete(Book book);
+}
diff --git a/src/main/java/mate/academy/dao/BookDaoImpl.java b/src/main/java/mate/academy/dao/BookDaoImpl.java
new file mode 100644
index 00000000..57aba400
--- /dev/null
+++ b/src/main/java/mate/academy/dao/BookDaoImpl.java
@@ -0,0 +1,74 @@
+package mate.academy.dao;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Optional;
+import mate.academy.Book;
+import mate.academy.ConnectionUtill;
+
+public class BookDaoImpl implements BookDao {
+
+ @Override
+ public Book save(Book book) {
+ String sql = "INSERT INTO books (title, price) VALUES (?, ?)";
+ try (Connection connection = ConnectionUtill.getConnection();
+ PreparedStatement statement = connection.prepareStatement(sql,
+ Statement.RETURN_GENERATED_KEYS)) {
+ statement.setString(1, book.getTitle());
+ statement.setInt(2, book.getPrice());
+ int affectedRows = statement.executeUpdate();
+ if (affectedRows < 1) {
+ throw new RuntimeException("Expected to insert at least one row, "
+ + "but inserted 0 rows");
+ }
+ ResultSet generatedKeys = statement.getGeneratedKeys();
+ if (generatedKeys.next()) {
+ Long id = generatedKeys.getObject(1, Long.class);
+ book.setId(id);
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException("Can't add new book: " + book, e);
+ }
+ return book;
+ }
+
+ @Override
+ public Book get(Long id) {
+ String sql = "SELECT * FROM books WHERE id = ?";
+ try (Connection connection = ConnectionUtill.getConnection();
+ PreparedStatement statement = connection.prepareStatement(sql)) {
+ statement.setLong(1, id);
+ ResultSet resultSet = statement.executeQuery();
+ if (resultSet.next()) {
+ String title = resultSet.getString("title");
+ int price = resultSet.getObject("price", Integer.class);
+ Book book = new Book();
+ book.setId(id);
+ book.setPrice(price);
+ book.setTitle(title);
+ return book;
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException("Cannot create a connection to the DB", e);
+ }
+ return null;
+ }
+
+ @Override
+ public Optional findById(Long id) {
+ return Optional.empty();
+ }
+
+ @Override
+ public Book update(Book book) {
+ return null;
+ }
+
+ @Override
+ public boolean delete(Book book) {
+ return false;
+ }
+}
diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql
new file mode 100644
index 00000000..9a4444b4
--- /dev/null
+++ b/src/main/resources/init_db.sql
@@ -0,0 +1,10 @@
+SELECT * FROM books;
+
+INSERT INTO books (id, title, price) VALUE (1,'Harry Potter', 25);
+
+
+UPDATE books SET title = 'Harry Potter' WHERE id = 1;
+
+DELETE FROM books WHERE id = 5;
+
+