【发布时间】:2012-01-04 22:50:47
【问题描述】:
在我的项目中,我使用 Spring 3.0 JdbcTemplate 来实现 DAO 类。它提供了方便的方法,如 query(...)、update(...) 等。这些方法接受对象作为绑定到查询的参数。在 javadoc 中指出,由 PreparedStatement 来猜测相应的 SQL 类型。因此,当使用原语或包装器时,它很简单。
但在我的代码中,我使用特殊的类来表示 id。例如用户 ID。它具有获取其整数值的公共方法 - getInt()。现在我必须使用
userId.getInt()
每次我需要将 UserId 的实例传递给 JdbcTemplate 查询。如果我忘记了,就写吧
userId
我显然得到了 SQLException,因为我的 UserId 对象不能被准备好的语句 (here are the rules to map Object type to corresponding SQL type) 使用。但是这种类型的错误在编译过程中无法发现(因为 JdbcTemplate 接受 Object 作为参数),这使得引入 bug 变得容易。
有什么方法可以避免调用 .getInt() 并将我的 UserId 对象传递给查询?
【问题讨论】:
标签: spring spring-jdbc