什么是JPA?
JPA的全称是 Java Persistence API , 中文的字面意思就是 java 的持久层 API , jpa 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的关系,当我们在使用 java 操作实体类的时候能达到操作数据库中表的效果(不用写sql ,就可以达到效果),jpa 的实现思想即是 ORM (Object Relation Mapping),对象关系映射,用于在关系型数据库和业务实体对象之间作一个映射。
JPA并不是一个框架,是一类框架的总称,持久层框架 Hibernate 是 jpa 的一个具体实现。
什么是Spring Data JPA?
Spring框架几乎是无所不能,它也想做持久化工作,Spring-data-jpa即代表着Spring框架对JPA的整合,于是在JPA之上添加另一层抽象(Repository层的实现),底层依赖Hibernate框架。在项目中的repository层中具体表现为:我们定义的接口要继承JpaRepository接口。
Spring Data JPA提供的各种接口及作用
各种Repository接口继承关系:
Repository:支持方法命名查询 (提供了findBy + 属性方法 )
CrudRepository: 主要是进行增删改查的方法
PagingAndSortingRepository: 主要是进行排序或者分页
JPARepository:开发中经常使用的接口
JpaSpecificationExecutor:提供多条件查询
类映射到数据库表的常用注解分析
- @Entity 是一个类注解,用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,
该注解十分重要,如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表。 - @Id 类的属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少。
- @GeneratedValue 该注解通常和 @Id 主键注解一起使用,用来定义主键的呈现形式,该注解通常有多种使用策略,先总结如下:
1.@GeneratedValue(strategy= GenerationType.IDENTITY) 该注解由数据库自动生成,主键自增型,在 mysql 数据库中使用最频繁,oracle 不支持。
2.@GeneratedValue(strategy= GenerationType.AUTO) 主键由程序控制,默认的主键生成策略,oracle 默认是序列化的方式,mysql 默认是主键自增的方式。
3.@GeneratedValue(strategy= GenerationType.SEQUENCE) 根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持。
4.@GeneratedValue(strategy= GenerationType.TABLE) 使用一个特定的数据4库表格来保存主键,较少使用。 - @Column
是一个类的属性注解,该注解可以定义一个字段映射到数据库属性的具体特征,比如字段长度,映射到数据库时属性的具体名字等,如果属性名称一样,则不用加。
代码示例
@Data//lombok 作用于类上,作用于类上,
// 是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor
@Entity//类和表自动关联
public class PhoneCategory {
@Id//声明一个实体类的属性映射为数据库的主键列
@GeneratedValue(strategy = GenerationType.IDENTITY)
//用于标注主键的生成策略,通过strategy 属性指定
//采用数据库ID自增长的方式来自增主键字段
private Integer categoryId;
private String categoryName;
private Integer categoryType;
@CreationTimestamp
private Date createTime;
@UpdateTimestamp
private Date updateTime;