Spring Boot is trending and it is an extension of the spring framework but it reduces the huge configuration settings that need to be set in a spring framework. In terms of dependencies, it reduces a lot and minimized the dependency add-ons. It extends maximum support to all RDBMS databases like MySQL and NoSQL databases like MongoDB. In this article let us see a sample project connecting Spring Boot and MySQL.
Implementation
Project Structure:
This is a maven project
pom.xml
XML
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 < modelVersion >4.0.0</ modelVersion > < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >2.7.0</ version > < relativePath /> </ parent > < groupId >com.gfg</ groupId > < artifactId >springboot_mysql_project</ artifactId > < version >0.0.1-SNAPSHOT</ version > < name >springboot_mysql_project</ name > < description >Demo project for Spring Boot with MySQL</ description > < properties > < java.version >1.8</ java.version > </ properties > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-data-jpa</ artifactId > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > <!-- MySQL dependency --> < dependency > < groupId >mysql</ groupId > < artifactId >mysql-connector-java</ artifactId > < scope >runtime</ scope > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-test</ artifactId > < scope >test</ scope > </ dependency > </ dependencies > < build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > </ plugin > </ plugins > </ build > </ project > |
The important file that helps to tell about MySQL connectivity information
spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/neveropen?serverTimezone=UTC&useSSL=false&autoReconnect=true spring.datasource.username=****#Specify the proper user name spring.datasource.password=****#Specify the proper password then only the application can be connected with MySQL
Spring boot can be run as Java application, which means there should be the main class
SampleAccessingOfMysqlApplication.java
Java
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SampleAccessingOfMysqlApplication { public static void main(String[] args) { SpringApplication.run(SampleAccessingOfMysqlApplication. class , args); } } |
Let us start with the bean class
Book.java
Java
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; // This tells Hibernate to make // a table out of this class @Entity public class Book { @Id @GeneratedValue (strategy=GenerationType.AUTO) private Integer id; private String bookName; private String isbnNumber; public String getBookName() { return bookName; } public void setBookName(String bookName) { this .bookName = bookName; } public String getIsbnNumber() { return isbnNumber; } public void setIsbnNumber(String isbnNumber) { this .isbnNumber = isbnNumber; } public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } } |
BookRepository.java
Java
package com.gfg; import org.springframework.data.repository.CrudRepository; // This will be AUTO IMPLEMENTED by Spring // into a Bean called Book // CRUD refers Create, Read, Update, Delete public interface BookRepository extends CrudRepository<Book, Integer> { } |
BookController.java
Java
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; // This means that this // class is a Controller @Controller // This means URL's start with /geek (after Application path) @RequestMapping (path= "/geek" ) public class BookController { // This means to get the bean called geekuserRepository // Which is auto-generated by Spring, we will use it // to handle the data @Autowired private BookRepository bookRepository; // Map ONLY POST Requests @PostMapping (path= "/addbook" ) public @ResponseBody String addBooks ( @RequestParam String bookName , @RequestParam String isbnNumber) { // @ResponseBody means the returned String // is the response, not a view name // @RequestParam means it is a parameter // from the GET or POST request Book book = new Book(); book.setBookName(bookName); book.setIsbnNumber(isbnNumber); bookRepository.save(book); return "Details got Saved" ; } @GetMapping (path= "/books" ) public @ResponseBody Iterable<Book> getAllUsers() { // This returns a JSON or XML with the Book return bookRepository.findAll(); } } |
The application can be run as follows :
Console Output:
Now we can run and see the following. As we are entering the book details via POST, let us use the Postman client to execute the same
http://localhost:8080/geek/addbook --Note : In the controller, it has been given that all urls should have geek as pattern and after that 'addbook' is the mapping that helps to add the books to the table named 'book'. As in application.properties, spring.jpa.hibernate.ddl-auto=update is available, if there is no table named 'book' is present, it is automatically created
We can check the same by executing the below URL
http://localhost:8080/geek/books
Similarly, we can add the books we want and can add
Let us check the same in MySQL as well
So it is easier to connect MySQL and Spring Boot. Efficiently we can integrate spring boot and MySQL as in the above sample project.