2017-11-04 117 views
-3

我在查看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。

如果有人有更多的见解,请去头。我非常感谢你的帮助。

回答

1

一个用例将与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; 
} 
+0

所以,使用rowMapper有两个好处。 1.我们不需要在sql结果中包含每个变量。 2.我们可以做一些额外的操作。 –

+0

是的,还有一段时间,您可能需要在分配给结果对象之前执行复杂的验证或格式化,而在java中可以轻松完成的结果对象比在SQL中更容易。 – Raghu

+0

我明白了,谢谢。 –