解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

yizhihongxing

下面我来详细讲解“解决mybatis-plus使用jdk8的LocalDateTime查询时报错的方法”的完整攻略。

问题描述

在使用mybatis-plus时,如果使用了jdk8的LocalDateTime类型进行查询操作,可能会出现以下的错误:

There is no TypeHandler found for property xxxx

这是由于mybatis-plus没有自带LocalDateTime类型的类型处理器,而导致无法解析该属性的错误。下面,我会提供两种解决方法来解决这个问题。

解决方法一:添加自定义类型处理器

第一种解决方法是添加自定义类型处理器来解决该问题。在mybatis-plus中,我们可以自定义一些类型处理器来解析自己需要的类型。具体操作步骤如下:

  1. 自定义类型处理器类

我们可以编写一个自定义的LocalDateTimeHandler类来处理LocalDateTime类型。

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.parsers.JsqlParserCountOptimize;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
import org.apache.ibatis.session.Configuration;

import java.sql.PreparedStatement;
import java.sql.Statement;
import java.time.LocalDateTime;

public class LocalDateTimeHandler extends BaseTypeHandler<LocalDateTime> {

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

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String value = rs.getString(columnName);
        return StringUtils.isBlank(value) ? null : LocalDateTime.parse(value);
    }

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String value = rs.getString(columnIndex);
        return StringUtils.isBlank(value) ? null : LocalDateTime.parse(value);
    }

    @Override
    public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String value = cs.getString(columnIndex);
        return StringUtils.isBlank(value) ? null : LocalDateTime.parse(value);
    }

}
  1. 注册自定义类型处理器

接下来,我们需要在mybatis的配置文件中注册该类型处理器。可以在mybatis-config.xml文件中添加以下的配置:

<configuration>
  <typeHandlers>
    <typeHandler javaType="java.time.LocalDateTime" handler="com.example.LocalDateTimeHandler"/>
  </typeHandlers>
</configuration>

其中,javaType指定要处理的类型,handler指定处理该类型的自定义处理器类。

  1. 配置SqlSessionFactory

最后,在配置SqlSessionFactory时,需要在其构造函数中指定mybatis的配置文件,这样便可以生效了。

@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    sessionFactory.setTypeAliasesPackage("com.example.dto");

    // 添加Mybatis插件
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

    // 设置Mybatis配置文件
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    sessionFactory.setConfigLocation(resolver.getResource("classpath:mybatis-config.xml"));

    sessionFactory.setPlugins(new Interceptor[]{interceptor});

    return sessionFactory.getObject();
}

这样,我们就成功添加了自定义类型处理器,可以解决该问题。

解决方法二:使用Java8DateTypeHandler

第二种解决方法是使用mybatis-plus提供的Java8DateTypeHandler类进行解决。需要添加以下依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.2</version>
</dependency>

添加完成后,只需要在mybatis的配置文件中添加以下的配置:

<configuration>
  <typeHandlers>
    <typeHandler handler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
    <typeHandler handler="com.baomidou.mybatisplus.extension.handlers.MybatisDefaultParameterHandler"/>
    <!-- 对应jdk8+ 的时间类 -->
    <typeHandler handler="com.baomidou.mybatisplus.extension.handlers.Java8DateTypeHandler"/>
  </typeHandlers>
</configuration>

在配置SqlSessionFactory时,同样需要指定mybatis的配置文件。这个方法比方法一简单,但需要添加额外的依赖。

总结

以上就是解决mybatis-plus使用jdk8的LocalDateTime查询时报错的方法的完整攻略,包括了自定义类型处理器和使用Java8DateTypeHandler两种方法,并提供了相应的示例代码。通过以上方法,我们可以有效解决上述的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 正则表达式入门详解(基础进阶)

    Java 正则表达式入门详解(基础进阶) 什么是正则表达式? 正则表达式是一种用来匹配字符串的模式,通常用来检索、替换那些符合某个规则的文本。在Java中,正则表达式是通过java.util.regex包来实现的。 正则表达式的基本语法 在Java中,正则表达式的基本语法有以下几种: 字符: 表示匹配某个字符,例如匹配单个字符a,使用正则表达式a即可。 字符…

    Java 2023年5月23日
    00
  • bootstrap table 多选框分页保留示例代码

    如果想要在bootstrap table中加入多选框并且保留在分页时的选定状态,可以按照以下步骤进行操作: 首先要在table的html代码中加入一个input元素作为多选框,示例代码如下: “` 姓名 性别 年龄 城市 张三 男 28 北京 李四 女 25 上海 王五 男 30 广州 “` 其中,第一个th元素中的input元素作为全选多选框,后面的每…

    Java 2023年6月16日
    00
  • SpringMVC响应处理详细解读

    SpringMVC响应处理详细解读 概述 SpringMVC是一个非常流行的MVC框架,它的出现极大地简化了Java Web应用的开发过程。其中,响应处理是SpringMVC的核心功能之一。本文将详细解读SpringMVC中响应处理的过程。 响应处理的流程 SpringMVC的响应处理过程分为以下几个阶段: Controller方法的返回值处理 视图成功渲染…

    Java 2023年5月16日
    00
  • 使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    使用IDEA搭建SSM框架的详细教程 简介 SSM框架是目前Java Web开发中最常用的框架之一,它由Spring、SpringMVC和MyBatis三个框架组成,可以很好地解决Java Web开发中的各种问题。本文将详细介绍如何使用IDEA搭建SSM框架,并提供两个示例说明。 环境准备 在开始之前,需要确保以下环境已经准备好: JDK 1.8以上版本 M…

    Java 2023年5月18日
    00
  • java运行时数据区域和类结构详解

    关于“java运行时数据区域和类结构详解”的攻略,下面是详细讲解: Java运行时数据区域 Java虚拟机在执行Java程序时,会将它所管理的内存划分成不同的数据区域,分别用于存储不同类型的数据。主要分为以下几个部分: 程序计数器 程序计数器是一块较小的内存空间,它的作用是记录当前线程执行的字节码的位置。程序计数器一般不会出现OutOfMemoryError…

    Java 2023年5月26日
    00
  • 详解使用IntelliJ IDEA新建Java Web后端resfulAPI模板

    下面我会为您详细讲解如何使用IntelliJ IDEA新建Java Web后端restful API模板。 步骤一:新建Maven项目 以IntelliJ IDEA 2021.1版本为例,首先我们需要新建一个Maven项目。 打开IntelliJ IDEA,点击“Create New Project”。 选择Maven并点击“Next”。 输入GroupId…

    Java 2023年5月19日
    00
  • bootstrap——bootstrapTable实现隐藏列的示例

    当你需要在Bootstrap Table中隐藏列时,可以通过以下步骤实现: 第一步:下载Bootstrap Table 首先,需要从Bootstrap Table官网下载Bootstrap Table插件。 官网链接:https://bootstrap-table.com/ 第二步:编写HTML代码 在编写HTML代码之前,需要加载Bootstrap样式表和…

    Java 2023年6月15日
    00
  • Quarkus中的依赖注入DI和面向切面aop编程

    Quarkus是一个Java框架,它旨在提供快速启动和低内存消耗的微服务。而依赖注入(DI)和面向切面编程(AOP)是Quarkus的两个重要特性。 什么是依赖注入? 依赖注入是Quarkus中最基本的概念之一。它的目的是使应用程序具有可扩展性并降低组件之间的耦合度。 根据Quarkus文档的描述,依赖注入是将实例变量传递给类的技术。在Quarkus中,我们…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部