【问题标题】:How to map Employee's column - manager as Employee instance如何将员工的列 - 经理映射为员工实例
【发布时间】:2022-01-19 14:41:00
【问题描述】:

我应该执行光标移动以获取所有 Employee 实例。 考虑结果集是完全可滚动的(前后、开始、结束等)。 如果一个 Employee 有一个 Manager,它也应该包含它作为 Employee 实例。 这是一个包含一些列的 Employee 表。

ID         INTEGER PRIMARY KEY,
FIRSTNAME  VARCHAR(10),
LASTNAME   VARCHAR(10),
MIDDLENAME VARCHAR(10),
POSITION   VARCHAR(9),
MANAGER    INTEGER,
HIREDATE   DATE,
SALARY     DOUBLE,
DEPARTMENT INTEGER,
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPARTMENT) REFERENCES DEPARTMENT (ID)

例如插入表格:

INSERT INTO EMPLOYEE VALUES (7654, 'JOHN', 'MARTIN', 'MARIA', 'SALESMAN', 7698, TO_DATE('28-9-1981', 'DD-MM-YYYY'), 1250, 30);


INSERT INTO EMPLOYEE VALUES (7698, 'JOHN', 'BLAKE', 'MARIA', 'MANAGER', 7839, TO_DATE('1-5-1981', 'DD-MM-YYYY'), 2850, 30);

经理ID 第一个员工是7698,需要打印有关经理的所有信息而不是 ID。最终需要是

[Employee{id=7654, fullName=FullName{firstName=JOHN, lastName=MARTIN, middleName=MARIA}, position=SALESMAN, hired=1981-09-28, salary=1250.00000, manager=Employee{id=7698, fullName=FullName{firstName=JOHN, lastName=BLAKE, middleName=MARIA}, position=MANAGER, hired=1981-05-01, salary=2850.00000, manager=null}}

我创建了两个地图,并使用if 将员工添加到地图employ,将经理添加到地图manag

 Map<Integer, Employee> manag = new HashMap<>();
            Map<Integer, Employee> employ = new HashMap<>();
        
        BigInteger id = BigInteger.valueOf(resultSet.getInt("id"));
                FullName fullname = new FullName(resultSet.getString("firstName"), resultSet.getString("lastName"), resultSet.getString("middleName"));
                Position position = Position.valueOf(resultSet.getString("position"));
                LocalDate hired = resultSet.getObject("hiredate", LocalDate.class);
                BigDecimal salary = BigDecimal.valueOf(resultSet.getInt("salary"));
                Employee manager = null;//String.valueOf(resultSet.getInt("manager")) !=null? new Employee(id, fullname, position, hired, salary, null) : null;


if(resultSet.getString("position").equalsIgnoreCase("manager")) {
    Integer key = resultSet.getInt("id");
    Employee value = new Employee(id, fullname, position, hired, salary, null);
    manag.put(key, value);
} else {
    Integer key = resultSet.getInt("id");
    Employee value = new Employee(id, fullname, position, hired, salary, null);
    employ.put(key, value);

但是我接下来需要做什么来解决这个问题?

【问题讨论】:

    标签: java sql resultset


    【解决方案1】:

    我想 MANAGER 列是另一个员工的外键,对吧?

    如果是这样,我会先选择所有没有经理的员工,然后将每个员工添加到 Map。然后,当您使用经理迭代员工时,您可以从此映射中获取相应的经理并将其添加到新创建的员工实例中。

    如果您的层次结构超过 2 个级别,这将变得更加棘手。如果您不能按属性(例如部门)订购它们,那么您必须首先阅读所有员工的信息,然后在第二步添加他们的经理。

    如果您需要一组员工作为结果,您只需创建一组新的地图值。

    【讨论】:

    • 我编辑了问题,添加了一些细节,可能会有所帮助
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2020-03-12
    • 2019-09-30
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多