В моем проекте я использую Spring 3.0 JdbcTemplate для реализации классов DAO.Он предоставляет удобные методы, такие как query (...), update (...) и т. Д. Эти методы принимают объекты в качестве аргументов для привязки к запросу.В javadoc указывается, что PreparedStatement остается угадывать соответствующий тип SQL.Поэтому при использовании примитивов или оберток это просто.
Но в моем коде я использую специальные классы для представления идентификаторов.Например, UserId.У него есть открытый метод для получения целочисленного значения - getInt ().Прямо сейчас я должен использовать
userId.getInt()
каждый раз, когда мне нужно передать экземпляр UserId в запрос JdbcTemplate.Если я забуду и напишу только
userId
Я, очевидно, получу SQLException, поскольку мой объект UserId не может быть использован подготовленным оператором ( вот правила для сопоставления типа объекта с соответствующим типом SQL ).Но этот тип ошибки не может быть обнаружен во время компиляции (поскольку JdbcTemplate принимает Object в качестве параметра), что облегчает введение ошибок.
Есть ли способ избежать вызова .getInt () и просто передать мой UserIdобъект в запросе?