javascript
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 常用注解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 将外部知识整合到群体智能中,以获得更具体
- 下一篇: 用JScript.net写.net应用程