{"id":72806,"date":"2019-09-09T12:15:55","date_gmt":"2019-09-09T12:15:55","guid":{"rendered":"https:\/\/www.whizlabs.com\/blog\/?p=72806"},"modified":"2021-01-12T07:33:44","modified_gmt":"2021-01-12T07:33:44","slug":"introduction-to-spring-data","status":"publish","type":"post","link":"https:\/\/www.whizlabs.com\/blog\/introduction-to-spring-data\/","title":{"rendered":"Introduction to Spring Data"},"content":{"rendered":"<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The evolution of databases in recent years has been quite radical. At the time of the creation of the <a href=\"https:\/\/www.whizlabs.com\/blog\/spring-framework-5\/\" target=\"_blank\" rel=\"noopener noreferrer\">Spring framework<\/a>, there was a relational database such as Oracle, MySQL, or MS SQL server. However, in recent times, many database variants have gained popularity even if many of them are not relational. Some of them don\u2019t even use SQL. You can find some new names for these types of databases such as NoSQL. Now, there is nothing wrong with NoSQL databases.<\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">However, the problem lies in the standard approach to persistence stores which depends on Data Access Objects. The use of Data Access Objects (DAO) results in the isolation of the remaining system from particular details of persistence mechanisms. The use of DAO code is monotonous and contains large volumes of similar code.<\/span><\/p>\n<p><a href=\"https:\/\/www.whizlabs.com\/spring-framework-basics-video-course\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter wp-image-72414 size-full\" src=\"https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/08\/728X90-24.jpg\" alt=\"Spring Framework Basics\" width=\"728\" height=\"90\" srcset=\"https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/08\/728X90-24.jpg 728w, https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/08\/728X90-24-300x37.jpg 300w, https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/08\/728X90-24-640x79.jpg 640w, https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/08\/728X90-24-681x84.jpg 681w\" sizes=\"(max-width: 728px) 100vw, 728px\" \/><\/a><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Also, you can face a lot of damage even due to a small error. Therefore, Spring Data came into existence for resolving these issues related to data storage solutions. The following discussion is an important piece of guidance and introduction to spring data. If you&#8217;re aspiring to become a Spring professional and get a <a href=\"https:\/\/www.whizlabs.com\/blog\/spring-professional-certification-preparation\/\" target=\"_blank\" rel=\"noopener\">Spring certification<\/a>, this article will be an entry point for you. Let us dive in to learn more about this Spring framework-based product!<\/span><\/p>\n<h2 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Basic Insights to Know about Spring Data<\/span><\/h2>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The first aspect under focus in a discussion about <a href=\"https:\/\/spring.io\/projects\/spring-data\" target=\"_blank\" rel=\"noopener noreferrer\">spring data<\/a> should focus on challenges in existing data store solutions. The duplication of code is one of the foremost issues related to Java Persistence API (JPA). Structural similarities in code could give the path to the similarity among additional methods written for similar codes. In such cases, the solution would be a common interface for extracting functionality from a code. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The next course of action would be the implementation of the common interface in an application. Another issue that is noted with data stores is the drastic rise in several data stores. As discussed above, many new varieties of data stores other than relational databases are becoming popular. Some of the examples of such data stores are NoSQL data stores, including Hadoop, Cassandra, and MongoDB. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">ORM Frameworks such as Hibernate and specifications such as JPA were ideal for relational databases. However, the newer databases require different needs. So, persistence mechanisms solve a lot of problems in theory but also create many other problems in practice. One of the problems could be the requirement of custom annotations or configuration files.<\/span><\/p>\n<blockquote><p>Books are a good source to learn any technology. Check out the list of <a href=\"https:\/\/www.whizlabs.com\/blog\/spring-framework-books\/\" target=\"_blank\" rel=\"noopener noreferrer\">Spring Framework Books<\/a> and start learning!<\/p><\/blockquote>\n<h3 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Functionalities of Spring Data Framework<\/span><\/h3>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Therefore, Spring Data gives the Abstractions or interfaces you could use without any concern for the underlying data source. The purpose of this tool is the unification and simplification of access to various types of persistence stores. You can find repositories in every type of persistence store in the form of DAOs or Data Access Objects. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">These repositories generally offer CRUD operations on single domain objects as well as finder methods, pagination, and sorting. You should note that CRUD refers to Create-Read-Update-Delete operations. Spring Data delivers generic interfaces for these aspects in persistence stores in the form of CrudRepository and PagingAndSortingRepository. Also, you can find facilities of implementations specific to a persistence store. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Template objects can provide ease of writing custom repository implementations. However, Spring Data\u2019s repositories help in writing an interface with finder methods that get definitions according to specific conventions. The conventions can change according to the persistence store in use. Then, you can be assured of Spring data\u2019s facility of the right implementation of the interface at runtime. You can also refer to one or more best <a href=\"https:\/\/www.whizlabs.com\/blog\/spring-framework-books\/\" target=\"_blank\" rel=\"noopener\">Spring book<\/a> to learn more about the Spring framework.<\/span><\/p>\n<h4 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Commons and CRUD Repository<\/span><\/h4>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Now that we have insights from the introduction to spring data let us move towards the interfaces. The first interface is Spring Data Commons which is a source for all common abstractions. You can use the common abstractions for connecting with various data stores. Users could find the Crud Repository in Commons as a reliable place for generic CRUD operations. The underlying data store does not have any impact on the facility of operations. Crud Repository extends the \u2018Repository\u2019 base class, which is ideal for all repositories that provide access to data stores. The different methods in Crud Repository are presented as follows.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">public interface CrudRepository&lt;T, ID&gt; extends Repository&lt;T, ID&gt; {<\/span>\r\n\r\n<span class=\"s1\"> &lt;S extends T&gt; S save(S entity);<\/span>\r\n\r\n<span class=\"s1\">&lt;S extends T&gt; Iterable&lt;S&gt; saveAll(Iterable&lt;S&gt; entities);<\/span>\r\n\r\n<span class=\"s1\">Optional&lt;T&gt; findById(ID id);<\/span>\r\n\r\n<span class=\"s1\">boolean existsById(ID id);<\/span>\r\n\r\n<span class=\"s1\">Iterable&lt;T&gt; findAll();<\/span>\r\n\r\n<span class=\"s1\">Iterable&lt;T&gt; findAllById(Iterable&lt;ID&gt; ids);<\/span>\r\n\r\n<span class=\"s1\">long count();<\/span>\r\n\r\n<span class=\"s1\">void deleteById(ID id);<\/span>\r\n\r\n<span class=\"s1\">void delete(T entity);<\/span>\r\n\r\n<span class=\"s1\">void deleteAll(Iterable&lt;? extends T&gt; entities);<\/span>\r\n\r\n<span class=\"s1\">void deleteAll();<\/span>\r\n\r\n<span class=\"s1\">}<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">You should also note that the methods in Crud Repository provide explanations on their own.<\/span><\/p>\n<h4 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Paging and Sorting Repository<\/span><\/h4>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The next significant interface in Spring Data is the PagingAndSortingRepository. Users can find this repository helpful for sorting data by using the \u201cSort\u201d interface. The repository also helps in the pagination of data by using \u201cPageable\u201d interface. The \u201cPageable\u201d interface provides different methods for pagination such as getPageSize( ), getPageNumber( ), previousOrFirst( ), getPageSize( ) and others. An example of using the PagingAndSortingRepository can be shown as follows.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">public abstract interface PagingAndSortingRepository extends CrudRepository {<\/span>\r\n\r\n<span class=\"s1\">public Iterable findAll(Sort sort);<\/span>\r\n\r\n<span class=\"s1\">public Page findAll(Pageable pageable);<\/span>\r\n\r\n<span class=\"s1\">}<\/span>\r\n\r\n<span class=\"s1\">Definition of custom repositories<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Another crucial aspect of this discussion shall reflect on the definition of custom repositories in Spring Data. Users can create custom repositories by extending one of the repository classes such as Repository, CrudRepository, and PagingAndSortingRepository. Here is an example of defining custom repositories. <\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">interface PersonRepository extends CrudRepository&lt;User, Long&gt; {<\/span>\r\n\r\n<span class=\"s1\">Definition of custom queries<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">You can also find the facility of defining custom queries through interface method names. Here is an example of defining custom queries.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">List&lt;Person&gt; findByFirstNameAndLastname(String firstName, String Lastname);<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The method mentioned above can help in searching a data store with the first name and last name of a person. As a result, you can create a relevant query for the data store to obtain the details of the person. <\/span><\/p>\n<h4 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Auditing Features<\/span><\/h4>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Users could also find features for auditing with Spring Data in the form of simple annotations. Take a look at the example below.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">class Student {<\/span>\r\n\r\n<span class=\"s1\">@CreatedBy<\/span>\r\n\r\n<span class=\"s1\">private User createdUser;<\/span>\r\n\r\n<span class=\"s1\">@CreatedDate<\/span>\r\n\r\n<span class=\"s1\">private DateTime createdDate;<\/span>\r\n\r\n<span class=\"s1\">\/\/ \u2026 further properties omitted<\/span>\r\n\r\n<span class=\"s1\">}<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">You could also find relevant annotations for updates such as \u201cLastModifiedBy\u201d and \u201cLastModifiedDate.\u201d <\/span><\/p>\n<h3 class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Exploring the Spring Data JPA Implementation<\/span><\/h3>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">After a thorough introduction and discussion on various types of interfaces, let us proceed towards Spring Data JPA. You can find different modules or implementations that are ideal for specific data stores. The JPA implementation is suitable for connection to relational databases using ORM frameworks. A closer look at its definition and various features along with an explanation can refine this discussion further. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">Built on the very popular and effective Spring framework, Spring Data JPA is one of the core projects in the suite of tools of Spring. The implementation develops the functionality of JPA or Java Persistence API. Expansion of feature set and application complexity can result in the growth of persistence tier code and Data Access Layer. The JPA implementation helps in building responsive and smart Spring Repository stereotyped interfaces. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">As a result, you could be able to reduce code and simplify the Data Access Layer. The best thing here is that you do not have to compromise on the functionalities of the application. Developers can define a data access contract with the help of these repositories. Then, the JPA implementation could evaluate the data access contract and automatically develop the interface implementation.<\/span><\/p>\n<blockquote><p>Preparing for Spring Framework interview? Go through these frequently asked <a href=\"https:\/\/www.whizlabs.com\/blog\/spring-framework-interview-questions\/\" target=\"_blank\" rel=\"noopener noreferrer\">Spring framework interview questions<\/a> and get ready to ace the interview.<\/p><\/blockquote>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">However, a Query DSL is important for developing an implementation of the Repository interface. The DSL or Domain Specific Language helps in the creation of Java interface methods. The interface methods use specific keywords in unison with certain JPA entity attributes for correct implementation of queries. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The Spring Data JPA example illustrations can also help you find insights into many other features. Many of the features are visible and applied in Data Access Layers in persistence tiers. You can also find features of auditing, paging, and managing native SQL queries with the JPA implementation. Furthermore, the JPA framework also provides flexibility in the event of its inability to address the Data Access Layer requirements. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The JPA framework would move out of the way and allow you for coding or working parallel to the framework. You could also work outside the framework completely without any obstacles. The ease of connection to relational databases using ORM frameworks improves considerably with JPA implementation. The Spring Data JPA example of dependency can be seen as follows.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">&lt;dependencies&gt;<\/span>\r\n\r\n<span class=\"s1\">&lt;dependency&gt;<\/span>\r\n\r\n<span class=\"s1\">&lt;groupId&gt;org.springframework.data&lt;\/groupId&gt;<\/span>\r\n\r\n<span class=\"s1\">&lt;artifactId&gt;spring-data-jpa&lt;\/artifactId&gt;<\/span>\r\n\r\n<span class=\"s1\">&lt;\/dependency&gt;<\/span>\r\n\r\n<span class=\"s1\">&lt;\/dependencies&gt;<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">By default, the JPA implementation is Hibernate, and the core interface is the JpaRepository. Take a look at the following syntax.<\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">public interface JpaRepository&lt;T, ID&gt;<\/span>\r\n\r\n<span class=\"s1\"> extends PagingAndSortingRepository&lt;T, ID&gt;, <\/span>\r\n\r\n<span class=\"s1\"> <span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>QueryByExampleExecutor&lt;T&gt;<\/span><\/pre>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">You can also find additional methods in the JPA implementation when compared with PagingAndSortingRepository. You should also note that all the additional methods are specifically related to JPA. <\/span><\/p>\n<pre class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">\/**<\/span>\r\n\r\n<span class=\"s1\"> * Saves an entity and flushes changes instantly.<\/span>\r\n\r\n<span class=\"s1\"> *<\/span>\r\n\r\n<span class=\"s1\">* @param entity<\/span>\r\n\r\n<span class=\"s1\"> * @return the saved entity<\/span>\r\n\r\n<span class=\"s1\"> *\/<\/span>\r\n\r\n<span class=\"s1\">&lt;S extends T&gt; S saveAndFlush(S entity);<\/span>\r\n\r\n<span class=\"s1\"> \/**<\/span>\r\n\r\n<span class=\"s1\"> * Deletes the given entities in a batch which means it will create a single {@link Query}. Assume that we will clear<\/span>\r\n\r\n<span class=\"s1\"> * the {@link javax.persistence.EntityManager} after the call.<\/span>\r\n\r\n<span class=\"s1\"> *<\/span>\r\n\r\n<span class=\"s1\"> * @param entities<\/span>\r\n\r\n<span class=\"s1\"> *\/<\/span>\r\n\r\n<span class=\"s1\">void deleteInBatch(Iterable&lt;T&gt; entities);<\/span>\r\n\r\n<span class=\"s1\">\/**<\/span>\r\n\r\n<span class=\"s1\"> * Deletes all entities in a batch call.<\/span>\r\n\r\n<span class=\"s1\"> *\/<\/span>\r\n\r\n<span class=\"s1\">void deleteAllInBatch();<\/span>\r\n\r\n<\/pre>\n<h4>Conclusion<\/h4>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The discussion mentioned above helped in obtaining a brief introductory explanation on Spring Data. The extensiveness of development requirements alongside the changes in databases over the years demands <a href=\"https:\/\/www.whizlabs.com\/blog\/top-java-frameworks\/\" target=\"_blank\" rel=\"noopener noreferrer\">top Java frameworks<\/a>. Therefore, the amazing Spring framework resource helps in obtaining abstractions to store and retrieve data from a data store. <\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">The JPA implementation is an extension of the Spring\u2019s Data framework. The JPA implementation is ideal for connecting to JPA and involves communication with relational databases. The most important benefit of Spring\u2019s Data framework is the flexibility to switch between data stores.<\/span><\/p>\n<p class=\"p1\" style=\"text-align: justify;\"><span class=\"s1\">If you want to master Spring\u2019s Data framework, this might be the right point. As a beginner, you can also enroll in our <a href=\"https:\/\/www.whizlabs.com\/spring-framework-basics-video-course\/\" target=\"_blank\" rel=\"noopener noreferrer\">Spring Framework Basics Online Course<\/a> and start your journey to become a Spring professional!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The evolution of databases in recent years has been quite radical. At the time of the creation of the Spring framework, there was a relational database such as Oracle, MySQL, or MS SQL server. However, in recent times, many database variants have gained popularity even if many of them are not relational. Some of them don\u2019t even use SQL. You can find some new names for these types of databases such as NoSQL. Now, there is nothing wrong with NoSQL databases. However, the problem lies in the standard approach to persistence stores which depends on Data Access Objects. The use [&hellip;]<\/p>\n","protected":false},"author":220,"featured_media":72814,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[13],"tags":[2301,2302,2303,2245],"class_list":["post-72806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-introduction-to-spring-data","tag-spring-data-jpa","tag-spring-data-jpa-example","tag-spring-framework"],"uagb_featured_image_src":{"full":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"thumbnail":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data-150x150.png",150,150,true],"medium":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data-300x158.png",300,158,true],"medium_large":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"large":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"1536x1536":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"2048x2048":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"profile_24":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",24,13,false],"profile_48":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",48,25,false],"profile_96":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",96,50,false],"profile_150":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",150,79,false],"profile_300":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",300,158,false],"tptn_thumbnail":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data-250x250.png",250,250,true],"web-stories-poster-portrait":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",600,315,false],"web-stories-publisher-logo":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",96,50,false],"web-stories-thumbnail":["https:\/\/www.whizlabs.com\/blog\/wp-content\/uploads\/2019\/09\/spring-data.png",150,79,false]},"uagb_author_info":{"display_name":"Aditi Malhotra","author_link":"https:\/\/www.whizlabs.com\/blog\/author\/aditi\/"},"uagb_comment_info":0,"uagb_excerpt":"The evolution of databases in recent years has been quite radical. At the time of the creation of the Spring framework, there was a relational database such as Oracle, MySQL, or MS SQL server. However, in recent times, many database variants have gained popularity even if many of them are not relational. Some of them&hellip;","_links":{"self":[{"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/posts\/72806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/users\/220"}],"replies":[{"embeddable":true,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/comments?post=72806"}],"version-history":[{"count":6,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/posts\/72806\/revisions"}],"predecessor-version":[{"id":76827,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/posts\/72806\/revisions\/76827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/media\/72814"}],"wp:attachment":[{"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/media?parent=72806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/categories?post=72806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.whizlabs.com\/blog\/wp-json\/wp\/v2\/tags?post=72806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}