Spring Data and Spring Data JPA - Quick Tutorial for Beginners


In this article, we take a look at Spring Data and Spring Data JPA.

You will Learn

  • What are the challenges with existing data store integration solutions?
  • What is Spring Data?
  • What are the aims of Spring Data?
  • How does Spring Data abstract talking to different data stores?
  • What is Spring Data JPA?
  • How does Spring Data JPA help in making JPA easier?

Challenges with Existing Data Store solutions

Let’s start with looking at problems with some of the existing solutions for storing data to data stores.

Duplication of Code

Let’s start with looking at one of the important challenges with JPA - Duplicate code.

Let’s look at a couple of data layer classes to manage Passport and Student entities.

Passport


	@PersistenceContext
	private EntityManager entityManager;
	
	public Passport getPassport(final long id) {
		return entityManager.find(Passport.class, id);
	}

	public Passport createPassport(Passport passport) {
		return entityManager.merge(passport);
	}

Student


	@PersistenceContext
	private EntityManager entityManager;

	public Student retrieveStudent(final long id) {
		return entityManager.find(Student.class, id);
	}

	public Student createStudent(Studetn student) {
		return entityManager.merge(student);
	}

When we look at the above two snippets of code, we can see that there is a lot of similarity in the code structurally. Any additional methods written for the two entities would be very similar.

A straightforward approach to deal with such duplication would be to create a common interface to extract the functionality, and implement that interface in an application.

Explosion Of Data Stores

Nowadays, we are not confined to talking to just relational databases. We have a variety of data stores including NoSQL data stores such as MongoDB, Hadoop and Cassandra.

Spring Data

Spring Data provides common abstractions to store and retrieve data from a data store. This eliminates the need to connect and interact differently, with different types of data stores.

Such abstractions allow you to connect in the same way to relational databases and NO-SQL databases. It enables you to switch effortlessly between data stores.

Spring Data JPA

Spring Data JPA is an extension of Spring Data, to connect to JPA - concerned with talking with relational databases.

Using Spring Data JPA

This is how you go about using this framework:


	public interface StudentRepository extends CrudRepository<Student, Long> {
		//...
	}

	public interface PassportRepository extends CrudRepository<Passport, Long> {
		//...
	}

Each of the repositories extends the base CrudRepository, which is a repository that supports the CRUD operations - Create, read, Update and Delete.

CrudRepository Interface

Let’s look at some of the methods in CrudRepository interface:


	public interface Crudrepository<T, ID> extends Repository<T, ID> {
		<S extends T> S save(Entity s);
		Optional<T> findById(ID id);
		boolean existsById(ID id);
		Iterable<T> findAll();
		void deleteById(ID id);
		long count();
		//Other methods
	}

Exploring Other Repositories

The CrudRepository is a very useful interface, and there are other repositories built on top of this. Let’s look at a few of them.

The PaginationAndSortingRepository


	public interface PaginationAndSortingRepository<T, ID> extends CrudRepository<T,ID> {
		Iterable<T> findAll(Sort sort);
		Page<T> findAll(Pageable pageable);
	}

If you wanted to access a particular page in a set of search results, or want them sorted in a specific order, then this repository is of good use.

Do check out our video on the same topic:

image info

Summary

In this article, we talked about Spring Data, and Spring Data JPA.

Spring Data offers common abstractions, which allows us to talk to different data stores, both relational and otherwise. It is independent of any kind of data store. Spring Data JPA is an Spring Data Extension to work with JPA relational data stores.

Congratulations! You are reading an article from a series of 50+ articles on Spring, Spring Boot , Hibernate, Full Stack, Cloud and Microservices. We also have 20+ projects on our Github repository. For the complete series of 50+ articles and code examples, click here.

Join 300,000 Learners!

Learn Spring Boot in 10 Steps - FREE Course

Next Steps

Image

Image

Image Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Related Posts

Spring Boot Tutorials for Beginners

At in28Minutes, we are creating a number of tutorials with videos, articles & courses on Spring Boot for Beginners and Experienced Developers. This resources will help you learn and gain expertise at Spring Boot.

Spring and Spring Boot Video Tutorials for Beginners

At in28Minutes, we are creating a number of tutorials with videos, articles & courses on Spring Boot for Beginners and Experienced Developers. Here's a list of video tutorials and courses for you

Software Design - Separation Of Concerns - with examples

Software architects and programmers love having Seperation of Concerns. What is it? Why is it important? Let's get started.

Object Oriented Software Design - Solid Principles - with examples

Software design is typically complex. Object oriented design takes it to the next level. There are a number of design patterns and other stuff to be aware of. Can we make things simple? What are the goals to aim for when you are doing object oriented design? SOLID Principles is a great starting point for Object Oriented Design.

Software Design - Open Closed Principle - with examples

Open Closed Principle is one of the SOLID Principles. You want your code to be easily extended. How do you achieve it with minimum fuss? Let's get started.

Software Design - What is Dependency Inversion Principle?

Dependency Inversion Principle is one of the important SOLID Principles. Dependency Inversion Principle is implemented by one of the most popular Java frameworks - Spring. What is it all about? How does it help you design good applications?

Introduction to Four Principles Of Simple Design

With agile and extreme programming, the focus is on keeping your design simple. How do you keep your design simple? How do you decide whether your code is good enough?

Software Design - Single Responsibility Principle - with examples

For me, Single Responsibility Principle is the most important design principle. What is Single Responsibility Principle? How do you use it? How does it help with making your software better? Let's get started.

REST API Best Practices - With Design Examples from Java and Spring Web Services

Designing Great REST API is important to have great microservices. How do you design your REST API? What are the best practices?

Designing REST API - What is Code First Approach?

Designing Great REST API is important to have great microservices. Code First approach focuses on generating the contract from code. Is it the best possible approach?