我是Java新手,尝试使用spring框架。我有个问题。例如,我有table:
如果从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_employee
employee.name
在另一个控制器中,我需要employee.id_employee从employee表中进行选择。
employee
在另一种情况下,我只需要选择employee.name,然后employee_product.product_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 文档链接,将您的存储库写为
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的文件名相同。
SELECT
Employee
一旦执行查询,它将自动映射到POJO。您无需编写自定义映射器即可BeanPropertyRowMapper处理映射。