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)将其设置为延迟加载。
做一个有底线的博客主