一尘不染

Map Custom JdbcTemplate查询结果在一个对象中

spring-boot

我是Java新手,尝试使用spring框架。我有个问题。例如,我有table:

  1. 员工(id_employee,姓名)
  2. 员工产品(id_employee_product,id_employee,product_name)

如果从Employee表中选择一个雇员数据,则可以在POJO模型User中映射它,并在该模型中定义表结构,如下所示:

public class Employee {
    private final int id_employee;
    private final String nama;

    public Employee(int id_employee, String nama){
        this.id_employee = id_employee;
        this.nama = nama;
    }

    public int getId() {
        return id_employee;
    }

    public String getNama() {
        return nama;
    }
}

这是来自jdbcTemplate的地图:

final String sql = "SELECT id_employee, nama FROM employee";
return jdbcTemplate.query(sql, (resultSet, i) -> {
    return new Employee(
            resultSet.getInt("id_employee"),
            resultSet.getString("nama")
    );
});

这是从1个表中选择数据的明显示例。

我的问题是,如果我的数据是自定义查询,如何从查询映射数据?这样的我们使用联接并从该表中选择自定义字段,我是否需要为每个查询创建POJO?

有时我只需要选择employee.id_employee,然后employee.name从我的员工表中选择字段。

在另一个控制器中,我需要employee.id_employeeemployee表中进行选择。

在另一种情况下,我只需要选择employee.name,然后employee_product.product_name

是否有其他方法可以映射数据而不为每种情况创建POJO?


阅读 405

收藏
2020-05-30

共1个答案

一尘不染

创建一个合并两个表的POJO,如下所示

public class Employee {
    private int id_employee;
    private String name;
    private int id_employee_product.
    private String product_name

    //getter and setters  
    //Don't create a constructor its Entiry
}

现在,通过使用BeanPropertyRowMapper 文档链接,将您的存储库写为

public List<Employee> fetchEmployeeProduct(){
    JdbcTemplate jdbcTemplate = new JdbcTemplate("Your_DataSource");
    StringBuilder query = new StringBuilder();
    query.append("Your Query");
    List<Employee> employeeProductList = 
        jdbcTemplate.query(query.toString(), new BeanPropertyRowMapper<Employee>(Employee.class));
}

确保SELECT查询中的子句与EmployeePOJO的文件名相同。

一旦执行查询,它将自动映射到POJO。您无需编写自定义映射器即可BeanPropertyRowMapper处理映射。

2020-05-30