JdbcTemplate中的两个queryForObject方法
问题描述:
我在查看Spring文档。在 Class JdbcTemplate页面,我有点困惑,因为看起来这两种方法是做同样的事情。它们的目的都是返回一个由SQL结果形成的对象。给定的SQLJdbcTemplate中的两个queryForObject方法
<T> T queryForObject(java.lang.String sql,
java.lang.Object[] args,
RowMapper<T> rowMapper)
查询创建从SQL预处理语句和参数列表绑定到查询,通过RowMapper的映射一个结果行的Java对象。
<T> T queryForObject(java.lang.String sql,
java.lang.Object[] args,
java.lang.Class<T> requiredType)
查询给定SQL从SQL创建预准备语句以及绑定到查询的参数列表,期望结果对象。
question
他们是否有同样的目的,就像我所理解的一样?
如果是这样,为什么我们需要这两种方法?
如果没有,他们之间有什么区别?他们每个人都有一个典型的场景吗?
答案
因此,从我们现在得到的答案。
带requiredType的方法用于返回仅由SQL结果形成的对象。
与RowMapper的方法使我们能够 1.返回来自SQL结果形成一个对象,我们不需要类的每一个变量的结果 2.分配导致对象,它可以做之前复杂的验证或格式化在java中比在SQL中轻松完成
谢谢你Raghu。
如果有人有更多的见解,请去头。我非常感谢你的帮助。
答
一个用例将与rowMapper我们可以自定义结果对象的准备。
@Override
public Employee mapRow(ResultSet rs, int rownumber) throws SQLException {
Employee e=new Employee();
e.setId(rs.getInt(1));
e.setName(rs.getString(2));
e.setSalary(rs.getInt(3));
//e.someNonSetterMethod(customize(rs.getString(4)));
return e;
}
所以,使用rowMapper有两个好处。 1.我们不需要在sql结果中包含每个变量。 2.我们可以做一些额外的操作。 –
是的,还有一段时间,您可能需要在分配给结果对象之前执行复杂的验证或格式化,而在java中可以轻松完成的结果对象比在SQL中更容易。 – Raghu
我明白了,谢谢。 –