Map Custom JdbcTemplate query result in an Object

我是研究僧i 提交于 2020-05-14 12:05:06

问题


I new in java and try to use spring framework. I have a question. By example, I have table :

  1. employee (id_employee, name)
  2. employee_product (id_employee_product, id_employee, product_name)

if I select an employee data from my Employee table, I can map it in a POJO model User and define the tables structure in that model, like this:

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;
    }
}

And this is the map from 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")
    );
});

That is clear example for select data from 1 table.

My question is, how to map data from query if my data is custom query? Such us using join and select custom field from that tables, Am I need to create POJO every query?

Sometimes I need to select only employee.id_employee, and employee.name field from my employee table.

And in another controller I need to select employee.id_employee from my employee table.

In another case, I need only select employee.name, and employee_product.product_name

Is there an alternative to map the data without creating POJO for every case?


回答1:


Create a one POJO combining two tables like this

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
}

Now by using a BeanPropertyRowMapper Doc Link write your repository like

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));
}

Make sure SELECT clause in the query and Employee POJO's filed name is same.

Once if you execute your query it will automatically map to POJO. You no need to write a custom mapper BeanPropertyRowMapperwill take care of mapping.



来源:https://stackoverflow.com/questions/61571357/map-custom-jdbctemplate-query-result-in-an-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!