0

在我的项目中,我使用 Spring 3.0 JdbcTemplate 来实现 DAO 类。它提供了方便的方法,如 query(...)、update(...) 等。这些方法接受对象作为绑定到查询的参数。在 javadoc 中指出,由 PreparedStatement 来猜测相应的 SQL 类型。因此,当使用原语或包装器时,它很简单。

但是在我的代码中,我使用特殊的类来表示 id。例如用户 ID。它具有获取其整数值的公共方法 - getInt()。现在我必须使用

userId.getInt()

每次我需要将 UserId 的实例传递给 JdbcTemplate 查询时。如果我忘记写只是

userId

我显然得到了 SQLException,因为我的 UserId 对象不能被准备好的语句使用(这里是将对象类型映射到相应 SQL 类型的规则)。但是这种类型的错误在编译过程中无法发现(因为 JdbcTemplate 接受 Object 作为参数),这使得引入 bug 变得容易。

有什么办法可以避免调用 .getInt() 并将我的 UserId 对象传递给查询?

4

1 回答 1

1

我想您可以org.springframework.jdbc.core.JdbcTemplate.newArgPreparedStatementSetter(Object[])使用新版本的org.springframework.jdbc.core.ArgPreparedStatementSetter检查(在doSetValue)中覆盖 Object argValue 是否属于您的特殊UserId类型。

于 2011-11-23T17:34:22.847 回答