spring jdbc模板自定义类型

时间:2011-11-23 16:29:48

标签: spring spring-jdbc

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

但在我的代码中,我使用特殊的类来表示id。例如UserId。它有公共方法来获取其整数值 - 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对象传递给查询吗?

1 个答案:

答案 0 :(得分:1)

我想你可以使用新版org.springframework.jdbc.core.JdbcTemplate.newArgPreparedStatementSetter(Object[])覆盖org.springframework.jdbc.core.ArgPreparedStatementSetterdoSetValue检查(UserId}对象argValue是否属于您的特殊{{1}}类型。