快速学习Spring Data JPA -- 第四章JPA常用注解

xl_echo编辑整理,交流学习请加1280023003 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!


JPA常用注解:

@Entity、@Table、@Id、@IdClass、
@GeneratedValue、@Basic、@Transient、@Column、@Temporal、
@Enumerated、@Lob

观察一个类,我们通过类来看使用到的注解及含义:

package com.echo.example.example.entity;

import lombok.Data;

import javax.persistence.*;
import java.util.Date;

/**
 * author:XLecho
 * Date:2018/10/26 0026
 * Time:10:52
 */
@Data
@Entity
@Table(name = "tb_proson")
public class Proson {

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

    @Column(name = "name", nullable = false)
    private String name;

    @Basic
    @Column(name = "age", nullable = true, length = 3)
    private Integer age;

    @Basic(fetch = FetchType.LAZY)
    @Column(name = "sex")
    @Lob
    private String sex;

    @Column(name = "phone")
    private String phone;

    @Column(name = "email")
    private String email;

    @Column(name = "address")
    private String address;

    @Column(name = "createDate")
    @Temporal(TemporalType.DATE)
    private Date createDate;

    @Transient
    private String qq;
}

@Entity

定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。

@Table

指定数据库的表名。注意如果这个注解没有name=“table”这个属性类指定表名,那么就不会起作用。
它的属性有以下几个:

  • name:指定表名称
  • catalog: 指定数据库名称,默认为当前配置的数据库
  • schema: 指定数据库的用户名 ,默认为当前配置的用户
  • uniqueConstraints:指定唯一性字段约束,如为personid 和name 字段指定唯一性约束
  • index: 用于指定对应的索引

@Id

定义属性为数据库的主键,一个实体里面必须有一个

@GeneratedValue

为主键生成策略,主键生成策略有四种:

  • AUTO主键由程序控制, 是默认选项 ,不设置就是这个
  • IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
  • SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
  • TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

@Basic

表示属性是到数据库表的字段的映射。如果实体的字段上没有任何注解,默认即为@Basic

@Column

定义该属性对应数据库中的列名,它有以下属性:

  • name:表示数据库表中列的名称,默认为属性或字段名称
  • nullable:可选,表示该字段是否允许为null,默认为true(null)若设置为false 则该列不可为null值
  • unique:可选,表示该字段是否是唯一标识,默认为false(不唯一)若为true 则表示该列唯一如 uuid, email, mobile 等属性
  • length:可选,表示该字段的大小,仅对String类型的字段有效,默认值 255.用来自定义列的长度 如 mobile (length=11)
  • insertable:表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值
  • updatable:表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
  • table:表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。
  • precision和scale:precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

@Transient

表示非持久化属性,当创建表的时候不会生成该字段。与@Basic作用相反。JPA映射数据库的时候忽略它。

@Temporal

用来设置Date类型的属性映射到对应精度的字段。这个注解有三种策略:

  • @Temporal(TemporalType.DATE)——》实体类会封装成日期“yyyy-MM-dd”的 Date类型。
  • @Temporal(TemporalType.TIME)——》实体类会封装成时间“hh-MM-ss”的 Date类型。
  • @Temporal(TemporalType.TIMESTAMP)——》实体类会封装成完整的时间“yyyy-MM-dd hh:MM:ss”的 Date类型。

@Enumerated

直接映射enum枚举类型的字段。

@Lob

将属性映射成数据库支持的大对象类型,支持以下两种数
据库类型的字段。

  • Clob(Character Large Ojects)类型是长字符串类型,java.sql.Clob、Character[]、char[]和String将被
  • Blob(Binary Large Objects)类型是字节类型,java.sql.Blob、Byte[]、byte[]和实现了Serializable接口的类型将被映射为Blob类型
  • Clob、Blob占用内存空间较大,一般配合@Basic(fetch=FetchType.LAZY)将其设置为延迟加载。

做一个有底线的博客主

猜你喜欢

转载自blog.csdn.net/xlecho/article/details/83413341