欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

Spring Data JPA 常用注解

发布时间:2025/4/16 javascript 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Spring Data JPA 常用注解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 创建表

@Entity声明该类对应一个数据表实体(万事万物皆为对象)。

@Table 设置表名

@Entity @Table(name = "user") public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;省略getter/setter...... }

2. 创建主键

@Id :声明一个字段为主键。

使用@Id声明之后,可以使用 @GeneratedValue 指定主键生成策略。

使用 @GeneratedValue 指定主键生成策略的方式有两种:

1. 通过 @GeneratedValue 可以直接使用 JPA 内置提供的四种主键生成策略来指定主键生成策略。

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

JPA 使用枚举定义了 4 中常见的主键生成策略:

  • TABLETABLE:使用一个特定的数据库表格来保存主键;
  • SEQUENCE:为Oracle、PostgreSQL等不支持主键自增长的数据库提供了一种叫做“序列(sequence)"的主键生成机制;
  • IDENTITY:主键自增长;
  • AUTO:把主键生成策略交给持久化引擎,持久化引擎会根据数据库在以上三种主键生成策略中选择其中一种

@GeneratedValue 注解默认使用的策略是GenerationType.AUTO。 在关系型数据库中使用GenerationType.IDENTITY策略比较普遍一点

public @interface GeneratedValue {GenerationType strategy() default AUTO;String generator() default ""; }

一般使用 MySQL 数据库的话,使用GenerationType.IDENTITY策略比较普遍一点(分布式系统的话需要另外考虑使用分布式 ID)。

2. 通过 @GenericGenerator声明一个主键策略,然后 @GeneratedValue使用这个策略

@Id @GeneratedValue(generator = "IdentityIdGenerator") @GenericGenerator(name = "IdentityIdGenerator", strategy = "identity") private Long id;

等价于:

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

3. 设置字段类型

@Column 声明字段。

示例:

设置属性 userName 对应的数据库字段名为 user_name,长度为 32,非空

@Column(name = "user_name", nullable = false, length=32) private String userName;

设置字段类型并且加默认值:

Column(columnDefinition = "tinyint(1) default 1") private Boolean enabled;

4. 指定不持久化特定字段

@Transient :声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库 。

如果我们想让secrect 这个字段不被持久化,可以使用 @Transient关键字声明。

Entity(name="USER") public class User {......@Transientprivate String secrect; // not persistent because of @Transient}

除了 @Transient关键字声明, 还可以采用下面几种方法:

static String secrect; // not persistent because of static final String secrect = “Satish”; // not persistent because of final transient String secrect; // not persistent because of transient

一般使用注解的方式比较多。

5. 声明大字段

@Lob:声明某个字段为大字段。

@Lob private String content;

更详细的声明:

@Lob //指定 Lob 类型数据的获取策略, FetchType.EAGER 表示非延迟 加载,而 FetchType. LAZY 表示延迟加载 ; @Basic(fetch = FetchType.EAGER) //columnDefinition 属性指定数据表对应的 Lob 字段类型 @Column(name = "content", columnDefinition = "LONGTEXT NOT NULL") private String content;

6. 创建枚举类型的字段

可以使用枚举类型的字段,不过枚举字段要用@Enumerated注解修饰。

public enum Gender {MALE("男性"),FEMALE("女性");private String value;Gender(String str){value=str;} } @Entity @Table(name = "role") public class Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;@Enumerated(EnumType.STRING)private Gender gender;省略getter/setter...... }

数据库里面对应存储的是 MAIL/FEMAIL。

7. 增加审计功能

在 JPA 中,支持在字段或者方法上进行注解@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 实现对数值设置的时间控制。

首先需要通过@EnableJpaAuditing开启 JPA 审计功能。其中,

  • @CreatedDate:表示该字段为创建时间,在这个实体被 insert 的时候,会设置值
  • @CreatedBy :表示该字段为创建人,在这个实体被 insert 的时候,会设置值
  • @LastModifiedDate:表示该字段为最终修改时间
  • ``@LastModifiedBy`:表示该字段为最终修改人

8. 删除/修改数据

@Modifying 注解提示 JPA 该操作是修改操作,注意还要配合@Transactional注解使用。

@Repository public interface UserRepository extends JpaRepository<User, Integer> {@Modifying@Transactional(rollbackFor = Exception.class)void deleteByUserName(String userName); }

9. 关联关系

  • @OneToOne 声明一对一关系
  • @OneToMany 声明一对多关系
  • @ManyToOne声明多对一关系
  • MangToMang声明多对多关系

总结

以上是生活随笔为你收集整理的Spring Data JPA 常用注解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。