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 CollectionLocation locations = new LinkedHashSetLocation();

  }

  public interface PersonRepository extends MongoRepositoryPerson,String{

  }

  Redis

  基于键值对的内存数据存储。

  spring Data redis为我们提供了reidsTemplate和StringReidsTemplate两种模板来进行数据操作,其中StringReidsTemplate是只针对键值都是字符型的数据进行操作。template提供的主要数据访问方法:

  opsForValue()操作只有简单属性的数据

  opsForList()含list的数据

  opsForSet()含set的数据

  opsForZSet()含有zset(有序的set)数据

  opsForHash()含hash的数据

  当我们的数据存到redis时,key和value都是通过spring提供的serializer序列化到数据库的。

  ValueOperatesString,String stringRedisTemplate = redisTemplate.opsForValue();

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

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

  stringRedisTemplate.delete(“test”); //删除某个键

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值