Spring JDBC шаблон пользовательского типа - PullRequest
0 голосов
/ 23 ноября 2011

В моем проекте я использую Spring 3.0 JdbcTemplate для реализации классов DAO.Он предоставляет удобные методы, такие как query (...), update (...) и т. Д. Эти методы принимают объекты в качестве аргументов для привязки к запросу.В javadoc указывается, что PreparedStatement остается угадывать соответствующий тип SQL.Поэтому при использовании примитивов или оберток это просто.

Но в моем коде я использую специальные классы для представления идентификаторов.Например, UserId.У него есть открытый метод для получения целочисленного значения - getInt ().Прямо сейчас я должен использовать

userId.getInt()

каждый раз, когда мне нужно передать экземпляр UserId в запрос JdbcTemplate.Если я забуду и напишу только

userId

Я, очевидно, получу SQLException, поскольку мой объект UserId не может быть использован подготовленным оператором ( вот правила для сопоставления типа объекта с соответствующим типом SQL ).Но этот тип ошибки не может быть обнаружен во время компиляции (поскольку JdbcTemplate принимает Object в качестве параметра), что облегчает введение ошибок.

Есть ли способ избежать вызова .getInt () и просто передать мой UserIdобъект в запросе?

1 Ответ

1 голос
/ 23 ноября 2011

Я полагаю, вы могли бы переопределить org.springframework.jdbc.core.JdbcTemplate.newArgPreparedStatementSetter(Object[]) с помощью новой версии org.springframework.jdbc.core.ArgPreparedStatementSetter, которая проверяет (в doSetValue), имеет ли объект argValue вашего специального типа UserId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...