如何将员工的列 - 经理映射为员工实例
How to map Employee's column - manager as Employee instance
我应该执行光标移动以获取所有 Employee 实例。
考虑结果集是完全可滚动的(前后、开始、结束等)。
如果一个 Employee 有一个 Manager,它也应该包含它作为 Employee 实例。
这是一位 table 员工,有一些专栏。
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)
例如插入table:
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);
但是接下来我需要做什么来解决这个问题?
我想 MANAGER 列是另一个员工的外键,对吧?
如果是这样,我会先 select 所有没有经理的员工,然后将每个员工添加到 Map 中。然后,当您使用经理迭代员工时,您可以从此映射中获取相应的经理并将其添加到新创建的员工实例中。
如果您的层次结构超过 2 层,这将变得更加棘手。如果您不能按 属性(例如部门)订购它们,那么您必须首先阅读所有员工的信息,然后在第二步中添加他们的经理。
如果您随后需要一组员工值,则只需创建一组新的映射值。
我应该执行光标移动以获取所有 Employee 实例。 考虑结果集是完全可滚动的(前后、开始、结束等)。 如果一个 Employee 有一个 Manager,它也应该包含它作为 Employee 实例。 这是一位 table 员工,有一些专栏。
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)
例如插入table:
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);
但是接下来我需要做什么来解决这个问题?
我想 MANAGER 列是另一个员工的外键,对吧?
如果是这样,我会先 select 所有没有经理的员工,然后将每个员工添加到 Map
如果您的层次结构超过 2 层,这将变得更加棘手。如果您不能按 属性(例如部门)订购它们,那么您必须首先阅读所有员工的信息,然后在第二步中添加他们的经理。
如果您随后需要一组员工值,则只需创建一组新的映射值。