我有一个查询的结果集,希望以某种方式访问。
我想获取一份雇员列表,并为每位雇员一天不同的加班时间。 resulset返回值,例如:
empl_id,empl_name,超时时间,超时时间开始,超时时间结束。
我想在json中获得这些结果,但我想按员工ID对其进行分组,也就是说,我不希望这样:
empl_id = 125
empl_name = Niki Smith
overtime_day = 18/7/2019
overtime_start = 18:00
overtime_end = 20:00
empl_id = 125
empl_name = Niki Smith
overtime_day = 18/7/2019
overtime_start = 21:00
overtime_end = 22:00
我想要这样的东西:
empl_id = 125
empl_name = Niki Smith
overtime_day = 18/7/2019
overtime_start = 18:00
overtime_end = 20:00
overtime_start = 21:00
overtime_end = 22:00
我有一个Employee类和一个构造函数
public Employee(String empl_id , String empl_name, String overtime_day,
ArrayList<Overtime> overtimes)
以及带有String变量和getters / setter方法的类Overtime,用于overtime_start和overtime_end
我在处理集合或地图方面经验不足,因此,我将对如何构造这样的结果集的任何想法表示赞赏。谢谢。
答案 0 :(得分:0)
由于要检索结果集的数据,这意味着您要检索关系模型,因此预期每次加班都会获得一行,因此不幸的是,您要查找的表示形式无法在关系模型中完成,因为最终,您将获得数据而不是对象的记录。
要解决您的问题,您有两种选择
手动处理它,一旦从结果集中检索数据,就创建一个具有雇员键ID和代表输出的value对象的映射,每次检索记录时,请检查该映射中的雇员ID(如果有)不存在时,添加一个新对象,如果存在,则将超时对象添加到雇员对象中的列表中。 像这样:
Map<String, String> employeeMap = new LinkedHashMap<>();
//Iterate over result set with rs
while (rs.next()) {
{
OverTime entry = new OverTime(rs.getString("start"),
rs.getString("end"));
String id = rs.getString("id");
if(!employeeMap.containsKey(id) {
employeeMap.put(id, new Employee(id));
}
employeeMap.get(id).getOverTimeList.add(entry);
}
答案 1 :(得分:0)
您可以创建地图:Map<String, Employee> map
//获取emp_id具有地图密钥
遍历结果集,检查emp_id是否存在于映射中。如果存在,则检索Employee对象。在ArrayList加班中添加加班详细信息。并放回地图上。
最后,您可以按map.values()