一、Spring Data簡介
Spring Data是Spring框架家族中的一員,它主要提供了一種在各種數據存儲系統(如關係型數據庫、NoSQL數據庫、搜索引擎等)和Spring應用程序之間進行數據訪問的統一方法。使用Spring Data,我們可以通過一種簡單的方式訪問數據存儲領域,並且這種訪問方式是一致的、乾淨的,更加快捷和簡練。
Spring Data的核心模塊Spring Data Commons定義了一些通用的接口,如Repository和QueryDSL,這些接口可以在不同的數據存儲系統中被具體的實現模塊(如Spring Data JPA、Spring Data MongoDB)所實現。這些實現模塊對JPA、MongoDB等數據存儲系統進行了封裝,在封裝的過程中並提供了眾多便捷的特性。
二、Spring Data JPA
Spring Data JPA是基於Spring Data Commons模塊的另一個子模塊,它提供了一種使Spring應用程序與JPA(Java Persistence API)兼容的方法。使用Spring Data JPA的好處在於,我們能夠通過簡化的方式編寫數據訪問代碼。
讓我們看一個簡單的例子,我們創建一個名為Customer的JPA實體,它包含了id、firstName、lastName、email四個屬性,以及一個JpaRepository實例:
@Entity public class Customer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String firstName; private String lastName; private String email; //getters and setters } public interface CustomerRepository extends JpaRepository { List findByLastName(String lastName); }
在上面的代碼中,我們定義了一個Customer實體並聲明了CustomerRepository對象,它是一個繼承了JpaRepository接口的子接口。該接口中定義了一些常規的CRUD方法以及findByLastName方法,根據lastName屬性查找Customer實例。
Spring Data JPA至少需要提供一個數據環境管理器(EntityManager),該管理器負責實現對持久化數據的操作,同時,Spring將於調用持久化CRUD方法之後自動進行持久化操作。此外,我們還需添加一些相關的配置文件,如application.properties。
三、Spring Data MongoDB
Spring Data MongoDB是使用MongoDB數據存儲的Spring Data模塊之一,它為MongoDB提供類似於Spring Data JPA的CRUD功能。
與Spring Data JPA類似,我們同樣需要定義一個MongoDB實體類和一個MongoRepository接口。下面是一個簡單的例子,定義了名為Person的MongoDB實體,並且聲明了PersonRepository接口:
@Document(collection = "person") public class Person { @Id private String id; private String name; private int age; //getters and setters } @Repository public interface PersonRepository extends MongoRepository { List findByName(String name); List findByAge(int age); }
在上面的代碼中,我們定義了一個Person實體並聲明了一個PersonRepository接口,它繼承自MongoRepository接口。可以看出,在代碼中,我們已定義了一些查找方法,例如findByName方法和findByAge方法,這些方法Spring也會自動進行持久化操作。
我們還需添加MongoDB的配置文件,例如application.yml文件:
spring: data: mongodb: uri: mongodb://localhost:27017/test
其中,要注意的是MongoDB的數據庫URI,這個URI一般是由MongoDB運行時自動生成的,而不需要手動去配置。
四、Spring Data Redis
Spring Data Redis是Spring Data的另外一個模塊,它對Redis進行了抽象封裝,在使用Redis進行數據操作時非常方便。
下面我們定義了一個名為User的Redis實體,它包含了id、name、age三個屬性,並且聲明了一個UserRepository接口:
@Data @AllArgsConstructor @NoArgsConstructor @RedisHash("user") public class User { @Id private String id; private String name; private int age; //getters and setters public static User createUser(String name,int age){ User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName(name); user.setAge(age); return user; } } public interface UserRepository extends CrudRepository { List findByName(String name); }
在上面的示例代碼中,我們定義了一個User實體和繼承自CrudRepository接口的UserRepository接口。該接口中定義了一些常規的CRUD方法以及findByName方法。
與MongoDB一樣,我們同樣需要配置Redis相關屬性如下:
spring: redis: host: 127.0.0.1 port: 6379
五、Spring Data Elasticsearch
Spring Data Elasticsearch是一個基於Spring Data Commons模塊的子模塊,它提供了一種使用Elasticsearch的簡單方法。
與上面的例子相同,我們定義了一個名為Book的Elasticsearch實體和一個BookRepository接口:
@Data @AllArgsConstructor @NoArgsConstructor @Document(indexName="bookindex",type="books") public class Book { @Id private String id; private String bookName; private String author; private String des;//book description //getters and setters } public interface BookRepository extends ElasticsearchRepository { List findByBookNameLike(String bookName); }
在上面的示例代碼中,我們定義了一個名為Book的Elasticsearch實體和繼承自ElasticsearchRepository接口的BookRepository接口,接口中定義了常規的CRUD方法以及由findByBookNameLike方法實現的根據bookName屬性查找Book實例。
與MongoDB、Redis一樣,我們同樣需要為Elasticsearch配置相關的信息:
spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 127.0.0.1:9300
總結
Spring Data提供了很多實用且易於使用的API,同時每個API都適用於不同類型的數據存儲系統。從Spring Data JPA到Spring Data MongoDB,再到Spring Data Redis和Spring Data Elasticsearch,Spring Data為開發人員提供了豐富的選擇,讓我們可以以一種統一的方式訪問不同類型的數據存儲系統。
完整代碼示例請參考:https://github.com/paramitamirza/Spring-Data-Examples
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/235799.html