Как выбрать тип даты и времени mysql как java.time.LocalDateTime? - PullRequest
0 голосов
/ 30 апреля 2018
CREATE TABLE `datetimetest` (
 `id` int(11) NOT NULL,
 `thedatetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `thetimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8

org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
List<Map<String, Object>> generic = jdbcTemplate.queryForList("SELECT * FROM mytable);

Проблема: оба типа datetime и timestamp по умолчанию преобразуются в java.sql.Timestamp.

Вопрос: как я могу сказать JdbcTemplate глобально преобразовать любой столбец sql типа datetime в java.time.LocalDateTime (поскольку в любом случае он не имеет часового пояса в базе данных mysql)?

Sidenote: я знаю, что можно явно разобрать набор результатов, например:

rs.getObject(1, LocalDateTime.class));

Но я ищу глобальную конфигурацию.

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете использовать реализацию RowMapper при выполнении вызовов базы данных (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/RowMapper.html). Если вы хотите использовать это глобально, вы можете создать класс, который расширяет JdbcTemplate и переопределяет getColumnMapRowMapper в этом классе. Хотя для этого может потребоваться определить его для всех типов данных.

Еще одна опция, которую мы используем в моей компании, это то, что у нас есть свой собственный вспомогательный класс, который создает запрос / rowmapper и т. Д., Который расширяется для каждого класса, которому требуется DAO, и когда он вызывается из суперкласса, который переходит к JdbcTemplate все соответствующие биты информации, чтобы сделать запрос данных, как нам нужно, включая RowMapper для этого класса, чтобы все столбцы были необходимыми типами данных.

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