基于mybatis-plus 时间字段比较

mybatis-plus 时间字段比较

mybatis-plus 时间字段比较,默认lt/gt/ge时间比较时无效:

解决:

LambdaQueryWrapper<?> queryWrapper = Wrappers.<ConstantsRetention>query().lambda();
String strEnd= DateFormatUtils.format(dto.getEndTime(),"yyyy-MM-dd HH:mm:ss");
String start = DateFormatUtils.format(dto.getStartTime(),"yyyy-MM-dd HH:mm:ss");
queryWrapper.apply("UNIX_TIMESTAMP(tabulation_time) >= UNIX_TIMESTAMP('" + start + "')");
queryWrapper.apply("UNIX_TIMESTAMP(tabulation_time) < UNIX_TIMESTAMP('" + strEnd + "')");

mybatis-plus 时间大于小于问题

错误描述

org.springframework.jdbc.BadSqlGrammarException:
### Error querying database.  Cause: org.postgresql.util.PSQLException: FEHLER: Operator existiert nicht: timestamp without time zone > character varying
  建议:Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
  位置:59
### The error may exist in boxin/zdxb/mapper/CheckinQuestionMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT  *  FROM t_checkin_question     WHERE (create_time > ?)
### Cause: org.postgresql.util.PSQLException: FEHLER: Operator existiert nicht: timestamp without time zone > character varying
  建议:Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
  位置:59
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: FEHLER: Operator existiert nicht: timestamp without time zone > character varying
  建议:Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
  位置:59
        at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) ~[spring-jdbc-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) ~[mybatis-spring-2.0.3.jar!/:2.0.3]
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) ~[mybatis-spring-2.0.3.jar!/:2.0.3]
        at com.sun.proxy.$Proxy85.selectOne(Unknown Source) ~[na:na]
        at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:159) ~[mybatis-spring-2.0.3.jar!/:2.0.3]
        at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:108) ~[mybatis-plus-core-3.3.0.jar!/:3.3.0]
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96) ~[mybatis-plus-core-3.3.0.jar!/:3.3.0]
        at com.sun.proxy.$Proxy112.selectOne(Unknown Source) ~[na:na]
        at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:267) ~[mybatis-plus-extension-3.3.0.jar!/:3.3.0]
        at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:191) ~[mybatis-plus-extension-3.3.0.jar!/:3.3.0]

错误代码

return getOne(new QueryWrapper<CheckinQuestion>().gt("create_time", DateUtil.today())));

问题分析

时间比较时,必须传入 JDK 的 Date 类型,不支持字符串。

注:本项目中使用了 Hutool 的 DateUtil 工具类。

正确代码

return getOne(new QueryWrapper<CheckinQuestion>().gt("create_time", DateUtil.parse(DateUtil.today()).toJdkDate()));

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis-plus的自动填充时间的问题(添加到数据库的时间比当前时间多4个小时)

    当前时间  sql语句  添加到数据库的时间 先把打印的sql语句放到数据库里面去执行 发现添加的时间是对的 不断找 2个小时终于发现问题所在了 连接数据库时时区要写对 我之前写的  useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC 纠正后   autoReconnect=true&useUnicode=true&characterEncoding=utf8&serv

  • mybatis-plus 通用字段自动化(如逻辑删除和更新时间等)

    一般来说某些项目比较规范的情况下,大多数表都会有逻辑删除字段和通用字段,例如更新时间,创建时间,更新人,创建人等等,但是在代码开发上会产生很多冗余的代码,逻辑删除的话,自己写比较繁琐,而且容易有遗漏逻辑. 本来打算自己写切面去实现,偶然发现mybatis-plus已经帮封装实现了,试了一下,很好用,所以分享一下. 逻辑删除 逻辑删除的意思就是某些业务表,在用户删除某条数据的时候,不真正删除,而是将此数据某字段改成类似"已删除",而查询语句.更新语句等会忽略此条被逻辑删除的数据. 这里就

  • 关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

    字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" 问题描述: 当字段策略为 0 "忽略判断" 的时候,如果实体和数据库有字段是需要自动更新的,例如update_time,更新某条记录的时候自动刷新update_time,理论上我们在业务控制的时候是不需要设置update_time的,利用数据库特性就好,但是在该字段策略下,业务逻辑要更新字段(没有主动设置 update_time),这时候因为忽略判断,

  • 详解Mybatis-plus中更新date类型数据遇到的坑

    最近一年的项目都是在使用Mybatis-plus,感觉挺好用的,也没遇到很多问题,但是在最近项目上线之后,遇到了一些新的需要,在进行新版本开发的时候就开始遇到坑了,今天来说一下更新数据中有date类型数据的时候会出现的问题. 实体类部分字段如下: @Data @Builder @NoArgsConstructor @AllArgsConstructor public class ProductPo implements Serializable { /** * 产品主键,自增 */ privat

  • 基于mybatis-plus 时间字段比较

    mybatis-plus 时间字段比较 mybatis-plus 时间字段比较,默认lt/gt/ge时间比较时无效: 解决: LambdaQueryWrapper<?> queryWrapper = Wrappers.<ConstantsRetention>query().lambda(); String strEnd= DateFormatUtils.format(dto.getEndTime(),"yyyy-MM-dd HH:mm:ss"); String

  • 基于mybatis高级映射多对多查询的实现

    1.同以前一样,首先给一个使用多对多的需求, 要查询用户以及用户所购买的商品信息,经过分析用户和商品数据库级别没有任何关系,用户和商品需要建立关系,要通过订单,订单明细建立关系.根据这个需求,可以分析出需要查询的主表为: 查询主表:用户表 查询关联表:由于商品和用户没有关系,通过订单和订单明细进行关联,所以得出关联表是:orders订单表,orderDetail订单明细表,items商品表.这样的话,sql该如何去写?这样写: select orders.*, t_user.id user_id

  • SpringBoot Mybatis Plus公共字段自动填充功能

    一.应用场景 平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个字段有没有传进去,很麻烦.mybatisPlus有一个很好的解决方案.也就是公共字段自动填充的功能.一般满足下面条件的字段就可以使用此功能: 这个字段是大部分表都会有的. 这个字段的值是固定的,或则字段值是可以在后台动态获取的. 常用的就是last_update_time,last_update_name这两个字段. 二.配置MybatisPlus 导包:

  • 基于MyBatis XML配置方法(全面了解)

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息. 文档的顶层结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSourc

  • 基于Mybatis plus 自动代码生成器的实现代码

    1.使用的是maven项目,添加依赖 <!-- mybatis-plus begin --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.2.0</version> </dependency> 还有数据库的连接 <dependency> <

  • 基于Mybatis Plus实现多表分页查询的示例代码

    注意:Mybatis Plus 3.0.7 版本才开始用[自定义sql]+[QueryWrapper],低版本不能使用,还是老实写SQL进行条件拼接 1.源码分析 在Wrapper<T>接口中就有如下方法 /** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法:自定义sql + ${ew.customSqlSegment} * 1.逻辑删除需要自己拼接条件 (之前自定义也同样) * 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) * 3.用法 ${e

  • Mybatis plus通用字段自动填充的示例

    在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改时间.修改人.创建人等信息.通常情况下我们需要对这些字段进行手动赋值.赋值的过程也比较冗余,都是重复操作. 通常是为create_time赋值为系统的当前时间.update_time赋值为系统修改操作执行时的当前时间. create_by(创建人).update_by(修改人)赋值为当前的登录用户的

  • MyBatis按时间排序方式

    目录 MyBatis按时间排序 测试代码 排序代码 MyBatis时间排序问题 时间排序代码为 解决方法 MyBatis按时间排序 测试代码 ActivityReadExample readExample = new ActivityReadExample();             readExample.setOrderByClause("create_time desc");             ActivityReadExample.Criteria criteria1

  • 基于Mybatis映射的一点心得(分享)

    以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射. 两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点. 建表语句: CREATE TABLE `bloc` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_bin default NULL, `company_id` int(11) default NULL,

  • 基于MyBatis的数据持久化框架的使用详解

    目录 一.MyBatis是什么 1.1.概述 1.2.什么是持久化 1.3.什么是ORM 1.4.MyBatis主要内容 1.5.优点 1.6.缺点 二.MyBatis架构 2.1.mybatis所依赖的jar包 2.2.MyBatis准备工作 三.MyBatis 核心对象 一.MyBatis是什么 1.1.概述 Mybatis是一个优秀的开源.轻量级持久层框架,它对JDBC操作数据库的过程进行封装,简化了加载驱动.创建连接.创建 statement 等繁杂的过程,使开发者只需要关注sql本身.

随机推荐