1. 程式人生 > >spring boot(三)數據訪問

spring boot(三)數據訪問

document -s red pri 統一 ear color localhost link

spring boot的數據訪問

spring data是spring用來解決數據訪問問題的的一攬子解決方案,spring data是一個傘形項目,包含了大量的關系型和非關系型數據庫的訪問解決方案。包含的子項目:

spring data JPA;

spring data MongoDB

spring data REST

spring data Elasticsearch等等等

spring data為我們使用統一的api對上述的存儲技術進行支持,這是spring通過spring data common項目實現的,它是上述各個項目的依賴。spring data common的一個重要概念:spring data repository抽象

。抽象的根接口是repository接口。它的子接口crudRepository定義了CRUD的相關操作(如findAll,save,saveAndFlush等)。crudRepository的子接口PagingAndSortingRepository定義了排序與分頁的操作。

不同的數據訪問技術提供了不同的repository實現,如spring data JPA是jpaRepository。

spring data JPA

是對ORM(領域模型和數據庫表映射)技術提供的標準規範。所謂規範是只定義標準規則(如註解,借口),不提供實現。實現可以由hibernate等軟件提供商實現。

1.定義一個繼承jpaRepository的接口,這意味著默認已經有了findAll,save,saveAndFlush等這些方法;(如PersonRepository)

2.通過@EnableJpaRepositories(“數據層所在包”)開啟Spring data JPA支持,

3.定義查詢方法,可以根據關鍵字(And,Or,OrderBy等)定義;也可以@NamedQuery或@Query自定義sql語句;

4.實體類加上@Entity註解,指明是一個和數據庫表映射的實體類(如Person)

5.運行:Person p = PersonRepository.findByNameAndAddress(name,address);


非關系型數據庫

MongoDB

mongoDB是基於文檔(document)的存儲型數據庫。

spring data mongoDB提供了 對象/文檔 註解:

@Document:映射領域對象與mongoDB的一個文檔

@Id:映射當前屬性是id

@DbRef:當前屬性將參考其他文檔

@Field:為文檔的屬性定義名稱

@version:將當前屬性作為版本

eg. @Document //映射領域模型和mongoDB的文檔

public class Person{

@Id //表明這個屬性為文檔id

private String id;

private String name;

@Field(“locs”) //此屬性在文檔中的名稱為locs

private Collection<Location> locations = new LinkedHashSet<Location>();

}

public interface PersonRepository extends MongoRepository<Person,String>{

}

Redis

基於鍵值對的內存數據存儲。

spring Data redis為我們提供了reidsTemplate和StringReidsTemplate兩種模板來進行數據操作,其中StringReidsTemplate是只針對鍵值都是字符型的數據進行操作。template提供的主要數據訪問方法:

opsForValue()操作只有簡單屬性的數據

opsForList()含list的數據

opsForSet()含set的數據

opsForZSet()含有zset(有序的set)數據

opsForHash()含hash的數據

當我們的數據存到redis時,key和value都是通過spring提供的serializer序列化到數據庫的。

ValueOperates<String,String> stringRedisTemplate = redisTemplate.opsForValue();

stringRedisTemplate.set(“test”,”test”,10,TimeUnit.SECOND);

String value = stringRedisTemplate.get(“test”);

stringRedisTemplate.delete(“test”); //刪除某個鍵

redisTemplate.opsForSet().add(“testSet”,”1”);

Set<String> members = redisTemplate.opsForSet().members(“testSet”);]

… …


spring data REST

spring data REST支持將Spring data JPA等的repository自動轉換為REST服務。

使用GET請求直接訪問:HTTP://localhost:8080/persons,得到列表數據json格式;HTTP://localhost:8080/persons/7,得到第7條數據。

節點路徑為HTTP://localhost:8080/persons,是spring data REST默認的規則,在實體類之後加s形成路徑。

對映射域名進行修改:在Repository的實現類上通過@RepositoryRestResource註解實現。

@RepositoryRestResource(path = “people”)

public interface PersonRepository extends jpaRepository{}

spring boot(三)數據訪問