jpa|springboot|informix自定义SQL,条件判断

2023-10-30

jpa连mysql没什么说的,但是jpa连informix真的坑到家了。各种函数不支持。
需求:在自定义sql的时候,需要判断参数是否为空,如果参数为空则不参与sql条件判断。
就这么简单的一个需求,如果是jpa连mysql,那就用几个if判断就完事了,但是,informix不行。要用case when then else end。目前我只找到这个方法,后续有其他方法再更新,也欢迎大家提供其他方式。下面给出一个示例

jpa连mysql时:

@Query(value = "SELECT\n" +
            "name, \n" +
            "home \n" +
            "FROM\n" +
            "USER \n" +
            "WHERE\n" +
            " 1 = 1 \n" +
            "and IF(:#{#req.name} is not null and :#{#req.name} != '',name = :#{#req.name},1=1)\n"+
            "and IF(:#{#req.home} is not null and :#{#req.home} != '',home = :#{#req.home},1=1)\n", countProjection = "id", nativeQuery = true)
    Page<Map<String, Object>> listByPage(@Param("req") UserQueryRequest request, Pageable pageable);

jpa连informix时:

@Query(value = "SELECT\n" +
            "name, \n" +
            "home \n" +
            "FROM\n" +
            "USER \n" +
            "WHERE\n" +
            " 1 = 1 \n" +
            " and (case when :#{#req.name} is not null and :#{#req.name} != '' then name else '1' end) = \n"+
            " (case when :#{#req.name} is not null and :#{#req.name} != '' then :#{#req.name} else '1' end) \n"+
            " and (case when :#{#req.home} is not null and :#{#req.home} != '' then home else '1' end) = \n"+
            " (case when :#{#req.home} is not null and :#{#req.home} != '' then :#{#req.home} else '1' end) \n"+
            " and (case when :#{#req.createTime} is not null then to_char(create_time,'%Y-%m-%d') else '1' end) = \n"+
            " (case when :#{#req.createTime} is not null then to_char(:#{#req.createTime},'%Y-%m-%d') else '1' end) \n",
            countProjection = "id", nativeQuery = true)
    Page<Map<String, Object>> listByPage(@Param("req") UserQueryRequest request, Pageable pageable);

注意很多细节:
1.informix里面case when (断言) then (列|值) else (列|值) end
我是用两组case when来组合判断的(这是我想到的办法,欢迎大家提供其他办法)
2.很多时候需要把case when 里面的(列|值)转成字符串比较才行,不然要报错,比如我这里是’1’ = ‘1’。如果直接是1=1会报错。
3.在时间比较的时候需要将(列|值)都转成字符串比较,不然会报错。比如我这里用到的是:to_char(create_time,‘%Y-%m-%d’) = to_char(:#{#req.createTime},‘%Y-%m-%d’)
4.在自定义sql的时候注意空格

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

jpa|springboot|informix自定义SQL,条件判断 的相关文章

随机推荐

  • SpringBoot全局异常处理

    需求 程序运行中可能出现各种错误 如果不对错误进行处理 那么客户端的体验会非常不好 但如果在业务代码中进行了太多的错误处理 造成代码臃肿 后期维护困难 因此 有必要进行全局的异常捕获 统一处理异常状况 工具类 HTTP状态码工具类 pack
  • react 井字棋 函数式写法

    用react写一个井字棋 看了官网的文档 自己写一个函数式的写法 比较简陋和粗糙 如有错误请在评论区指出 整体样式结构 样式代码就不放了 html return
  • pytorch实战(五)——时间序列多步预测的五种方法介绍

    当需要根据已有的时间序列数据 预测未来多个时刻的状态时 被称之为时间序列多步预测 时间序列多步预测有五种策略 分别为 1 直接多步预测 Direct Multi step Forecast 2 递归多步预测 Recursive Multi
  • Centos7部署kubernetes单机集群(K8S)

    Kubernetes 单机版部署还是比较简单的 下面开始操作吧 查看内核版本 cat etc redhat release 关闭selinux setenforce 0 sed i s SELINUX enforcing SELINUX d
  • [Java版]selenium关键字驱动框架设计实战

    引言 使用和学习selenium好长一段时间了 PO设计模式已经算是耳熟能详了 包含PageFactory 它是PO设计模式的延伸 也了解了BDD行为驱动框架 在关键字驱动框架设计方面 由于对java基础技术的理解难度 没有花时间去整理 故
  • Windows系统改装成Linux系统

    说下背景 上级领导要求的将一台windows系统的电脑改装成Linux系统的电脑 弄了一天半的时间终于弄好了 下面时操作过程以及自己遇到的一些坑 一 制作一个启动盘 使用一个大于8G的U盘制作启动盘 因为centos的镜像一般是4G左右 我
  • 交货单BAPI_OUTB_DELIVERY_CHANGE附加增强字段

    需求 通过BAPI OUTB DELIVERY CHANGE 更新交货单增强字段 我们发现bapi中含有参数EXTENSION2 通过在函数中寻找 找到对应位置SMOD V50B0001 se19创建实施 将对应参数传入标准程序内存中 对应
  • Unity:在Android平台发布

    1 文件 生成设置 平台 Android 单击切换平台 添加已打开场景 2 编辑 首选项 外部工具 直接全部勾选 3 文件 生成设置 玩家设置 公司名称 产品名称必填 默认图标为生成的app的图标 若使用EasyAR 需注意包名需要与Eas
  • 【SpringMVC】轻量级Web之MVC架构框架

    一 SpringMVC简介 一 SpringMVC学习目标 二 SpringMVC概述 三 SpringMVC快速入门 四 启动服务器初始化过程 五 Controller加载控制与业务bean加载控制 六 简化Servlet容器开发 二 设
  • 关于bash数组的几道面试笔试题—航班延误5h的郁闷都在此文

    数组作为最常使用和最基本的数据结构存在于各种编程语言中 但各语言里数组的定义 使用以及对应的属性方法各不相同 本文将从面试的角度出发 带领大家一同走近那个最熟悉又陌生的Bash Array re 1 如何定义一个包含多种数据类型元素的数组
  • URL地址的两种格式

    1 传统格式 格式 scheme host port path query fragment scheme 协议 例如http https ftp等 必写 host 域名或IP地址 必写 port 端口号 http 默认端口为 80 可以省
  • React中使用百度地图

    1 找到百度地图首页 进入百度地图开放平台 地址如下 百度地图开放平台 百度地图API SDK 地图开发 2 找到开发文档中react BMapGL 如上图所示 我们进入React BMapGL JSAPI 地址如下 React BMapG
  • 超详细 Ubuntu安装PyTorch步骤

    目录 STEP1 进入PyTorch官网查看安装版本和指令 STEP2 为PyTorch单独创建conda环境 STEP3 进入STEP2中创建的conda环境 STEP4 输入STEP1中的安装指令安装PyTorch STEP5 安装Ju
  • CSS层叠上下文、层叠等级、层叠顺序、z-index

    一个 片面 的理解 以往 由于自己使用z index的频率不大 所以对这个CSS属性存在比较片面的认识 一直认为z index就是用来描述定义一个元素在屏幕Z轴上的堆叠顺序 z index值越大在Z轴上就越靠上 也就是离屏幕观察者越近 最后
  • yarn、pnpm 的常用命令

    yarn 下载 npm i yarn g 查看版本 yarn version yarn v 初始化 package json yarn init yarn init y 下载包 yarn add axios 默认生产环境 yarn add
  • 【100%通过率 】【华为OD机试c++/java/python】MVP争夺战【 2022 Q4 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更
  • 1148.最大值

    include
  • Leetcode 刷题笔记(五) —— 链表篇之链表的基础操作和经典题目

    文章目录 系列文章目录 1 链表基本操作 707 设计链表 2 双指针迭代法 203 移除链表元素 206 反转链表 24 两两交换链表中的节点 3 双指针之快慢指针 19 删除链表的倒数第 N 个结点 160 相交链表 141 环形链表
  • Spring Boot CLI安装及快速入门示例

    Spring Boot CLI安装 Spring Boot是一个命令行工具 用于使用Spring进行快速原型搭建 它允许你运行Groovy脚本 这意味着你可以使用类Java的语法 并且没有那么多的模板代码 你没有必要为了使用Spring B
  • jpa|springboot|informix自定义SQL,条件判断

    jpa连mysql没什么说的 但是jpa连informix真的坑到家了 各种函数不支持 需求 在自定义sql的时候 需要判断参数是否为空 如果参数为空则不参与sql条件判断 就这么简单的一个需求 如果是jpa连mysql 那就用几个if判断