手记

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

0人推荐
随时随地看视频
慕课网APP