java - 使用列表成员将 JDBC 结果集转换为 java POJO

标签 java spring spring-jdbc jdbctemplate

我有两个查询和结果集,在下面的代码中我想展示特定的userGroupCode我有确定userPreferenceemployee与之相关。我编写了下面的代码来显示 userGroupCode对象:

String query1= "SELECT ug.userGroupCode, ug.userGroupDesc, up.userPreference"
+ "FROM dbo.UserGroup_link ug INNER JOIN dbo.UserPreference up ON  ug.userGroupCode = up.userGroupCode";
<表类=“s-表”> <标题> 用户组代码 用户组描述 用户偏好 <正文> A100 金融 孟买 A100 金融 类加罗尔 A200 供应链 钦奈 A201 营销 德里 A201 营销 加尔各答 A300 健康 印多尔
String query2= "SELECT ug.userGroupCode, ug.userGroupDesc, emp.employee_id,emp.name,emp.role"
+ "FROM dbo.UserGroup ug INNER JOIN dbo.employee emp ON  ug.userGroupCode = emp.userGroupCode";
<表类=“s-表”> <标题> 用户组代码 用户组描述 employee_id 姓名 角色 <正文> A100 金融 101 Foo1 开发人员 A100 金融 101 Foo1 团队负责人 A200 供应链 091 测试1 经理 A201 营销 591 用户1 分析师 A201 营销 1001 Boo1 Scrum 大师 A300 健康 1001 Boo1 开发人员

我有课UserGroupMapping像:

public class UserGroupMapping {
    private String userGroupCode;
    private String userGroupCode;
    private List<String> userPreference;
    private List<Employee> emp;
    
    //getter and setter
}

Employee 的另一个类(class)是:

public class Employee {
    private String employee_id;
    private String name;
    private List<String> role;
    
    //getter and setter
}

在我的存储过程类中,我在jdbcTemplate.query()的帮助下调用这些查询。 ;

String userCode = null; 
List<String> userPreferenceList = new ArrayList<>();
List<UserGroupMapping> userGroupMappingList = new ArrayList<>();
List<UserGroupMapping> userGroupMappingList1 = new ArrayList<>();
UserGroupMapping userGroupMapping = new UserGroupMapping();
List<Employee> employeeList = new ArrayList<>();
Employee emp = new Employee();
UserGroupMapping userGroupMapping1 = new UserGroupMapping();

jdbcTemplate.query(query1, (rs)->{

    String user_group_code = rs.getString("userGroupCode");
    String user_group_desc = rs.getString("userGroupDesc");
    String user_preference = rs.getString("userPreference");
    
    if(userCode == null){
        userGroupMapping.setUserGroupCode(user_group_code);
        userGroupMapping.setUserGroupDesc(user_group_desc);
        userPreferenceList.add(userPreference);
        userCode = user_group_code;
    } else if (userCode.equals(user_group_code)) {
        userPreferenceList.add(userPreference);
    } else {
        userGroupMapping.setUserPreference(userPreferenceList);
        userGroupMappingList.add(userGroupMapping);
        userPreferenceList = new ArrayList<>();
        userGroupMapping = new userGroupMapping();
        userGroupMapping.setUserGroupCode(user_group_code);
        userGroupMapping.setUserGroupDesc(user_group_desc);
        userPreferenceList.add(userPreference);
        userCode = user_group_code;
    }});
    userCode = null;
    userGroupMapping.setUserPreference(userPreferenceList);
    userGroupMappingList.add(userGroupMapping);
jdbcTemplate.query(query2, (rs)->{

String user_group_code = rs.getString("userGroupCode");
String user_group_desc = rs.getString("userGroupDesc");
String emp_id = rs.getString("employee_id");
String name = rs.getString("name");

if(userCode == null){
    userGroupMapping1.setUserGroupCode(user_group_code);
    userGroupMapping1.setUserGroupDesc(user_group_desc);
    emp.setId(employeeId);
    emp.setName(name);
    employeeList.add(emp);
    userCode = user_group_code;
} else if (userCode.equals(user_group_code)) {
    Employee emp = new Employee();
    emp.setId(employeeId);
    emp.setName(name);
    employeeList.add(emp);
} else {
    userGroupMapping1.setEmployee(employeeList);
    userGroupMappingList1.add(userGroupMapping1);
    employeeList = new ArrayList<>();
    userGroupMapping1 = new userGroupMapping();
    Employee emp = new Employee();
    userGroupMapping1.setUserGroupCode(user_group_code);
    userGroupMapping1.setUserGroupDesc(user_group_desc);
    emp.setId(employeeId);
    emp.setName(name);
    employeeList.add(emp);
    userCode = user_group_code;
}});
userGroupMapping1.setEmployee(employeeList);
userGroupMappingList1.add(userGroupMapping1);

    List<UserGroupMapping> ugList = Stream.concat(userGroupMappingList.stream, userGroupMappingList1.stream).distinct().collect(Collectors.toList())
return ugList;

问题是我希望我的输出如下:

[
    {
        "userGroupCode" : "A100",
        "userGroupDesc" : "Finance",
        "userPreference": ["Mumbai","Bangalore"],
        "Employee"      : [
                            "employee_id" : "101",
                            "name"        : "Foo1",
                            "role"        : ["Developer","Team Lead"]
                          ]
    }
]

合并两个列表后,我得到以下输出:

[
    {
        "userGroupCode" : "A100",
        "userGroupDesc" : "Finance",
        "userPreference": ["Mumbai","Bangalore"],
        "Employee"      : []
    },
    {
        "userGroupCode" : "A100",
        "userGroupDesc" : "Finance",
        "userPreference": [],
        "Employee"      : [
                            "employee_id" : "101",
                            "name"        : "Foo1",
                            "role"        : []
                          ]
    }
]

有人可以帮我做一些事情吗:

  1. 如何将角色嵌入到 Employee 对象中。
  2. 如何根据 userGroupCode 和 userGroupDesc 合并表格。
  3. 我感觉代码没有进行性能优化,我该如何优化这段代码。

提前谢谢您。

最佳答案

奥拉,

可以使用Map进行分组,以id为key,value为object(聚合成)。例如:

if(map.containes(key))
{
    get object from map and do Ops.
}
else
{
    1. Create new object
    2. Do set Ops on Object
    3. Add to map.
}

关于java - 使用列表成员将 JDBC 结果集转换为 java POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68273414/

相关文章:

java - IntelliJ Spring 配置问题

java - 将映射传递给 IteratorItemReader

java - 如何在 Kotlin 中为 @PropertySource 创建 Java 数组?

java - Hibernate + PostgreSQL : Lazy Loading with Exclusive Locks

java - 使用 RowMapper 返回 Map<String,Map<String,List<Object>>>

Spring 4.1.6 JdbcTemplate 阻塞和同步?

java - 如何使用带有 MYSQL JDBC 驱动程序的 SimpleJdbcInsert 和 executeBatch 获取生成的 key ?

Java CDI 选择替代方案,无优先级

java - Hibernate 仅在基本类型上指定一次 @Column 注解

java - Rounded LineBorder - 不是所有的角都是圆的