Mybatis-Plus时间范围查询

2023-10-27

方式一

通过apply方法,来实现时间范围查询,该方法可用于数据库函数,动态入参的params对应前面applySql内部的{index}部分,这样是不会有sql注入风险的,反之会有!

apply(String applySql, Object... params)
apply(boolean condition, String applySql, Object... params)

参数:

  • condition可以作为条件,假如为true才会拼接该sql
  • applySql作为拼接的sql,可以使用{0}的方式作为参数占位符
  • params参数,可以有多个

使用反例(会有sql注入的风险):

queryWrapper.apply(StrUtil.isNotBlank(serviceItemListDto.getStartTime()),
        "date_format (create_time,'%Y-%m-%d') >= date_format('" + serviceItemListDto.getEndTime() + "','%Y-%m-%d')")
        .apply(StrUtil.isNotBlank(serviceItemListDto.getEndTime()),
        "date_format (create_time,'%Y-%m-%d') <= date_format('" + serviceItemListDto.getEndTime() + "','%Y-%m-%d')");

使用正例:

queryWrapper.apply(serviceItemListDto.getStartTime() != null,
        "date_format (create_time,'%Y-%m-%d') >= date_format ({0},'%Y-%m-%d')", serviceItemListDto.getStartTime())
        .apply(serviceItemListDto.getEndTime() != null,
                "date_format (create_time,'%Y-%m-%d') <= date_format ({0},'%Y-%m-%d')", serviceItemListDto.getEndTime());
;

方式二

除了使用apply还可以使用ge(大于等于 >=)和le(小于等于 <=)

LambdaQueryWrapper<ObsConsultationRequest> qw = new LambdaQueryWrapper<>();
        Optional.ofNullable(request.getStartRequestDatetime()).ifPresent(
                date -> qw.ge(ObsConsultationRequest::getRequestDatetime, date));
        Optional.ofNullable(request.getEndRequestDatetime()).ifPresent(
                date -> qw.le(ObsConsultationRequest::getRequestDatetime, date));

请求方式

Get请求params传参或者Post请求json传参都是可以的

@ApiModelProperty(value = "开始时间")
private String startTime;

@ApiModelProperty(value = "结束时间 ")
private String endTime;

在这里插入图片描述

传参类型

可以选择使用String来接参数,也可以使用Date来接参数!Date类型接参数就要和前端固定传参格式,比如前端传的yyyy-MM-dd HH:mm:ss,假如是get的param传参,就需要使用@DateTimeFormat格式化,不使用@DateTimeFormat然后使用Date类型接参数会报错!假如使用的json传参就需要用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8"),不然同样会异常!

@DateTimeFormatimport org.springframework.format.annotation.DateTimeFormat;spring自带的,不需要引入别的依赖
@JsonFormatcom.fasterxml.jackson.annotation包下,也不需要引入别的依赖

关于这两个注解不太了解的建议看一下这篇文章:
https://blog.csdn.net/weixin_43888891/article/details/126846791

正确传参:

{
  "endTime": "2022-09-15 20:00:00",
  "startTime": "2022-09-15 00:00:00"
}
public class ServiceItemListDto implements Serializable {

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;

    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
}

如果按照年月日查询,而数据库当中存储的又有时分秒,这时候需要格式化一下数据库存储的日期,所以得用第一种方式!精确到时分秒的条件查询,可以使用第二种方式!第二种不需要手写sql呢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis-Plus时间范围查询 的相关文章

随机推荐

  • 反序列化漏洞攻击原理(Dubbo反序列化漏洞剖析)

    关联文章 给服务端发送自定义类实例序列化数据实现反序列化攻击 一 前言 最近大家都在讨论Dubbo反序列化漏洞问题 想必各个大V也都推送了相关文章 看了下各大文章差不多都是一个套路 两个步骤 第一步开始描述下Dubbo的反序列化漏洞 几乎都
  • UCOSII里面为什么调用OS_ENTER_CRITICAL()或OS_EXIT_CRITICAL()会出错,出错信息为:undeclared identifier `cpu_sr‘

    可以观察到OSTickISR Init 函数内部调用了OS ENTER CRITICAL 和OS EXIT CRITICAL 并且 1 该OSTickISR Init 函数所在的 C文件包含了includes h文件 include inc
  • .NET Core代码保护!.NET Reactor这些保护机制你不得不知道!

    NET Reactor是一个功能强大的代码保护和软件许可系统 适用于为 NET Framework编写的软件 并支持生成 NET程序集的所有语言 NET Reactor迎来了久违的版本更新 进入v6 3 0 0全新时代 支持Blazor保护
  • Open3D 计算点云凸包的体积和表面积

    目录 一 实现依据 二 代码实现 三 结果展示 四 相关链接 一 实现依据 点云的凸包是包含所有点的最小凸集 open3d实现了计算凸包的方法 compute convex hull 这个接口的实现基于Qhull 更多详细内容见 Open3
  • Java代码转C++代码的几点小经验

    文章目录 前情提要 Idea 如何反编译一个Jar包 技术点分享 instanceof 的翻译 基础库的翻译 算法实现 区别 传参的区别 到处乱传的内存管理问题 数据初始化 类型转换 因为工作需求 需要 将 Jar包 中的代码转换成 C 代
  • SQL索引详解

    一 什么是索引 索引是一种单独的 物理的对数据库表中一列或多列的值进行排序的特殊数据库结构 它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单 索引的作用相当于图书的目录 可以根据目录中的页码快速找到需要的
  • 【Python基础】Python包管理:PyPI、setuptools与wheel

    摘要 本文将介绍Python包管理的基本概念 重点讨论PyPI setuptools和wheel这三个重要的工具 通过深入分析它们的原理和使用方法 我们将向您展示如何创建 发布和安装Python包 本文还将通过实际代码示例来演示如何应用这些
  • 使用Hexo+github搭建个人博客

    1 前言 1 1 搭建个人博客的两种方法 1 使用模板 Hexo 搭建博客页面 在本地写博客 上传到github服务器 由github pages渲染生成前端页面 2 手动编写前后端分离的博客系统 SpringBoot Vue 部署到云服务
  • Ubuntu下安装net-snmp步骤

    NET SNMP的官方网站是 http www net snmp org Ubuntu下安装net snmp 具体步骤如下 1 获取net snmp的安装包 这里我们选择源代码的安装方式 当然你也可以选择ub
  • python:常用类型转换

    int x 将x转换为整数 float x 将x转换为浮点数 complex x 将x转换为复数 实部为x 虚部为0 conplex x y 将x y转换为复数 实部为x 虚部为y str x 将x转换为字符串 chr x 将整数转换为一个
  • Linux下修改MySQL密码(只需5步)

    针对忘记root密码方式 1 编辑 etc my cnf文件 vi etc my cnf 2 在 mysqld 下面添加一条命令 skip grant tables 3 输入 wq 保存修改并退出 4 开始修改root密码 4 1 进入My
  • 位、字、字节的区别

    1 位和字节的关系 位 bit 比特 字节 Byte 拜特 1 Byte 8 bit 计算机内存中 最小的存储单位是 位 bit 8个 位 构成一个 字节 byte 字节是内存的基本单位 也是编址单位 例 某计算机的内存是2GB 指的就是该
  • node实现静态文件服务器,nodejs静态资源服务器

    nodejs静态资源服务器 1 http 是nodejs的服务模块 2 url 是url路由模块 3 fs 是文件服务器模块 1 nodejs服务器的创建 主机IP const ip 192 168 1 105 端口号 const port
  • 使用Jsoup登录网站抓取网页内容

    Jsoup可以很方便的模拟浏览器登录 然后根据登录获得sessionid继续做请求来抓取网页的内容 登录的示例代码如下 Connection Response res Jsoup connect http www example com l
  • Java搭积木游戏

    题目 小明最近喜欢搭数字积木 一共有10块积木 每个积木上有一个数字 0 9 搭积木规则 每个积木放到其它两个积木的上面 并且一定比下面的两个积木数字小 最后搭成4层的金字塔形 必须用完所有的积木 下面是两种合格的搭法 0 0 1 2 3
  • 将vue项目上传到gitee(使用cmd)

    本文档适用于 要上传的vue项目是没有上传过gitee的 最下面有无解释版 但是最好看一遍有解释的 1 在gitee新建一个仓库 创建后有一个这个页面 不要关掉 特别有用 2 在下载gitee的地址打开cmd 新建仓库全局设置 这里我下在了
  • 【代码】python Flask实现程序运行结果展示在网页

    目录 1 代码 2 结果 1 代码 from flask import Flask request jsonify import json app Flask name app route img recog methods GET POS
  • java 容易犯错_java面试题最容易犯错

    1 static 和 final 的用法 static 的作用从三个方面来谈 分别是静态变量 静态方法 静态类 静态变量 声明为 static 的静态变量实质上就是全局变量 当声明一个对象时 并不产生static 变量的拷贝 而是该类所有实
  • 一文读懂HTML和CSS的关系

    Web开发是一个很依赖经验的领域 然而这对初学者很不友好 知识一旦脱离了应用场景就会变得晦涩 空洞 且知识本身也满足 二八定律 抓大放小 是提高学习效率的关键 下文向大家介绍了HTML和CSS之间的关系 内容选自 HTML 5与CSS 3核
  • Mybatis-Plus时间范围查询

    方式一 通过apply方法 来实现时间范围查询 该方法可用于数据库函数 动态入参的params对应前面applySql内部的 index 部分 这样是不会有sql注入风险的 反之会有 apply String applySql Object