DEV Community

Cover image for Spring Boot JPA + H2 example: Build a CRUD Rest APIs
bezkoder
bezkoder

Posted on • Edited on • Originally published at bezkoder.com

Spring Boot JPA + H2 example: Build a CRUD Rest APIs

In this tutorial, we’re gonna build a Spring Boot Rest CRUD API example with Maven that use Spring Data JPA to interact with H2 database. You’ll know:

  • How to configure Spring Data, JPA, Hibernate to work with Database
  • How to define Data Models and Repository interfaces
  • Way to create Spring Rest Controller to process HTTP requests
  • Way to use Spring Data JPA to interact with H2 Database

For more details, please visit:
https://bezkoder.com/spring-boot-jpa-h2-example/

Using JdbcTemplate instead:
Spring Boot JdbcTemplate example: CRUD Rest API

Overview of Spring Boot JPA + H2 example

We will build a Spring Boot Rest Apis using Spring Data JPA with H2 Database for a Tutorial application in that:

  • Each Tutotial has id, title, description, published status.
  • Apis help to create, retrieve, update, delete Tutorials.
  • Apis also support custom finder methods such as find by published status or by title.

These are APIs that we need to provide:

  • POST /api/tutorials: create new Tutorial
  • GET /api/tutorials: retrieve all Tutorials
  • GET /api/tutorials/[id]: retrieve a Tutorial by :id
  • PUT /api/tutorials/[id]: update a Tutorial by :id
  • DELETE /api/tutorials/[id]: delete a Tutorial by :id
  • DELETE /api/tutorials: delete all Tutorials
  • GET /api/tutorials/published: find all published Tutorials
  • GET /api/tutorials?title=[keyword]: find all Tutorials which title contains keyword

– We make CRUD operations & finder methods with Spring Data JPA’s JpaRepository.
– The database will be H2 Database (in memory or on disk) by configuring project dependency & datasource.

Run the Spring Boot JPA + H2 example

Run Spring Boot application with command: mvn spring-boot:run.
tutorials table will be automatically generated in Database.

Let's open H2 console with url: http://localhost:8080/h2-ui:

  • For In-memory database:

spring-boot-jpa-h2-example-crud-rest-api-login-h2-console-in-memory

  • For on Disk database:

spring-boot-jpa-h2-example-crud-rest-api-login-h2-console-on-disk

Click on Connect button, then check H2 database, you can see things like this:

spring-boot-jpa-h2-example-crud-rest-api-database-table

Create some Tutorials:

spring-boot-jpa-h2-database-example-crud-create-tutorial

H2 database tutorials table after that:

spring-boot-jpa-h2-database-example-crud-create-tutorial-database-table

Update some Tutorials:

spring-boot-jpa-h2-database-example-crud-update-tutorial

The table data is changed:

spring-boot-jpa-h2-database-example-crud-retrieve-tutorial-database

Retrieve all Tutorials:

spring-boot-jpa-h2-database-example-crud-retrieve-all-tutorial

Retrieve a Tutorial by Id:

spring-boot-jpa-h2-database-example-crud-retrieve-one-tutorial

Find all published Tutorials:

spring-boot-jpa-h2-database-example-crud-search-tutorial-by-status

Find all Tutorials which title contains string 'ot':

spring-boot-jpa-h2-database-example-crud-search-tutorial

Delete a Tutorial:

spring-boot-jpa-h2-database-example-crud-delete-one-tutorial

spring-boot-jpa-h2-database-example-crud-delete-one-tutorial-database

Delete all Tutorials:

spring-boot-jpa-h2-database-example-crud-delete-all-tutorial

H2 database table is clean now:

spring-boot-jpa-h2-database-example-crud-delete-all-tutorial-database

Technology

  • Java 8
  • Spring Boot 2.4 (with Spring Web MVC, Spring Data JPA)
  • H2 Database
  • Maven 3.6.1

Project Structure

spring-boot-jpa-h2-database-example-crud-project-structure

Let me explain it briefly.

Tutorial data model class corresponds to entity and table tutorials.
TutorialRepository is an interface that extends JpaRepository for CRUD methods and custom finder methods. It will be autowired in TutorialController.
TutorialController is a RestController which has request mapping methods for RESTful requests such as: getAllTutorials, createTutorial, updateTutorial, deleteTutorial, findByPublished
– Configuration for Spring Datasource, JPA & Hibernate in application.properties.
pom.xml contains dependencies for Spring Boot and H2 Database.

Source Code

Tutorial link with details, implementation (step by step) and Github:
https://bezkoder.com/spring-boot-jpa-h2-example/

JdbcTemplate instead:
Spring Boot JdbcTemplate example: CRUD Rest API

Further Reading

Using other databases:
Spring JPA + PostgreSQL
Spring JPA + MySQL
Spring Data + MongoDB

If you want to add Pagination to this Spring project, you can find the instruction at:
Spring Boot Pagination & Filter example | Spring JPA, Pageable

To sort/order by multiple fields:
Spring Data JPA Sort/Order by multiple Columns | Spring Boot

Handle Exception for this Rest APIs is necessary:
Spring Boot @ControllerAdvice & @ExceptionHandler example
@RestControllerAdvice example in Spring Boot

Or way to write Unit Test for the JPA Repository:
Spring Boot Unit Test for JPA Repositiory with @DataJpaTest

Top comments (1)

Collapse
 
gorynych profile image
Stepan Mozyra

Nice article.

But totally useless since we have spring-data-rest-webmvc. All you need is - just a model, and repository extends CrudRepository. That's it. Completely ;)