用java类表示sql表

uplii1fm  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(306)

我在理解如何在javaweb应用程序中表示sql表以及如何处理各种类型的关系时遇到了问题。
假设有一个部门表:

CREATE TABLE IF NOT EXISTS `department` (
  `name` varchar(15) NOT NULL,
  `number` int(11) NOT NULL,
  PRIMARY KEY (`number`),
) ENGINE=InnoDB;

一个部门有很多员工,一个员工只能为一个部门工作,所以部门和员工之间存在1:n的关系。这可以是employees表:

CREATE TABLE IF NOT EXISTS `employee` (
  `first_name` varchar(15) NOT NULL,
  `last_name` varchar(15) NOT NULL,
  `SSN` char(9) NOT NULL,
  `address` varchar(30) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `salary` decimal(10,0) DEFAULT NULL,
  `N_D` int(11) NOT NULL,
  PRIMARY KEY (`SSN`),
  FOREIGN KEY `N_D` REFERENCES `department`(`number`),
) ENGINE=InnoDB;

到目前为止没有问题,但是现在让我们转到java。我的应用程序将有一个dao来读取数据库中选定的元素,可能有两个类称为 DepartmentDAO 以及 EmployeeDAO . 我的问题是如何正确地表示部门实体和员工实体?我该如何处理这段关系?我见过有人用数组表示1对多关系,用单个对象表示相反的情况:

public class Department{
    private String name;
    private Long number;

    /*1:N*/
    private Employee[] employees;

    /*getter and setter*/
}

员工类别:

public class Employee{
    private String firstName;
    private String lastName;
    private String SSN;
    private String address;
    private String gender;
    private int salary;

    /*N:1*/
    private Department department;

    /*getter and setter*/
}

看起来没问题,但我如何读取嵌套对象?在employee情况下,我可以在查询中使用join来读取两个对象,但在另一种情况下,我有一个数组。
例如,我想把某个部门的雇员人数形象化。当我读取department对象时,我还应该读取n个employee对象和by employees.length,我可以得到数字。是不是有点太贵了?把另一个属性放在我的系类中是错误的( private int numberOfEmployees; )并在sql中使用count读取它?
事先谢谢你的帮助。

ggazkfy8

ggazkfy81#

如果我没弄错的话,你想数一数每个部门的员工吗?
如果是这样,我建议使用dao模式。除了dao模式之外,还可以使用键:值列表或类似hashmap的Map。
Map应该包含作为关键的特定部门和作为价值观的员工。
此外,您必须同步数据库和java对象,才能向Map中添加对。
总而言之,您需要创建一个数据管理类,该类包含一个带有键(department)和值(employee)的列表或Map。
此外,它必须能够与数据库进行事务处理以同步数据。
因此,您可以使用dao模式和hashmap,参考如下。
我不知道这是否是一个好的做法,但它将工作。
刀型
散列表
编辑:当我再次阅读您的问题时,hashmap应该在department类中,但是您仍然可以使用dao模式进行同步和数据管理。

相关问题