在对象中映射自定义 JdbcTemplate 查询结果
Map Custom JdbcTemplate query result in an Object
我是 java 的新手并尝试使用 spring 框架。我有个问题。
例如,我有 table :
- 员工(id_employee,姓名)
- employee_product (id_employee_product, id_employee, product_name)
如果我 select 来自我的员工 table 的员工数据,我可以将其映射到 POJO 模型用户中并在该模型中定义 tables 结构,如下所示:
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 table 的 select 数据的清晰示例。
我的问题是,如果我的数据是自定义查询,如何映射来自查询的数据?这样我们使用来自 tables 的连接和 select 自定义字段,我是否需要在每个查询中创建 POJO?
有时我只需要 select employee.id_employee
和 employee.name
员工 table 的字段。
在另一个控制器中,我需要从我的 employee
table select employee.id_employee
。
另一种情况,我只需要selectemployee.name
和employee_product.product_name
是否有替代方案来映射数据而不为每种情况创建 POJO?
像这样组合两个表创建一个 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
Doc Link 将您的存储库写成
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
子句与 Employee
POJO 的文件名相同。
一旦您执行查询,它将自动映射到 POJO。您无需编写自定义映射器BeanPropertyRowMapper
将负责映射。
我是 java 的新手并尝试使用 spring 框架。我有个问题。 例如,我有 table :
- 员工(id_employee,姓名)
- employee_product (id_employee_product, id_employee, product_name)
如果我 select 来自我的员工 table 的员工数据,我可以将其映射到 POJO 模型用户中并在该模型中定义 tables 结构,如下所示:
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 table 的 select 数据的清晰示例。
我的问题是,如果我的数据是自定义查询,如何映射来自查询的数据?这样我们使用来自 tables 的连接和 select 自定义字段,我是否需要在每个查询中创建 POJO?
有时我只需要 select employee.id_employee
和 employee.name
员工 table 的字段。
在另一个控制器中,我需要从我的 employee
table select employee.id_employee
。
另一种情况,我只需要selectemployee.name
和employee_product.product_name
是否有替代方案来映射数据而不为每种情况创建 POJO?
像这样组合两个表创建一个 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
Doc Link 将您的存储库写成
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
子句与 Employee
POJO 的文件名相同。
一旦您执行查询,它将自动映射到 POJO。您无需编写自定义映射器BeanPropertyRowMapper
将负责映射。