spring boot(三)数据访问

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{}

猜你喜欢

转载自blog.51cto.com/13580976/2135267