Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特殊特性。
它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和基于云的数据服务变得简单易用。这是一个伞形项目,其中包含许多特定于给定数据库的子项目。这些项目是通过与这些激动人心的技术背后的许多公司和开发人员合作开发的。
Spring Data主要使用的一些模块,根据需要选择对应的一些功能模块。
Spring Data common- 支持每个Spring Data模块的Core Spring概念。
Spring Data JDBC- 对JDBC的Spring Data存储库支持。
Spring Data JPA - 对JPA的Spring Data存储库支持。
Spring Data MongoDB - 对MongoDB的基于Spring对象文档的存储库支持。
Spring Data Redis - 从Spring应用程序轻松配置和访问Redis。
Spring Data JDBC Ext- 支持标准JDBC的数据库特定扩展,包括对Oracle RAC快速连接故障转移的支持,AQ JMS支持以及对使用高级数据类型的支持。
Spring Data KeyValue - Map基于库和SPI轻松建立键值存储一个Spring数据模块。
Spring Data LDAP - 对Spring LDAP的 Spring Data存储库支持。
Spring Data REST- 将Spring Data存储库导出为超媒体驱动的RESTful资源。
Spring Data for Pivotal GemFire - 轻松配置和访问Pivotal GemFire,实现高度一致,低延迟/高吞吐量,面向数据的Spring应用程序。
Spring Data for Apache Cassandra- 轻松配置和访问Apache Cassandra或大规模,高可用性,面向数据的Spring应用程序。
Spring Data for Apace Geode- 轻松配置和访问Apache Geode,实现高度一致,低延迟,面向数据的Spring应用程序。
Spring Data for Apache Solr- 为面向搜索的Spring应用程序轻松配置和访问Apache Solr。
JPA Spring Data: 致力于减少数据访问层(DAO)的开发量。开发者唯一要做的,就只是声明持久层的接口,其他都交给Spring Data JPA 来帮你完成!
框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个UserDao.findUserById()这样一个方法声明,大致应该能判断出这是根据给定条件的ID查询出满足条件的User对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。
Spring Data JPA HelloWorld
使用Spring Data JPA进行持久层开发需要的四个步骤:
- 配置Spring 整合 JPA
- 在Spring 配置文件中配置Spring Data ,让Spring 为声明的接口创建代理对象。配置了
- 声明持久层的接口,该接口继承 Repository ,Repository是一个标记型接口,它不包含任何方法,如必要,Spring Data 可实现Repository其他子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
- 在接口中声明需要的方法。Spring Data 将根据给定的策略(具体策略稍后讲解)来为其生成实现代码。
Repository 接口
1、Repository是一个空接口,即是一个标记接口
2、若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean 纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法
3、实际上,也可以通@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class) 注解来代替 extends Repository
在eclipse 中选中Repository ,Ctrl + T ,有多个子接口和实现类
继承关系如下:
①、Repository :仅仅是一个标识,表名任何继承它的均为仓库接口类
②、CurdRepository : 继承Repository ,实现了一组CURD相关的方法
③、PagingAndSortingRepository :继承CurdRepository ,实现了一组分页排序相关的方法
④、JpaRepository : 继承PagingAndSortingRepository ,实现一组Jpa 规范相关的方法
⑤、自定义 的 XXXRepository :需要继承JpaRepository ,这样的XxxRepository 接口就具备了通用的数据访问控制层的能力。
⑥、JpaSpecificationExecutor :不属于Repository 体系,实现一组JpaCriteria 查询相关的方法
简单查询条件 :查询某一个实体类或是集合
在Repository 子接口中声明方法:
①、不是随便声明的,而需要符合一定的规范
②、查询方法以 find | read | get 开头
③、涉及条件查询时,条件的属性用条件关键字连接
④、要注意的是:条件属性以首字母大写
⑤、支持属性的级联查询。若当前类有符合条件的属性,则优先使用,而不使用级联属性。若需要使用级联属性,则属性之间使用_连接