初识SpringDataJpa

前言:公司最近在重构之前的项目,由于之前的技术过于老套,所以想用点新技术,这边我和另外一名同事被安排来做这件事,由于项目经理要求使用SpringDataJpa,所以这边把我弄的东西记录一下,方便以后查阅。

1.SpringDataJpa的简单介绍。

http://spring.io/projects/spring-data-jpa SpringDataJpa的官网地址。

从官网的介绍,我们可以大致总结一下SpringDataJpa的功能以及设计初衷:

  1. Spring Data JPA是更大的Spring Data系列的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。
  2. Spring Data JPA旨在通过减少实际需要的工作量来显着改善数据访问层的实现。作为开发人员,您编写存储库接口,包括自定义查找器方法,Spring将自动提供实现。
  3. 基于SpringJPA构建存储库的复杂支持
  4. 支持Querydsl谓词,从而支持类型安全的JPA查询
  5. 透明审核域类
  6. 分页支持,动态查询执行,集成自定义数据访问代码的能力
  7. @Query在引导时验证带注释的查询
  8. 支持基于XML的实体映射
  9. 基于JavaConfig的存储库配置介绍@EnableJpaRepositories

PSSpringDataSpring的一个子项目,设计的初衷是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特殊特性,它使得使用数据访问技术,关系数据库和非关系数据库,map-reduce框架和基于云的数据服务变得容易。

http://spring.io/projects/spring-data 是SpringData官网地址,如果需要了解更多,可以去官网了解。

2.基于SpringBoot环境下的SpringDataJpa介绍

因为我们使用到的环境是SpringBoot,所以在这一节主要介绍的是SpringDataJpa在SpringBoot环境下的使用。如果需要用传统的方式去搭建框架并使用SpringDataJpa的话,可以去百度查阅相关资料,我们这里不做相关讨论。

2.1:实体类中常用注解的介绍

我们在SpringDataJpa官网下载的Demo代码结构如上图所示。

版本要求:

           JDK1.8或更高版本

           Gradle4+或Maven 3.2+

Customer.java文件如上图所示,以下对所涉及到的注解做一个简单说明。

@Entity:标识这个实体类是一个JPA实例

@Id:表示这个变量为主键Id

@GeneratedValue:设置主键的生成策略,默认就是自动生成

另外我们可以看见GenerationType是一个枚举类型,他还有其他3种生成策略:
 
AUTO:表示实体标识由JPA容器自动生成,这也是Strategy属性的默认值
IDENTITY:JPA容器将使用数据库的自增长字段为新增加的实体对象赋唯一值,作为实体的标识,前提是需要数据库提供对自增长字段的支持。
SEQUENCE:表示使用数据库的序列号为新增加的实体对象赋唯一值,作为实体的标识,前提是数据库提供对序列号的支持。
TABLE:表示使用数据库中指定表的某个字段记录实体对象的标识,通过该字段的增长为新增加的实体对象赋值,作为实体的标识。
总结:其实我们在开发过程中使用最多的主键生成策略就是AUTO,自动生成策略,其他的可以了解一下。
这边官方的Demo里面涉及到的注解有点少,我把实际开发中可能会用到的注解再进行一个补充。
@Table(name=”自定义的表名”):首先该注解的作用域是类,表示把该注解的类映射到数据库中的表中。
@Column:标识把该字段映射到数据库中的某一列。作用在字段上。
 
可选项:
name:表示映射到具体某一列,name用于标识该列的名称
nullable:是否为空
unique:是否唯一
columnDefinition:自定义该字段的类型和长度
length:自定义长度
@Transient:表示该属性并非一个到数据库表字段的映射,ORM框架将忽略该属性。
@Temporal当我们使用到java.util包中的时间日期类型,则需要@Temporal注释来说明转化成java.util包中的类型。其中包含三种转化类型分别是:

java.sql.Date日期型,精确到年月日,例如“2008-08-08”

java.sql.Time时间型,精确到时分秒,例如“20:00:00”

java.sql.Timestamp时间戳,精确到纳秒,例如“2008-08-08 20:00:00.000000001”
 

2.2JPA中Repository接口介绍

    SpringDataJpa的强大之处就在于它的Repository接口的强大,我们只需要继承它的接口,然后按照它的规范编写我们自定义查询的方法名,Spring Data JPA在您运行应用程序时动态创建实现。
    首先我们需要清楚的是Repository是SpringDataJpa的一个核心接口,它不提供任何方法,开发人员需要在自己定义的接口中声明需要的方法。
 
我们可以看到Repository接口是一个泛型接口:
T:标识实体类
ID:主键类型
Repository接口的层级关系如下图所示:
 
 
CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法
PagingAndSortingRepository 继承 CrudRepository,实现了一组分页排序相关的方法 
JpaRepository 继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法
 
当我们自定义的Repository接口继承了Repository接口后,我们就可以自定义一些查询方法 
 
然后在业务层和控制层就可以进行相应的业务开发了。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值