通过JPA映射数据库

在这里插入图片描述

在 JPA (Java Persistence API) 中,实体类通常通过一系列注解来配置,以便与数据库表进行映射,与Mybatis-plus在功能上,具有一定的相似性,都是持久化框架。


package com.plumcarefree.demo.entity.user;  
  
import javax.persistence.*;  
import java.util.Date;  
  
// 用户实体类  
@Entity  
@Table(name = "user_profile")  
public class UserProfile {  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Integer userId;  
  
    @Column(name = "username", unique = true)  
    private String username;  
  
    @Column(name = "password")  
    private String password;  
  
    @Column(name = "email")  
    private String email;  
  
    @Column(name = "phone")  
    private String phone;  
  
    @Column(name = "address")  
    private String address;  
  
    @ManyToOne  
    @JoinColumn(name = "role_id")  
    private UserRole role;  
  
    @ManyToOne  
    @JoinColumn(name = "user_organization_id")  
    private UserOrganization userOrganization;  
  
    @Column(name = "register_date")  
    private Date registerDate;  
}

以下是对您提供的 UserProfile 类中使用的 JPA 注解的详细解释:

  1. @Entity

    • 这是一个标记注解,用于指示该类是一个 JPA 实体。这意味着该类将映射到一个数据库表
  2. @Table(name = “user_profile”)

    • 这是一个注解,用于指定实体类映射到的数据库表的名称。在这个例子中,实体类 UserProfile 映射到名为 user_profile 的表
  3. @Id

    • 这是一个标记注解,用于指定实体类中的一个属性作为主键。
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)

    • 这是一个注解,用于指定主键值的生成策略。在这个例子中,主键值将自动生成,并且是自增
  5. @Column(name = “username”, unique = true)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,username 属性映射到名为 username 的列,并且该列是唯一的
  6. @Column(name = “password”)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,password 属性映射到名为 password 的列
  7. @Column(name = “email”)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,email 属性映射到名为 email 的列
  8. @Column(name = “phone”)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,phone 属性映射到名为 phone 的列
  9. @Column(name = “address”)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,address 属性映射到名为 address 的列
  10. @ManyToOne

    • 这是一个关系注解,用于指定实体类中的一个属性是多对一关系。在这个例子中,roleuserOrganization 属性都是多对一关系
  11. @JoinColumn(name = “role_id”)

    • 这是一个注解,用于指定多对一关系中的外键列。在这个例子中,role 属性的外键列名为 role_id
  12. @JoinColumn(name = “user_organization_id”)

    • 这是一个注解,用于指定多对一关系中的外键列。在这个例子中,userOrganization 属性的外键列名为 user_organization_id
  13. @Column(name = “register_date”)

    • 这是一个注解,用于指定实体类中的一个属性映射到数据库表中的一个列。在这个例子中,registerDate 属性映射到名为 register_date 的列
  14. 通过注解创建的类与数据库对应之后的作用:

    • ORM映射:注解提供了一种对象关系映射(Object-Relational Mapping)的方式,这意味着UserProfile类的实例可以直接映射到数据库中user_profile表的记录。这使得开发者能够以操作对象的方式操作数据库中的数据,无需编写繁琐的SQL语句。
    • 数据持久化:通过这些注解,你可以使用诸如Hibernate这样的ORM框架,将Java对象持久化到数据库中,也就是说,可以保存(insert)、更新(update)、删除(delete)以及查询(select)对象。
    • 简化数据库操作:注解减少了直接与数据库交互的复杂性,使得开发者可以更加专注于业务逻辑,而不是数据库操作的具体实现。
    • 代码维护性提高:当数据库结构发生变化时,只需要更新实体类,而不需要修改使用这些实体类的业务逻辑代码,提高了代码的可维护性。
    • 反射和元数据:注解可以被框架在运行时通过反射读取,框架可以利用这些元数据执行相应的数据库操作。
  15. 这个类(用户实体类)与VO(View Object)和DTO(Data Transfer Object)的关系:

    • UserProfile(实体类):这是一个JPA实体类,通常直接映射数据库表。实体类通常包含数据库表的所有字段,并且包含与数据库交互的逻辑(如通过ORM框架)。
    • VO(View Object):VO是表现层使用的对象,用于封装从后端传送到前端用于显示的数据。VO可以包含一个或多个实体类的部分数据,仅包含前端需要展示的数据。例如,可能会创建一个UserProfileVO,它只包含用户名、邮箱和电话,而不包含密码。
    • DTO(Data Transfer Object):DTO用于在不同层之间传输数据,特别是在分布式系统中的不同服务之间。DTO可以包含一个或多个实体类的数据,也可以包含多个实体类的组合。例如,UserProfileDTO可能不仅包含UserProfile的信息,还可能包含关联的UserRoleUserOrganization的信息。
  16. 意义:
    在实践中,实体类(如UserProfile)通常会被转换为DTO或VO,以便在不同层之间传递数据。比如,当从数据库检索用户信息时,服务层可能会将UserProfile实体转换为UserProfileDTO,然后传递给表现层,表现层再将UserProfileDTO转换为UserProfileVO来显示在页面上。这样做的好处是减少了层与层之间的耦合,提高了系统的模块化和灵活性。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值