首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有MS SQL的MyBatis未映射到LocalDateTime

是指在使用MyBatis框架操作MS SQL数据库时,遇到将数据库中的日期时间类型字段映射到Java对象的LocalDateTime类型时出现的问题。

MyBatis是一个优秀的持久层框架,可以方便地将数据库中的数据映射到Java对象,并提供了灵活的SQL查询和操作功能。MS SQL是一种常用的关系型数据库管理系统。

在MyBatis中,通过配置映射文件或注解来定义数据库表和Java对象之间的映射关系。对于日期时间类型的字段,MyBatis默认使用Java的Date类型进行映射。然而,Java的Date类型在处理日期时间时存在一些问题,比如不支持时区信息,不支持毫秒级精度等。

而Java 8引入了新的日期时间API,其中LocalDateTime是一个不包含时区信息的日期时间类型,提供了更好的日期时间处理能力。因此,希望将数据库中的日期时间字段映射到LocalDateTime类型,以便更好地处理日期时间相关的业务逻辑。

解决这个问题的方法是通过自定义TypeHandler来实现MS SQL的日期时间类型到LocalDateTime的映射。TypeHandler是MyBatis提供的一个接口,用于处理数据库类型和Java类型之间的转换。

以下是一个示例的TypeHandler实现:

代码语言:txt
复制
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;

public class LocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
        ps.setTimestamp(i, Timestamp.valueOf(parameter));
    }

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
        Timestamp timestamp = rs.getTimestamp(columnName);
        if (timestamp != null) {
            return timestamp.toLocalDateTime();
        }
        return null;
    }

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        Timestamp timestamp = rs.getTimestamp(columnIndex);
        if (timestamp != null) {
            return timestamp.toLocalDateTime();
        }
        return null;
    }

    @Override
    public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        Timestamp timestamp = cs.getTimestamp(columnIndex);
        if (timestamp != null) {
            return timestamp.toLocalDateTime();
        }
        return null;
    }
}

上述代码中,我们通过继承BaseTypeHandler类,并指定泛型为LocalDateTime,实现了将数据库中的Timestamp类型转换为LocalDateTime类型的逻辑。具体的转换逻辑在setNonNullParameter和getNullableResult方法中实现。

接下来,需要在MyBatis的配置文件中注册这个TypeHandler:

代码语言:txt
复制
<typeHandlers>
    <typeHandler handler="com.example.LocalDateTimeTypeHandler"/>
</typeHandlers>

配置完成后,MyBatis就能正确地将MS SQL数据库中的日期时间字段映射到LocalDateTime类型了。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库SQL Server:https://cloud.tencent.com/product/cdb_sqlserver
  • 腾讯云云数据库TDSQL:https://cloud.tencent.com/product/tdsql
  • 腾讯云云数据库CynosDB:https://cloud.tencent.com/product/cynosdb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP转JAVA学习遇到一系列问题记录

介于全自动ORM如Hibernate,和手写全部SQL比如JdbcTemplate之间,还有一种半自动ORM,它只负责把ResultSet自动映射到JavaBean,或者自动填充JavaBean参数...// 首先,spring-boot项目中使用的话,需要安装 `MyBatis-Spring-Boot-Starter` 依赖,之后就可以使用`@Mapper`注解(默认搜寻带有 @Mapper 注解...这些接口和实现类主要用于将Java对象映射到数据库表,并执行一些数据操作,例如插入、更新、删除和查询。DAO通常使用JDBC和SQL语句来实现数据操作。...在MyBatis中,DAO可以使用MyBatisSqlSession和SqlSessionFactory来管理数据库连接和事务,并且可以使用MyBatis动态SQL功能执行高度灵活查询。...Mapper使用XML或注解来描述SQL语句和参数映射,并将它们映射到Java方法上。在执行数据操作时,Mapper会将Java方法转换为对应SQL语句,并使用SqlSession执行该SQL语句。

39330

都说了能不动就别动,非要去调整,出生产事故了吧

Cause: java.sql.SQLException: Conversion not supported for type java.time.LocalDateTime ; Conversion...替换 Mybatis 似乎就完成了   顺让人有点怀疑   Conversion not supported for type java.time.LocalDateTime   我们再回过头去看看前面说到异常...MyBatis 3.5.0 会处理 LocalDateTime 类型转换(将 java.sql.Timestamp 转换成 java.time.LocalDateTime )   然而,注意了,然而来了...  附属文件生成时候,会校验其依赖主文件是否都生成了,如果有任意一个主文件生成,依赖文件不能生成并抛出异常   这个业务还是比较简单吧   但在附属文件校验优化上,我背上了生产事故   优化前校验...生产异常   中午升级之后,稳定运行了一段时间,期间文件正常生成,没出现任何问题   晚上 19 点,有个附属文件生成失败,异常提示: 依赖资源[abc_{yyyyMMdd}.txt]生成   当时看到这个异常第一眼

13210
  • MyBatis TypeHandler详解:原理与自定义实践

    SQL语句执行过程中,无论是设置参数还是获取结果集,都需要通过TypeHandler进行类型转换。MyBatis提供了丰富内置TypeHandler实现,以支持常见数据类型转换。...设置参数(Parameter Setting) 当MyBatis执行一个预编译SQL语句(如INSERT、UPDATE等)时,它需要将Java对象中属性值设置到SQL语句中对应占位符上。...这些方法分别负责在SQL语句执行时将Java类型参数转换成JDBC类型,以及在执行SQL查询后将JDBC类型结果转换成Java类型。...接口使用了LocalDateTime类型字段,并且你数据库表中有对应时间戳字段。...这种方法在你已经使用示例中展示了。当MyBatis扫描到带有这些注解TypeHandler时,它会自动注册。

    1.5K10

    公司新来一个干练小伙,把 MyBatis 替换成 MyBatis-Plus,上线后哭晕在厕所。。。

    Cause: java.sql.SQLException: Conversion not supported for type java.time.LocalDateTime ; Conversion...替换 Mybatis 似乎就完成了 顺让人有点怀疑 Conversion not supported for type java.time.LocalDateTime 我们再回过头去看看前面说到异常...MyBatis 3.5.0 会处理 LocalDateTime 类型转换(将 java.sql.Timestamp 转换成 java.time.LocalDateTime ) 然而,注意了,然而来了!...,如果有任意一个主文件生成,依赖文件不能生成并抛出异常 这个业务还是比较简单吧 但在附属文件校验优化上,我背上了生产事故 优化前校验 listFileGenerateLog 作用是根据参数查询文件生成记录...生产异常 中午升级之后,稳定运行了一段时间,期间文件正常生成,没出现任何问题 晚上 19 点,有个附属文件生成失败,异常提示:依赖资源[abc_{yyyyMMdd}.txt]生成 当时看到这个异常第一眼

    14910

    公司新来个小伙把 MyBatis 替换成 MyBatis-Plus,上线后被组长怒怼

    替换 Mybatis 似乎就完成了 顺让人有点怀疑 ◆Conversion not supported for type java.time.LocalDateTime 我们再回过头去看看前面说到异常...MyBatis 3.5.0 会处理 LocalDateTime 类型转换(将 java.sql.Timestamp 转换成 java.time.LocalDateTime ) 然而,注意了,然而来了!...5.1.37 开始支持 LocalDateTime 、 LocalDate 和 LocalTime ,前面已经介绍过了,不再过多赘述 总结下异常根因:MyBatis 3.5.1 开始不再处理 LocalDateTime...,如果有任意一个主文件生成,依赖文件不能生成并抛出异常 这个业务还是比较简单吧 但在附属文件校验优化上,我背上了生产事故 ◆优化前校验 listFileGenerateLog 作用是根据参数查询文件生成记录...◆生产异常 中午升级之后,稳定运行了一段时间,期间文件正常生成,没出现任何问题 晚上 19 点,有个附属文件生成失败,异常提示:依赖资源[abc_{yyyyMMdd}.txt]生成 当时看到这个异常第一眼

    19010

    MyBatis拦截器

    StatementHandler:拦截Sql语法构建处理,绝大部分我们是在这里设置我们拦截器。...) 使用拦截器 使用mybatis拦截器,需要实现Interceptor接口三个方法: intercept():当方法被拦截时调用,用于设置拦截后需要执行业务逻辑,自定义拦截器时,此方法是必须实现...获取并设置mybatis配置文件或配置类中property属性值,配置类见上面注册拦截器时演示 mybatis配置文件演示: ...语句 从上面的示例中我们能够发现,是可以在拦截器中获取到sql语句,那么我们就可以通过反射修改sql语句。...将通过id删除数据sql语句改为通过name删除sql语句: 有两种方法: 第一种是通过Statement修改 import org.apache.ibatis.executor.Executor;

    96510

    mybatis-plus实现对创建时间和更新时间自动填充

    : xxx.setCreateTime(new Date()); xxx.setUpdateTime(new Date()); 而mybatis-plus给我们提供一种方式,可以自动帮我们更新这两个字段...,在写业务逻辑时候就不用去关注类似上面这种重复代码,一劳永逸,但是要注意是,必须字段名称一致,就是每张表创建时间都叫create_time ,更新时间叫update_time:好了,话不多说。...Date() 类型,上面 就用new Date(), 如果是LocalDateTime类型,就把new Date() 替换为 LocalDateTIme.now(); 当然我们也可以使用上篇文章中提到...Mybatis拦截器,拦截instert 和 update方法: 配置如下; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method...; import java.sql.Timestamp; import java.time.LocalDateTime; import org.apache.ibatis.binding.MapperMethod.ParamMap

    2.1K20

    分享一个整合SSM框架高并发和商品秒杀项目

    这个报错看起来比较诡异,我仔细检查sql也没有错误,它总提示我end_time要有一个默认值,可我记得我以前就不会这样,然后视频里面也没有执行错误,然后我感觉可能时MySQL版本差异,我查看了下我数据库版本...,需要先运行 set explicit_defaults_for_timestamp = 1,否则会报invalid default value错误 还需要注意SQL版本问题会导致视频中seckill...只要将create_time放在start_time和end_time之前是方便解决方法。 对比下我修改过后跟视频里面的sql片段: ?...--根据seckillId查询SuccessKilled对象,并携带Seckill对象,告诉mybatis把映射结果映射到SuccessKill属性同时映射到Seckill属性--> <select...配置文件mybatis-config.xml <?

    99360

    SpringBoot集成MybatisPlus 涵盖了目前流行知识点!!!即用即cv即可!!!学过同学,也可以存储作为工具!!

    知识点涵盖:代码自动生成、主键自增(雪花算法)、分页、自动填充字段、LocalDateTime 序列化配置、druid数据源配置、SQL监控页面、逻辑删除、事务管理、多环境配置等等。...2、代码中带有很多注解,为方便对MybatisPlus了解不深同学,也能够快速看懂。‍or 3、不行的话一步一步复制,也是可以运行起来,慢慢看更好。...格式化 直接规定LocalDateTime格式。...测试: 跑一下查询全部接口,然后在sql监控页面已经可以看到sql信息啦。点进去的话,能看到详细信息。...今天就到这里啦,明天接着更mybatis-plus结合redis做缓存哈。(使用缓存组件方式) 共勉or

    82510

    公司新来一个干练小伙,把 MyBatis 替换成 MyBatis-Plus,上线后被组长怒怼了...

    替换 Mybatis 似乎就完成了 顺让人有点怀疑 Conversion not supported for type java.time.LocalDateTime 我们再回过头去看看前面说到异常...MyBatis 3.5.0 会处理 LocalDateTime 类型转换(将 java.sql.Timestamp 转换成 java.time.LocalDateTime ) 然而,注意了,然而来了!...5.1.37 开始支持 LocalDateTime 、 LocalDate 和 LocalTime ,前面已经介绍过了,不再过多赘述 总结下异常根因:MyBatis 3.5.1 开始不再处理 LocalDateTime...,如果有任意一个主文件生成,依赖文件不能生成并抛出异常 这个业务还是比较简单吧 但在附属文件校验优化上,我背上了生产事故 优化前校验 listFileGenerateLog 作用是根据参数查询文件生成记录...生产异常 中午升级之后,稳定运行了一段时间,期间文件正常生成,没出现任何问题 晚上 19 点,有个附属文件生成失败,异常提示:依赖资源[abc_{yyyyMMdd}.txt]生成 当时看到这个异常第一眼

    14410

    【JavaEE进阶】MyBatis创建及使用

    MyBatis简介 MyBatis是一种开源持久层框架,它可以与Java程序一起使用,用于简化数据库操作。MyBatis提供了一个简单且灵活方式来将Java对象映射到关系型数据库中数据表。...MyBatis主要目标是通过将SQL查询与Java代码解耦来简化数据库访问,并提供了丰富映射功能和灵活查询选项。...总之,MyBatis是一个轻量级且功能强大持久层框架,适用于需要灵活控制SQL和数据库访问Java应用程序。它提供了一种简单且可定制方式来进行数据库操作,使开发人员能够更容易地与数据库交互。...通过这个映射文件,可以让MyBatis框架自动生成相应SQL查询代码,方便在 Java 程序中调用和使用。...创建映射文件:MyBatis使用XML文件来定义数据库操作语句和映射关系。创建一个映射文件,它包含了数据库查询、插入、更新和删除等操作语句,以及将结果映射到 Java对象规则。

    23720

    MyBatis-Plus使用详解

    mp会在mybatis启动时,自动解析实体类和表映射关系,并注入带有通用CRUD方法mapper。...logic-not-delete-value: 0 # 逻辑删除值(默认为0) # 若逻辑已删除和删除值和默认值一样,则可以不配置这2项 测试代码 package com.example.mp...语句,会自动在WHERE后面拼接逻辑删除条件。...通常来说,对于多个表,我们也会统一逻辑删除字段名称,统一逻辑已删除和删除值,所以全局配置即可。...直接使用实体类中属性进行条件构造,比普通条件构造器更加优雅 若mp提供方法不够用,可以通过 自定义SQL(原生mybatis形式进行扩展开发 使用mp进行分页查询时,需要创建一个分页拦截器

    1.6K20

    MyBatis持久层框架深入解析与实践

    前言MyBatis是一个流行Java持久层框架,它简化了数据库操作,支持SQL定制化、存储过程和高级映射。本文将深入探讨MyBatis工作原理,并通过实例演示如何配置和使用MyBatis。...MyBatis通过XML或注解配置,将Java对象映射到数据库记录。...3)); }}我们采用常见XML格式来进行配置MyBatis相关属性以及编写SQL语句。...如果缓存命中,它会直接返回缓存中数据;如果命中,则会执行 SQL 查询。执行完 SQL 后,会将结果再次存入缓存中。让我们来查看源码确认这个流程是否如此实现。...配置文件mybatis-config.xml和SQL映射文件UserMapper.xml详细说明,展示了如何配置数据源、事务管理和SQL语句,以及如何将Java对象映射到数据库记录。

    20731

    『互联网架构』软件架构-mybatis体系结构(16)

    四种对比 分类| 优点| 缺点 | :-: | :-: jdbc| 简单、纯粹| 1、需要手动关闭链接 2、结果集不能自动谢 jdbcTemplate| 简单、纯粹、自动会话管理、结果集谢| 1、...数据库更换成本低、较完善二级缓存、自动防SQL注入|完全掌握门槛高、性能优化较麻烦、复杂myBatis|学习成本低、可以进行更为细致SQL优化,减少查询字段、统一SQL管理|功能相对简陋、...需要手动编写维护SQL、表结构变更之后需要手动维护SQL谢(尽可能多关联查询什么,都写在业务代码里面,这样可以良好完成分布式) mybatis定位 myBatis 专注于sql 本身,其为sql...谢而非完整ORM,需要自己编写sql 语句,这是其优点也是缺点。..."base_colume"/> resultMap resultMap 是myBatis 对象谢 动态SQL配置 标签 trim (where, set) 标签 foreach 标签 PS

    1.7K21

    MyBatis-plus 从入门到入土

    下面列举部分配置项 基本配置 configLocation:若有单独mybatis配置,用这个注解指定mybatis配置文件(mybatis全局配置文件) mapperLocations:mybatis...: 0 # 逻辑删除值(默认为0) # 若逻辑已删除和删除值和默认值一样,则可以不配置这2项 测试代码 package com.example.mp; import com.example.mp.mappers.User2Mapper...可以看到,发出SQL语句,会自动在WHERE后面拼接逻辑删除条件。查询出来结果中,没有了id为6王软蛋。...前面在application.yml中做配置,是全局。通常来说,对于多个表,我们也会统一逻辑删除字段名称,统一逻辑已删除和删除值,所以全局配置即可。...注意新旧版本中,新版类,名称带有Inner, 旧版不带, 不要配错了 **/ /* @Bean public OptimisticLockerInterceptor opLocker

    1.6K20

    Java开发中如何自动填充SQL语句中公共字段

    2.1 开发 Mybatis 审计插件 如果你使用了原生Mybatis可以编写一个审计插件来实现这些功能。我在之前讲解过Mybatis插件教程,并不是非常难事。...,LocalDateTime.now());     } } 然后我们扩展一下Mybatis PlusModel把公共审计字段放进去并声明对应填充策略: public abstract class...总结 今天我们 SQL 审计中一些公共字段自动填充常用方案进行了一些介绍,特别对Mybatis Plus提供功能进行了介绍相信能够帮助你简化一些样板代码编写。...但是 SQL 审计并不仅仅这么简单,根据你业务不同会有不同设计。...如果设计更加精细化的话,会通过镜像或探针方式采集所有数据库访问流量,并基于 SQL 语法、语义解析技术,记录下数据库所有访问和操作行为。有空可以从网上获取相关资料进行了解。今天就到这里。

    2K10
    领券