zl程序教程

您现在的位置是:首页 >  后端

当前栏目

深入实践Spring Boot2.1.2 实体建模

Spring建模 实践 深入 实体
2023-09-11 14:16:04 时间

2.1.2 实体建模

首先创建一些普通对象,用来与数据库的表建立映射关系,接着演示如何使用JPA对数据库进行增删查改等存取操作。

假如现在有三个实体:部门、用户和角色,并且它们具有一定的关系,即一个用户只能隶属于一个部门,一个用户可以拥有多个角色。它们的关系模型如图2-1所示。

 

图2-1 MySQL实体-关系模型示例

Spring Boot的实体建模与使用Spring框架时的定义方法一样,同样比较方便的是使用了注解的方式来实现。

部门实体的建模如代码清单2-2所示,其中注解@Table指定关联的数据库的表名,注解@Id定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成。部门实体只有两个字段:id和name。程序中省略了Getter和Setter方法的定义,这些方法可以使用IDEA的自动生成工具很方便地生成。

代码清单2-2 部门实体建模

@Entity

@Table(name = "deparment")

public class Deparment {

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;

    private String name;

 

    public Deparment() {

    }

        ……

}

用户实体包含三个字段:id、name和createdate,用户实体建模如代码清单2-3所示。其中注解@ManyToOne定义它与部门的多对一关系,并且在数据库表中用字段did来表示部门的ID,注解@ManyToMany定义与角色实体的多对多关系,并且用中间表user_role来存储它们各自的ID,以表示它们的对应关系。日期类型的数据必须使用注解@DateTimeFormat来进行格式化,以保证它在存取时能提供正确的格式,避免保存失败。注解@JsonBackReference用来防止关系对象的递归访问。

代码清单2-3 用户实体建模

@Entity

@Table(name = "user")

public class User implements java.io.Serializable{

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;

    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Date createdate;

 

    @ManyToOne

    @JoinColumn(name = "did")

    @JsonBackReference

    private Department deparment;

 

    @ManyToMany(cascade = {}, fetch = FetchType.EAGER)

    @JoinTable(name = "user_role",

            joinColumns = {@JoinColumn(name = "user_id")},

            inverseJoinColumns = {@JoinColumn(name = "roles_id")})

    private List Role roles;

 

    public User() {

    }

……

角色实体建模比较简单,只要按设计的要求,定义id和name字段即可,当然同样必须保证id的唯一性并将其设定为自动生成。角色实体的建模如代码清单2-4所示。

代码清单2-4 角色实体建模

@Entity

@Table(name = "role")

public class Role implements java.io.Serializable{

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;

    private String name;

 

    public Role() {

    }

……


Spring Cloud 应用 Proxyless Mesh 模式探索与实践 本文通过一个 Demo 演示了 SpringCloud 应用通过接入MSE服务治理之后,无需修改任意代码就能具备 Proxyless Mesh的能力,当前 MSE 服务治理支持还有些限制,在持续补充完善中。
Spring Cloud 应用 Proxyless Mesh 模式探索与实践 本文通过一个 Demo 演示了 SpringCloud 应用通过接入MSE服务治理之后,无需修改任意代码就能具备 Proxyless Mesh的能力,当前 MSE 服务治理支持还有些限制,在持续补充完善中。当前 MSE 服务治理 Proxyless 模式支持基础的服务发现能力以及 DestinationRule 的 Subset 能力,我们可以配合 MSE 流量治理实现 Mesh 架构下的全链路灰度、标签路由等治理能力。
微服务开发平台 Spring Cloud Blade 部署实践 本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前端框架用于快速搭建企业级的 SaaS 多租户微服务平台。
基于网关服务治理的研究与实践(三)微服务治理框架Spring Cloud SpringCloud是Spring官方推出的微服务治理框架,是一个基于Spring Boot框架实现的微服务架构开发工具集,其提供了完整的微服务解决方案,包括:服务治理、注册中心、配置管理、熔断器、服务路由等等。
Spring AOP注解的学习与实践 使用 横切 技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
大规模 Spring Cloud 微服务无损上下线探索与实践 软件迭代过程中,除了风险控制,在微服务领域还有一个常见的问题就是应用上下线过程中的流量治理,目的也比较明确,确保应用在发布、扩缩容、重启等场景时,不会损失任何业务流量损失。无损下线技术正是在这样的背景下应运而生的,他解决了变更过程中的业务流量损失问题,也是流量治理体系中非常重要的一个环节。无损下线功能有效地保证我们业务流量的平滑,提升了微服务开发的幸福度。
Spring 加强版 ORM 框架 spring-data-jpa 入门与实践 伴随着 Java 诞生与发展,目前 Java 界涌现出了五花八门的数据访问技术,有一些名词甚至达到了耳熟能详的程度,包括 JDBC、JTA、JPA、ORM、MyBatis 等等,这篇介绍的是 Spring Data 项目中的 spring-data-jpa 框架,了解其他相关技术可以查阅我前面的文章。
Spring 加强版 ORM 框架 spring-data-jdbc 入门与实践 Spring 为了支持以统一的方式访问不同类型的数据库,提供了一个 Spring Data 框架,这个框架根据不同的数据库访问技术划分了不同的模块。上篇 《Spring 加强版 ORM 框架 Spring Data 入门》 介绍了不同模块遵循的通用规范,这篇我们来介绍下基于 JDBC 技术实现的 spring-data-jdbc 模块。
大规模 Spring Cloud 微服务无损上下线探索与实践 软件迭代过程中,除了风险控制,在微服务领域还有一个常见的问题就是应用上下线过程中的流量治理,目的也比较明确,确保应用在发布、扩缩容、重启等场景时,不会损失任何业务流量损失。无损下线技术正是在这样的背景下应运而生的,他解决了变更过程中的业务流量损失问题,也是流量治理体系中非常重要的一个环节。无损下线功能有效地保证我们业务流量的平滑,提升了微服务开发的幸福度。
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载