Spring Data JPA 常用注解
@Entity
标识实体类是
JPA
实体,告诉JPA
在程序运行时生成实体类对应表@Table
设置实体类在数据库所对应的表名
1
2
3
4
5
"t_user") (name =
public class User implements java.io.Serializable {
private static final long serialVersionUID = 4579521515899728869L;
}
@Id
标识类里所在变量为主键
@GeneratedValue
设置主键生成策略,此方式依赖于具体的数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// 使用序列
"sq_name", sequenceName = "SQ_USER", allocationSize = 1) (name =
"sq_name", strategy = GenerationType.SEQUENCE) (generator =
private Long id;
// 使用分布式 Id 生成
/**
* 唯一主键:GenericGenerator 注解的 strategy 属性,使用非默认策略的时候,需要使用全类名
*/
(
name = "SnowflakeId_BaseEntityId",
// 这里需要使用全限类名
strategy = "top.ylonline.hibernate.id.SnowflakeIdentifierGenerator"
)
"SnowflakeId_BaseEntityId") (generator =
"id", updatable = false, nullable = false) (name =
private Long id;
@Column表示属性所对应字段名进行个性化设置
@Transient表示属性并非数据库表字段的映射,
ORM
框架将忽略该属性1
2
private String zq;
@Temporal
当我们使用到
java.util
包中的时间日期类型时,需要此注释来说明转化成java.util
包中的类型。注入数据库的类型有三种:
TemporalType.DATE(yyyy-MM-dd)
TemporalType.TIME(HH:mm:ss)
TemporalType.TIMESTAMP(yyyy-MM-dd HH:mm:ss.SSS)
1
2(TemporalType.TIMESTAMP)
private Date createdAt;
@Enumerated
使用此注解映射枚举字段,以
String
类型存入数据库注入数据库的类型有两种:
EnumType.ORDINAL(Interger)
EnumType.STRING(String)
@Embedded、@Embeddable
当一个实体类要在多个不同的实体类中进行使用,而其不需要生成数据库表
@Embeddable:注解在类上,表示此类是可以被其他类嵌套
@Embedded:注解在属性上,表示嵌套被@Embeddable注解的同类型类
@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy
分别表示创建时间(insert)、创建用户(insert)、最后修改时间(update)、最后修改用户(update)
用法:
1、@EntityListeners(AuditingEntityListener.class):申明实体类并加注解
2 、实现AuditorAware类
3、springboot 启动类加上注解@EnableJpaAuditing
4、在实体类中属性中加上面四种注解
@MappedSuperclass
实现将实体类的多个属性分别封装到不同的非实体类中
注解的类不是完整的实体类,不会映射到数据库表,但其属性将映射到子类的数据库字段
注解的类不能再标注
@Entity
或@Table
注解,也无需实现序列化接口
Page
函数 | 描述 | 备注 |
---|---|---|
getTotalElements | 总记录数 | |
getTotalPages | 总页数 | |
getContent | 查询记录列表 | |
getNumber | 当前页数,从0开始 | |
getNumberOfElements | 当前页码中的记录数 | |
getSize | 每页记录数 |
EntityListeners注解
使用在实体类,或者mapped superclass上
主要是配置PrePersist
、PreRemove
、PostPersist
、PostRemove
、PreUpdate
、PostUpdate
、PostLoad
等监听回调
配置JPA审计使用
1 | 注意:如果需要自动填充createdBy、createdAt、modifiedBy、modifiedAt |
Modifying注解
(1)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。 注意: JPQL 不支持使用 INSERT
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 Spring Data, 这是一个 UPDATE 或 DELETE 操作
(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作
(4)默认情况下, Spring Data 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作
批量插入、更新配置
1 | spring: |
参考
https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/
https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch03.html#configuration-jdbc-properties