【Spring Data JPA】JPA常用注解

常用基本注解

示例:创建一个表,表名称叫做user_info,我们创建出它的实体类为UserInfo,用这个表与实体类之间的关系来阐述JPA一些基本注解的使用。

import java.io.Serializable;
import lombok.Data;

@Data
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@Entity【指定该实体类被JPA管理】

@Entity注解所代表的意思是这个实体类是被JPA管理的实体类,它有两种用法:
第一种是直接添加该注解,默认的实体名称就是对应数据库表的名称;
第二种是添加该注解,指定该实体的名称,全局唯一;
一般都是直接使用第一种方法。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;

@Data
@Entity // 第一种用法
// @Entity(name = "user_info") 第二种用法
public class UserInfo implements Serializable {...}

@Table【指定该实体类对应哪张表】

@Table注解是用在实体类上,用来表示这个实体类对应那张表,@Table中的name属性就是指定对应表的表名。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {...}

@Id【单个主键】

@Id注解是用在属性名上,表示这个属性名是一个主键,在这里id是主键,就在id上加上@Id注解。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Id
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@IdClass【联合主键】

@IdClass注解的作用是当你这张表有联合主键时,就可以用它指定一个实体类,表示有哪些联合主键,先做一个示例,快速知道这个的用法。
假设,user_info表中的主键分别是idloginName,那么就需要定义一个实体类去表示出有哪些属性是主键,创建出UserInfoKey实体类去表示UserInfo(user_info)的联合主键,下面为示例展示:

UserInfo实体类:

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Data
@Entity
@IdClass(UserInfoKey.class)
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

UserInfoKey实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfoKey implements Serializable {
    private String id;
    private String loginName;
}

@Column【表示实体类属性对应数据库表的哪一字段(列)】

@Column注解是用在实体类属性上,表示这个实体类属性是对应数据库表的哪一字段(列),如果实体类属性与数据库表中的字段(列)一直,就不需要添加@Column注解。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Id
    private String id;

    /**
     * 登录名
     */
    @Column(name = "login_name")
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@OneToOne

@OneToOne注解表示A数据实体与B数据实体一对一的关系。

fetch属性定义:从数据库获取数据的策略。
默认值是EAGER,表示数据必须被立即获取。另一种选择是LAZY,表示数据只有在需要时才被获取,切记:如果是SpringBoot使用LAZY模式,一定要在查询方法上加上@Transactional(readOnly = true),因为需要让SqlSession一直存在。

cascade属性定义:级联操作的类型。
级联操作是指当父实体发生变化时,子实体也跟着变化,例如,当删除父实体时,子实体也被删除。
级联操作的类型有ALL(所有操作)、PERSIST(持久化操作)、MERGE(合并操作)、REMOVE(删除操作)和REFRESH(刷新操作)。

optional属性定义:关联是否可选,默认值是true,表示关联可以为空。如果设置为false,则表示关联必须存在 。

orphanRemoval属性定义:是否移除孤儿记录。默认值是false,表示不移除孤儿记录。如果设置为true,则表示当父实体不再引用子实体时,子实体将被删除 。

mappedB属性定义:是关系的拥有方。拥有方是指具有连接列或连接表的那一方。mappedBy属性指定了另一方中与此关系相对应的属性名。


联合主键代码示例

接下来,在这里给一下代码示例:
user_info 用户表,属性有:tenant_id(租户Id)、id、login_name、password,其中,tenant_id和id是联合主键;
user_extend_info 用户扩展信息表,属性有:tenant_id(租户Id)、iduser_id、ID_card,其中,tenant_id和id是联合主键,user_id和tenant_id组成与用户表的id和tenant_id相关联;

import java.io.Serializable;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity
@IdClass(CommonKey.class)
@Table(name="user_info")
public class UserInfo implements Serializable {

    /**
     * id
     */
    @Id
    @Column(name = "id")
    private String id;

    /**
     * 租户Id
     */
    @Id
    @Column(name = "tenant_id")
    private String tenantId;

    /**
     * 登录名
     */
    @Column(name = "login_name")
    private String loginName;

    /**
     * 密码
     */
    @Column(name = "password")
    private String password;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumns({
            @JoinColumn(name = "user_id", referencedColumnName = "id", insertable = false, updatable = false),
            @JoinColumn(name = "tenant_id", referencedColumnName = "tenant_id", insertable = false, updatable = false)
    })
    private UserExtendInfo userExtendInfo;
}
import java.io.Serializable;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity
@IdClass(CommonKey.class)
@Table(name="user_extend_info")
public class UserExtendInfo implements Serializable {

    /**
     * id
     */
    @Id
    @Column(name = "id", insertable = false, updatable = false)
    private String id;

    /**
     * 租户Id
     */
    @Id
    @Column(name = "tenant_id", insertable = false, updatable = false)
    private String tenantId;

    /**
     * 用户Id
     */
    @Column(name = "user_Id")
    private String userId;

    /**
     * 身份证号
     */
    @Column(name = "ID_card")
    private String IDCard;


}

CommonKey实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonKey implements Serializable {
    private String id;
    private String tenantId;
}




End


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Data JPA是一个用于简化数据访问层的框架,它提供了一组注解来帮助我们进行数据库操作。其中一些常用的注解包括: 1. @Entity: 用于将一个Java类标记为JPA实体类,表示该类的对象将映射到数据库中的表。 2. @Table: 用于指定实体类对应的数据库表的名称。 3. @Id: 用于标记实体类的主键字段。 4. @GeneratedValue: 用于指定主键的生成策略,如自增长、UUID等。 5. @Column: 用于指定实体类属性与数据库表字段的映射关系,如字段名、长度、是否可为空等。 6. @Transient: 用于标记实体类中的属性,表示该属性不需要映射到数据库表中。 7. @Query: 用于定义自定义查询方法,可以通过JPQL或原生SQL来编写查询语句。 8. @Repository: 用于标记数据访问层的接口或类,表示该类是一个仓库,可以进行数据库操作。 以上是一些常用的Spring Data JPA注解,它们可以帮助我们简化数据库操作,提高工作效率。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [Spring-Data-Jpa中的常用注解详解及其用法](https://blog.csdn.net/heshengfu1211/article/details/106485333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值