From d941e3e09a56eaf5b0b4b3a98647c21d89530653 Mon Sep 17 00:00:00 2001
From: M2kishore <kishoremeenakshi2001@gmail.com>
Date: Sun, 27 Dec 2020 13:20:23 +0530
Subject: [PATCH] added database connectivity MySQL

---
 .../java/com/example/bookmanagement/Book.java | 46 +++++++++---
 .../bookmanagement/BookController.java        | 73 ++++++++++---------
 .../bookmanagement/BookRepository.java        |  6 +-
 .../bookmanagement/SimpleController.java      | 32 +++++++-
 src/main/resources/application.properties     | 14 +++-
 src/main/resources/database.sql               | 13 ++++
 src/main/resources/templates/index.html       |  7 +-
 .../SpringBootBootstrapLiveTest.java          | 26 +++++++
 8 files changed, 159 insertions(+), 58 deletions(-)
 create mode 100644 src/main/resources/database.sql
 create mode 100644 src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java

diff --git a/src/main/java/com/example/bookmanagement/Book.java b/src/main/java/com/example/bookmanagement/Book.java
index ce0dd85..d058d60 100644
--- a/src/main/java/com/example/bookmanagement/Book.java
+++ b/src/main/java/com/example/bookmanagement/Book.java
@@ -2,20 +2,48 @@ package com.example.bookmanagement;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.Table;
 
 @Entity
+@Table
 public class Book {
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    private long id;
+@Id
+private Long id;
+@Column
+private String book_name;
+@Column
+private String author_name;
 
-    @Column(nullable = false, unique = true)
-    private String title;
+public Book(){ }
 
-    @Column(nullable = false)
-    private String author;
+public Book(Long id, String book_name, String author_name, String isbn) {
+this.id=id;
+this.book_name=book_name;
+this.author_name=author_name;
+}
+
+public Long getId() {
+return id;
+}
+
+public void setId(Long id) {
+this.id = id;
+}
+
+public String getBook_name() {
+return book_name;
+}
+
+public void setBook_name(String book_name) {
+this.book_name = book_name;
+}
+
+public String getAuthor_name() {
+return author_name;
+}
 
+public void setAuthor_name(String author_name) {
+this.author_name = author_name;
 }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/bookmanagement/BookController.java b/src/main/java/com/example/bookmanagement/BookController.java
index 20939db..7462f0a 100644
--- a/src/main/java/com/example/bookmanagement/BookController.java
+++ b/src/main/java/com/example/bookmanagement/BookController.java
@@ -1,6 +1,7 @@
 package com.example.bookmanagement;
 
 import java.util.List;
+import java.util.Optional;
 
 import com.example.bookmanagement.error.BookIdMismatchException;
 import com.example.bookmanagement.error.BookNotFoundException;
@@ -17,48 +18,48 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
-@RequestMapping("/api/books")
 public class BookController {
 
-    @Autowired
-    private BookRepository bookRepository;
+@Autowired
+BookRepository bookRepository;
 
-    @GetMapping
-    public Iterable<Book> findAll() {
-        return bookRepository.findAll();
-    }
+@GetMapping("/getAllBooks")
+public List<Book> getAllBooks()
+{
+return bookRepository.findAll();
+}
 
-    @GetMapping("/title/{bookTitle}")
-    public List findByTitle(@PathVariable String bookTitle) {
-        return bookRepository.findByTitle(bookTitle);
-    }
+@GetMapping("/getBookById/{id}")
+public Optional<Book> getBookById(@PathVariable Long id)
+{
+  System.out.println(bookRepository.findById(id));
+return bookRepository.findById(id);
+}
 
-    @GetMapping("/{id}")
-    public Book findOne(@PathVariable Long id) {
-        return bookRepository.findById(id)
-          .orElseThrow(BookNotFoundException::new);
-    }
+@PostMapping("/addBook")
+public Book addBook(@RequestBody Book book)
+{
+return bookRepository.save(book);
+}
 
-    @PostMapping
-    @ResponseStatus(HttpStatus.CREATED)
-    public Book create(@RequestBody Book book) {
-        return bookRepository.save(book);
-    }
+@PutMapping("/updateBook/{id}")
+public Book updateBook(@PathVariable Long id, @RequestBody Book bookDetails)
+{
+Optional<Book> book = bookRepository.findById(id);
+Book book_new=book.get();
+book_new.setAuthor_name(bookDetails.getAuthor_name());
+book_new.setBook_name(bookDetails.getBook_name());
+book_new.setIsbn(bookDetails.getIsbn());
+return bookRepository.save(book_new);
 
-    @DeleteMapping("/{id}")
-    public void delete(@PathVariable Long id) {
-        bookRepository.findById(id)
-          .orElseThrow(BookNotFoundException::new);
-        bookRepository.deleteById(id);
-    }
+}
 
-    @PutMapping("/{id}")
-    public Book updateBook(@RequestBody Book book, @PathVariable Long id) {
-        if (book.getId() != id) {
-          throw new BookIdMismatchException();
-        }
-        bookRepository.findById(id)
-          .orElseThrow(BookNotFoundException::new);
-        return bookRepository.save(book);
-    }
+@DeleteMapping("/deleteBook/{id}")
+public void deleteBook(@PathVariable Long id)
+{
+Optional<Book> book=bookRepository.findById(id);
+Book book_new=book.get();
+bookRepository.delete(book_new);
 }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/bookmanagement/BookRepository.java b/src/main/java/com/example/bookmanagement/BookRepository.java
index fb72f6c..b320361 100644
--- a/src/main/java/com/example/bookmanagement/BookRepository.java
+++ b/src/main/java/com/example/bookmanagement/BookRepository.java
@@ -1,8 +1,6 @@
 package com.example.bookmanagement;
+import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
+public interface BookRepository extends JpaRepository<Book, Long>{
 
-import org.springframework.data.repository.CrudRepository;
-public interface BookRepository extends CrudRepository<Book, Long> {
-    List<Book> findByTitle(String title);
 }
\ No newline at end of file
diff --git a/src/main/java/com/example/bookmanagement/SimpleController.java b/src/main/java/com/example/bookmanagement/SimpleController.java
index 90a1f48..8ea0a41 100644
--- a/src/main/java/com/example/bookmanagement/SimpleController.java
+++ b/src/main/java/com/example/bookmanagement/SimpleController.java
@@ -2,18 +2,46 @@ package com.example.bookmanagement;
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 
 @Controller
 public class SimpleController {
     @Value("${spring.application.name}")
     String appName;
 
-    @GetMapping("/")
+    /*@GetMapping("/")
     public String homePage(Model model) {
         System.out.println("qwerty");
         model.addAttribute("appName", appName);
         return "index";
+    }*/
+    @GetMapping("/")
+    public String root() {
+        return "index";
     }
+
+    /*@GetMapping("/user")
+    public String userIndex() {
+        return "user/index";
+    }*/
+
+    @GetMapping("/login")
+    public String login() {
+        return "login";
+    }
+
+    @PostMapping("/")
+    public String checkCredentials() {
+        if(){
+            return "Book";
+        }else{
+            return "loginError";
+        }
+    }
+
+    /*@GetMapping("/access-denied")
+    public String accessDenied() {
+        return "/error/access-denied";
+    }*/
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index fc80b54..33d8826 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -6,7 +6,13 @@ spring.thymeleaf.suffix=.html
 
 spring.application.name=Bootstrap Spring Boot
 
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1
-spring.datasource.username=sa
-spring.datasource.password=
\ No newline at end of file
+
+## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
+spring.datasource.url = jdbc:mysql://localhost:3306/library
+spring.datasource.username =root
+spring.datasource.password =root
+## Hibernate Properties
+# The SQL dialect makes Hibernate generate better SQL for the chosen database
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
+# Hibernate ddl auto (create, create-drop, validate, update)
+spring.jpa.hibernate.ddl-auto = update
\ No newline at end of file
diff --git a/src/main/resources/database.sql b/src/main/resources/database.sql
new file mode 100644
index 0000000..850223c
--- /dev/null
+++ b/src/main/resources/database.sql
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS billionaires;
+
+CREATE TABLE billionaires (
+  id INT AUTO_INCREMENT  PRIMARY KEY,
+  first_name VARCHAR(250) NOT NULL,
+  last_name VARCHAR(250) NOT NULL,
+  career VARCHAR(250) DEFAULT NULL
+);
+
+INSERT INTO billionaires (first_name, last_name, career) VALUES
+  ('Aliko', 'Dangote', 'Billionaire Industrialist'),
+  ('Bill', 'Gates', 'Billionaire Tech Entrepreneur'),
+  ('Folrunsho', 'Alakija', 'Billionaire Oil Magnate');
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 4c289ef..a1d5307 100644
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -7,10 +7,11 @@
 </head>
 <body>
 <div layout:fragment="content" th:remove="tag">
-    <h1>Hello Spring Security</h1>
-    <p>This is an unsecured page, but you can access the secured pages after authenticating.</p>
+    <h1>Click the link below to login</h1>
+    <p></p>
+    <br>
     <ul>
-        <li>Go to the <a href="/" th:href="@{/}">secured pages</a></li>
+        <li><a href="/login" th:href="@{/login}">link</a></li>
     </ul>
 </div>
 </body>
diff --git a/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java b/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java
new file mode 100644
index 0000000..107c311
--- /dev/null
+++ b/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java
@@ -0,0 +1,26 @@
+package com.example.bookmanagement;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.tomcat.util.http.parser.MediaType;
+
+public class SpringBootBootstrapLiveTest {
+
+    private static final String API_ROOT
+      = "http://localhost:8085/api/books";
+
+    private Book createRandomBook() {
+        Book book = new Book();
+        book.setTitle(randomAlphabetic(10));
+        book.setAuthor(randomAlphabetic(15));
+        return book;
+    }
+
+    private String createBookAsUri(Book book) {
+        Response response = RestAssured.given()
+          .contentType(MediaType.APPLICATION_JSON_VALUE)
+          .body(book)
+          .post(API_ROOT);
+        return API_ROOT + "/" + ((Object) response).jsonPath().get("id");
+    }
+}
-- 
GitLab