gpt4 book ai didi

Java LocalDateTime与mybatis的转换

转载 作者:行者123 更新时间:2023-12-02 09:02:03 32 4
gpt4 key购买 nike

环境

  • mybatis-spring-boot-starter 2.0.1
  • mybatis 3.5.1
  • mybatis-spring 2.0.1
  • mysql-connector-java 8.0.16

jvm时区:亚洲/首尔

<小时/>

我的测试查询

SELECT #{from}, #{to}

输入

YearMonth input = YearMonth.of(year, month)
LocalDateTime from = input.atDay(1).atStartOfDay()
LocalDateTime to = input.atEndOfMonth().atTime(LocalTime.MAX)
<小时/>

案例一。将 serverTimezone=UTC 添加到 jdbc url

案例一。添加 serverTimezone=Asia/Seoul 到 jdbc url

[11:03:54] [main] [DEBUG] BaseJdbcLogger.debug(143)| ==>  Preparing: SELECT ?, ? 
[11:03:54] [main] [DEBUG] BaseJdbcLogger.debug(143)| ==> Parameters: 2020-01-01T00:00(LocalDateTime), 2020-01-31T23:59:59.999999999(LocalDateTime)
[11:03:54] [main] [DEBUG] Slf4jSpyLogDelegator.sqlTimingOccurred(368)| com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
1. SELECT 2020-01-01T00:00, 2020-01-31T23:59:59.999999999
{executed in 3 msec}
[11:03:54] [main] [INFO ] Slf4jSpyLogDelegator.resultSetCollected(610)|
|----------------------|----------------------|
|2019-12-31 15:00:00.0 |2020-01-31 15:00:00.0 |
|----------------------|----------------------|
|----------------------|----------------------|
[14:27:16] [main] [DEBUG] BaseJdbcLogger.debug(143)| ==>  Preparing: SELECT ?, ? 
[14:27:16] [main] [DEBUG] BaseJdbcLogger.debug(143)| ==> Parameters: 2020-01-01T00:00(LocalDateTime), 2020-01-31T23:59:59.999999999(LocalDateTime)
[14:27:16] [main] [DEBUG] Slf4jSpyLogDelegator.sqlTimingOccurred(368)| com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
1. SELECT 2020-01-01T00:00, 2020-01-31T23:59:59.999999999
{executed in 4 msec}
[14:27:16] [main] [INFO ] Slf4jSpyLogDelegator.resultSetCollected(610)|
|----------------------|----------------------|
|2020-01-01 00:00:00.0 |2020-02-01 00:00:00.0 |
|----------------------|----------------------|
|----------------------|----------------------|
<小时/>

Q1。 java LocalDateTime 是用 mybatis LocalDateTimeTypeHandler 转换为 jdbc TIMESTAMP 吗?

第二季度。 mybatis LocalDateTimeTypeHandler 是否根据 jdbc servertimezone 设置转换值?

第三季度。为什么我的 2020-01-31T23:59:59.999999999 值转换为 2020-02-01 00:00:00.0

<小时/>

最佳答案

  • A1。不,自 3.5.1 版本以来,MyBatis 不会将 LocalDateTime 转换为 java.sql.Timestamp(不过在早期版本中是这样做的)。
  • A2。不,MyBatis 只是将值传递给驱动程序。您可以查看type handler implementation你自己。
    实际上是驱动程序执行转换,并且该行为在其跟踪器上作为错误归档。
    https://bugs.mysql.com/bug.php?id=93444
  • A3。 Java 的 LocalDateTime 具有纳秒(9 位)精度,而 MySQL 的 TIMEDATETIMETIMESTAMP 仅具有微秒(6位数)精度。 MySQL documentation 中解释了您观察到的行为。 。

    Inserting a TIME, DATE, or TIMESTAMP value with a fractional seconds part into a column of the same type but having fewer fractional digits results in rounding.

关于Java LocalDateTime与mybatis的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088304/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com