【问题标题】:two queryForObject methods in JdbcTemplateJdbcTemplate 中的两个 queryForObject 方法
【发布时间】:2018-04-16 20:32:20
【问题描述】:

我正在查看 Spring 文档。在 Class JdbcTemplate page,我有点困惑,因为这两种方法似乎在做同样的事情。它们的目的都是返回由 SQL 结果形成的对象。

<T> T queryForObject(java.lang.String sql, 
                     java.lang.Object[] args, 
                     RowMapper<T> rowMapper)

查询给定的 SQL 以从 SQL 和参数列表创建准备好的语句以绑定到查询,通过 RowMapper 将单个结果行映射到 Java 对象。

<T> T queryForObject(java.lang.String sql, 
                     java.lang.Object[] args, 
                     java.lang.Class<T> requiredType)

查询给定的 SQL 以从 SQL 创建准备好的语句和绑定到查询的参数列表,期望结果对象。

问题

他们的目的和我理解的一样吗?

如果是这样,为什么我们需要这两种方法?

如果不是,它们之间有什么区别?他们每个人都有典型的场景吗?

回答

所以从我们现在得到的答案来看。

requiredType 方法仅用于返回由 SQL 结果形成的对象。

使用 RowMapper 的方法允许我们 1.返回一个由SQL结果形成的对象,我们不需要结果中的类的每个变量 2. 在分配给结果对象之前进行复杂的验证或格式化,这在 java 中比在 SQL 中更容易完成

谢谢拉古。

如果有人有更深入的了解,请前往。非常感谢您的帮助。

【问题讨论】:

    标签: java spring spring-mvc jdbc spring-jdbc


    【解决方案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;  
    }  
    

    【讨论】:

    • 所以,使用 rowMapper 有两个好处。 1.我们不需要在sql结果中包含每个变量。 2.我们可以做一些额外的操作。
    • 是的,有时您可能需要在分配给结果对象之前进行复杂的验证或格式化,这在 java 中比在 SQL 中更容易完成。
    • 我看不出这是如何解决实际问题的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多