← 返回首页
SpringBoot基础教程(十六)
发表时间:2020-10-25 13:03:25
JPA常用注解

1.Spring Data JPA与JPA的关系

JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范!

注意JPA仅仅是一种ORM规范,并不是ORM框架的实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现,比如:JBoss应用服务器底层就以Hibernate作为JPA的实现。除了Hibernate之外,TopLink,Spring Data JPA等等ORM框架 都是JPA的实现,其中Hibernate已获得Sun的兼容认证。

Spring data jpa是Spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。

简而言之,Spring data jpa和JPA的区别: 1)Spring data jpa由spring提供的,是Spring Data的子模块, JPA由sun公司提供的一套JAVAEE规范。 2)两者属于同一等级,都是持久层的规范,spring data jpa对CRUD操作做了封装。 两者都可以管理任何第三方持久层框架。是同一级别的。

2.JPA常用注解 |注解|说明| |-|-| |@Entity(name="EntityName")|表示该类映射为数据库中一的个表| |@Table(name="",catalog="",schema="")|映射时可以指定表的名称| |@Id|表示该属性映射为表的字段| |@GeneratedValue(strategy=GenerationType,generator="")|strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种| |@Column(length=) |表示该属性映射为字段,length限定字段长度| |@Transient|表示该属性不会映射,ORM框架将忽略该属性| |@OneToOne|表示一对一的映射关系| |@ManyToOne|表示多对一的映射,该注解标注的属性通常是数据库表的外键| |@ManyToMany|描述多对多的关联.通常结合@JoinTable使用| |@JoinTable|描述多对多关联时使用的中间表用来维护多对多的关系| |@MappedSuperclass|可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解,自己不会映射为表| |@Embedded|将几个字段组合成一个类,并作为整个Entity的一个属性| |@Embeddable|用来修饰一个类,该类并不是一个Entity类,但是该类能够被另一个Entity类所调用,并可以作为该Entity类的组件使用|

主键的生成策略,以MySQL为例,最常用的有以下两种写法:

//自动生成主键策略
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //使用数据库默认的主键生成策略,MySQL就是auto_increment

//手工赋值主键策略
@Id
@GeneratedValue(generator="mytid")
@GenericGenerator(name="mytid",strategy="assigned") //表示该主键手工赋值。
@Column(length = 4)