Spring Data JPA--注解大全/常用注解--使用/详解

2023-02-10 21:47:21

原文网址:Spring Data JPA--注解大全/常用注解--使用/详解_IT利刃出鞘的博客-CSDN博客

简介

        Spring Data JPA是一个常用的ORM框架,本文介绍它的注解及其用法。

注解概述

注解

说明

@Entity

声明类为实体。

@Table

声明表名。

@Entity和@Table一般一起使用,如果表名和实体类名相同,那么@Table可以省略。

@Basic

指定非约束明确的各个字段。

@Embedded

用于注释属性,表示该属性的类是嵌入类。

( @Embeddable 用于注释Java类的,表示类是嵌入类)。

@ld

指定的类的属性,一个表中的主键。

@GeneratedValue

    指定如何标识属性可以被初始化。

    如@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "repair_seq"):表示主键生成策略是sequence。还有Auto、ldentity、 Native 等。

@Transient

    表示该属性并非一个数据库表的字段的映射,ORM框架将忽略该属性。

    如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,即它是不持久的,为虚拟字段。

@Column

    指定持久属性,即字段名。

    若字段名与列名相同,则可以省略。

    如:@Column(length=11,name="phone",nullable=false,columnDefinition = "varchar(11) unique comment'电话号码'")

@SequenceGenerator

    指定在 @SequenceGenerator 注解中指定的属性的值。

    它创建一个序列。

@TableGenerator

    在数据库生成一张表来管理主键生成策略。

@AccessType

    这种类型的注释用于设置访问类型。

    如果设置@AccessType(FIELD),则可以直接访问变量,并且不需要使用Gtter和Stter方法,但必须为public属性。

    如果设置@AccessType(PROPERTY),则通过Getter和Setter方法访问Entity的变量。

@UniqueConstraint

指定的字段和用于主要或辅助表的唯一约束。

@ColumnResult

可以参考使用select子句的SQL查询中的列名。

@NamedQueries

指定命名查询的列表。

@NamedQuery

指定使用静态名称的查询。

@Basic

    指定实体属性的加载方式。

    如@Basic(fetch=FetchType.LAZY)。

@Entity

        被@Entity标注的实体类将会被JPA管理控制,在程序运行时,JPA会识别并映射到指定的数据库表。

属性 含义 示例
name 指定实体类名称,默认为当前实体类的非限定名称。

@Entity(name="XXX")

对应的JQPL的实体类名是XXX。

例如:

Entity

import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;

@Data
@NoArgsConstructor
@Entity(name = "XXX")
public class User {
}
package com.example.demo.user.repository;

import com.example.demo.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM XXX u WHERE u.userName = :userName")
    List<User> getByUserName(@Param("userName") String userName);
}

@Table

        若表名与实体类名称不同时,使用 @Table(name="表名"),与@Entity标注并列使用,置于实体类声明语句之前。

有两个@Table,我们应该使用javax.persistence.table。两个@Table如下

  1. javax.persistence.Table
  2. org.hibernate.annotations.Table;
属性 含义 示例
name 表名

@Entity
@Table(name="t_user")

对应的表名是t_user。

catalog

表所属的数据库目录。

通常为数据库名

schema

表所属的数据库模式。

通常为数据库名

uniqueConstraints

设置约束条件。

通常不须设置

@Id

        @Id 用于实体类的一个属性或者属性对应的getter方法上,被标注的的属性将映射为数据库主键。

@GeneratedValue

        与@Id一同使用,用于标注主键的生成策略,通过 strategy 属性指定。

在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略:

  • AUTO: JPA 自动选择合适的策略,是默认选项。MySQL不支持这种方式。
    • @GeneratedValue等价于@GeneratedValue(strategy=GenerationType.AUTO)
  • IDENTITY:采用数据库ID自增长的方式产生主键。Oracle 不支持这种方式。
  • SEQUENCE:通过序列产生主键,通过@SequenceGenerator标注指定序列名。MySQL 不支持这种方式。
  • TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略更易于做数据库移植。

@Column

通常置于实体的属性声明之前,可与 @Id 标注一起使用

属性 含义
name

映射到数据库中的字段名。

可以在属性或者getter上面或加入;

unique 是否唯一,默认为false
nullable 是否允许为null,默认为true
insertable 是否允许插入,默认为true
updatetable 是否允许更新,默认为true
length 指定列的最大字符长度。仅对String类型的字段有效。
columnDefinition 该属性映射到数据库中的实际类型,通常是自动判断
secondaryTable

从表名。

如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。

@Transient

JPA会忽略该属性,不会映射到数据库中,即程序运行后数据库中将不会有该字段。

@Basic

        @Basic表示一个简单的属性到数据库表的字段的映射。对于没有任何标注的 getXxxx() 方法,默认即为@Basic(fetch=FetechType.EAGER)

属性 含义 示例
fetch

加载读取策略。

有如下值:

EAGER:主动抓取 (默认为EAGER)
LAZY:延迟加载,只有用到该属性时才会去加载。

@Entity
@Table(name="t_user")

本实体类对应的的表名是t_user。

optional

该属性是否允许为null。

默认为 true

@Temporal

        Java中没有定义 Date 类型的精度,而数据库中,表示时间类型的数据有DATE,TIME,TIMESTAMP三种精度。

@Temporal(TemporalType.DATE) :映射到数据库中的时间类型为 DATE,只有日期
@Temporal(TemporalType.TIME) :映射到数据库中的时间类型为 TIME,只有时间
@Temporal(TemporalType.TIMESTAMP):映射到数据库中的时间类型为 TIMESTAMP,日期和时间都有

@Embedded 和 @Embeddable

用于一个实体类要在多个不同的实体类中进行使用,而本身又不需要独立生成一个数据库表。

@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性。

例如:User包括id,name,city,street,zip属性,我们希望city,street,zip属性映射为Address对象,这样,User对象将具有id,name和address这三个属性,Address对象要定义为@Embededable。

@JoinColumn

定义表关联的外键字段名。

属性 含义 示例
name 映射到数据库中的外键的字段名
unique 是否唯一,默认为false
nullable 是否允许为null,默认为true
insertable 是否允许插入,默认为true
updatetable 是否允许更新,默认为true
columnDefinition 该属性映射到数据库中的实际类型,通常是自动判断
foreignKey 指定外键相关信息。 指定外联关系但是不建立数据库外键:foreignKey = @ForeignKey(name = "none",value = ConstraintMode.NO_CONSTRAINT)

例:

        实体Order有一个user属性来关联实体User,则Order的user属性为一个外键,其默认的名称为实体User的名称+下划线+实体User的主键名称。

@JoinTable

@JoinTable(name = “student_teacher”, inverseJoinColumns = @JoinColumn(name = “tid”), joinColumns = @JoinColumn(name = “sid”))

由第三张表来维护两张表的关系

name:是关系表的名字
joinColumns:自己这一端的主键
inverseJoinColumns:对方的主键

其他网址

Spring Data JPA了解常用注解和属性_pan_junbiao的博客-CSDN博客

JPA实体类中的注解_lamb7758的博客-CSDN博客_jpa实体类注解

Jpa 实体类常用注解_Mr_DouDo的博客-CSDN博客_jpa实体类常用注解
JPA注解、配置及接口_光图强的博客-CSDN博客_jpa注解配置

  • 作者:IT利刃出鞘
  • 原文链接:https://knife.blog.csdn.net/article/details/120687270
    更新时间:2023-02-10 21:47:21