仿mybatis的SQL解析器实现思路

2023-05-16

带表达式的SQL配置如下:

select * from t_sqlapi where minId=#{minId}
 <if test='maxId !=null'>
 and maxId=#{maxId}
 </if>
 and 1==1
 <if test='name !=null'>
 and name=#{name}
 </if>

参数如下:

 Map<String, Object> map = new HashMap<>();
 map.put("minId", 100);
 map.put("maxId", 500);
 map.put("name", "itkey");

期待的转换结果如下:

select * from t_sqlapi where minId=? and maxId=? and 1==1 and name=? 

------参数:------
100,500,itkey

转换思路

第1步:text转dom对象

把整个带表达式的sql脚本,通过dom4j工具转成dom对象方便后面数据的解析

第2步:解析<if></if>标签

<if></if>标签中的表达式test='maxId !=null’使用OGNL表达式工具解析其内容。如果表达式的结果是true,则<if></if>标签的内部的子元素则生。

第3步:替换#{xxx}为占位符?

需要把变量的部分#{xxx},替换成sql中的占位符?,然后把参数的值按变量摆放的顺序传参。

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

仿mybatis的SQL解析器实现思路 的相关文章

  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • 部署 dacpac 所需的权限

    我正在尝试使用 sqlpackage exe 在租户上部署 dacpac 目前 我正在向将部署此功能的帐户授予 SysAdmin 或 db owner 权限 并且它工作正常 但在生产中 如果目标租户数据库属于其他应用程序 我可能无法获得这些
  • 计算树中值的总和(递归查询)

    我在表员工 id name parentid 中有树结构 并且该表可以嵌套 employees 与另一个具有列 id employeeid quantity 的 Sales 表是一对多关系 每个员工都有销售数量 我想计算每个员工以及儿童员工
  • 在 SQL Server SELECT 语句中使用 CASE 时消除 NULL

    我有一份大而混乱的报告要写 它连接了 5 个表 一个表中有一列用于多个不同的值 本质上是一个 标签 列 其中标签根据用户想要使用的各种元数据的类型以创造性的方式使用 因此 我对报告的查询返回 3 个几乎相同的行 仅 标签 列有所不同 例如
  • Netezza SQL 将 VARCHAR 转换为二进制字符串

    我有一个位图存储为VARCHAR在内特扎 需要转换一下VARCHAR转换为 Netezza 中的二进制字符串 输入 Netezza col 值 VARCHAR 0xFFFFFFFFFFFFFFFF 期望的输出 VARCHAR gt 1111
  • 在 Sql Server 中启用 DTD 支持

    我有各种 xml 文档需要存储在数据库列中 这些文档包含对 DTD 的引用 并且 SQL Server 不会导入 xml 因为它存在安全风险 如何在数据库上启用 DTD 支持 以便它可以让我插入 xml 内容 你必须CONVERT首先 MS
  • 关系代数 - 笛卡尔积与自然连接?

    我正在准备考试 但未能找到一个可靠的标准来确定笛卡尔积是否x要使用或者如果自然连接 X 是要使用的 我想出了一个粗略的指南 如果您需要投影与要连接的表中的属性同名的属性 则必须使用x并说明要投影的表名称 tableA colname1 ta
  • MySql 复合索引

    我们使用 MySql 作为我们的数据库 以下查询在 mysql 表 大约 2500 万条记录 上运行 我在这里粘贴了两个查询 查询运行得太慢 我想知道更好的复合索引是否可以改善这种情况 你知道最好的综合指数是什么吗 并建议我这些查询是否需要
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • QGIS 和 PostGIS(地图点(美国地图上的纬度和经度以及半径)

    我安装了QGIS和PostGIS 我想在美国地图上以 100 英里为半径显示 200 个点 我已将纬度和经度导入 PostGIS 数据库中 所以我有三个字段 地址 纬度 经度 1 我需要将纬度和经度字段转换为点或几何字段吗 如果是这样怎么办
  • T-SQL 问题:查询 XML

    任何人都可以告诉我如何从这些数据生成 DATA Key ParentKey 5 NULL 25 5 33 25 26 5 27 5 34 27 28 5 29 5 这个 XML 结果 RESULTS
  • NOLOCK 和 UNCOMMITTED 之间有什么区别

    我使用 SQL Server 2012 我写了两个查询 但是它们之间有什么不同NOLOCK and UnCommitted SELECT lastname firstname FROM HR Employees with READUNCOM
  • SQL 查询中的可选参数在检查 NULL 时非常慢

    我有许多已连接的表 最大行数约为 400 万条记录 我们正在存储过程中搜索该表 并且有一个默认值为 NULL 的可选参数 下面是我们正在运行的编辑示例 连接涉及更多表 但只有 1 个字段具有 WHERE 子句 DECLARE OwnerId
  • SSRS 报告 - IIF 声明问题

    做一个表达式时出现错误 有人可以在这里告诉我正确的语法吗 IIf Fields t cpcp Value 310 Purchased Material Raw Material Nothing IIf Fields t cpcp Value
  • SQL Server 为什么索引不与 OR 一起使用

    我一直在研究索引并试图了解它们是如何工作的以及如何使用它们来提高性能 但我错过了一些东西 我有下表 Person Id Name Email Phone 1 John E1 P1 2 Max E2 P2 我正在尝试找到对列进行索引的最佳方法
  • 针对 SqlClient 的 getschema("foreignkeys") 未产生足够的信息

    我需要两个表和两组字段 而不是外键名称和其中一个表名称 有谁知道如何查询SQL Server完整的外键信息 谢谢 这可能是一项复杂的冒险 GetSchema 和 INFORMATION SCHEMA 视图不完整 导致需要直接查询 sys 视
  • 为什么有时自增列的值会有一个或多个间隙?

    我有一个这样的表 colors id color 1 red 2 blue id column is auto increment PK 当我向该表中插入一些新值时 有时会出现一些间隙id柱子 像这样的事情 INSERT INTO colo
  • 如何在 BigQuery/SQL 中将行转置为包含大量数据的列?

    我在将 BigQuery 中的大量数据表 15 亿行 从行转置为列时遇到问题 我可以弄清楚如何在硬编码时使用少量数据来完成此操作 但是对于如此大量的数据 该表的快照如下所示 CustomerID Feature Value 1 A123 3
  • 子查询在多项选择时返回超过 1 个值的 SQL 错误

    我想要一个临时表 它将使用 select 语句插入值 但每次我运行查询时 总是出现错误 子查询返回超过 1 个值 当查询跟随 gt 或子查询用作表达式时 不允许这样做 该语句已终止 0 行受影响 这很奇怪 因为代码中似乎没有错误 但如果有的
  • 如何返回调用不同数据库中的存储过程的远程数据库名称?

    我在一个 SQL Server 2008 R2 上有许多不同的数据库 为了便于论证 我们将它们称为 DB A DB B 和 DB C 我被要求开发一个将存在于 DB A 上的存储过程 该存储过程将用于删除和创建索引 并在 DB A 的表中存

随机推荐

  • RuoYi若依实战-代码生成

    代码生成 使用admin登录管理后台 xff0c 菜单路径如下 xff1a 首页 系统工具 代码生成 建表 span class token comment auto generated definition span span class
  • CentOS stream 8同步时间

    虚拟机中的CentOS stream8挂起以后 xff0c 重新打开系统时间依然是之前的时间 会导致一些操作无效了 CentOS7中可以使用ntpdate同步时间 xff0c 在CentOS stream 8中发现已经无法成功安装此软件了
  • RuoYi开发实战- PostMan请求接口

    最近在学习若依这个开源项目 xff0c 在调试接口时遇到一个小坎 默认的情况下接口是无法直接请求的 xff0c 请求会报以下的错误 xff1a span class token punctuation span span class tok
  • RuoYi若依代码生成+一键部署

    若依代码生成器很强大的 xff0c 可以让我们写增删改查的效率大增 但是我在用的过程中总感觉还不够爽快 我想根据自己的想法改造一下 若依代码生成的基本操作如下 xff1a https www bilibili com video BV1ba
  • 若依yml配置文件读取方法学习

    SpringBoot的yml配置用了好多年了 xff0c 若依的方式让我眼前一亮 这些做确实挺好用的 generator yml RuoYi Vue ruoyi generator src main resources generator
  • Netty核心源码分析(四)心跳检测源码分析

    文章目录 系列文章目录一 心跳检测案例二 源码分析1 Netty心跳的三个Handler2 IdleStateHandler源码 xff08 1 xff09 四个关键属性 xff08 2 xff09 handlerAdded方法 xff08
  • mybatis执行sql脚本

    最近在学习若依这个开源项目 xff1a https gitee com y project RuoYi Vue 默认的代码生成模块用起来总感觉别扭 xff0c 比如说 xff0c 每次生成的代码还要单独的手动执行一下SQL语句 我就在想能不
  • 解决@Autowired IDEA编译Could not autowire. No beans of ‘xxxx‘ type found.

    现象 最近在学习若依开发框架 xff0c 发现若依的一些代码在IDEA中有报错显示 xff0c 但是实际上是可以正常编译的 虽然不影响实际开发 xff0c 对于强迫证程序员来说看到这两个erro真的难受 原因分析 IDEA 可以理解 Spr
  • 若依框架登录去除验证码

    若依框架自带的登录功能还是挺好用的 但是在开发过程中经过因在编写代码或者编写设计文档登录会话到期重新登录 重新登录就会出现验证码 xff0c 一天如果要输入10次验证码也会浪费不少时间 验证码这个功能在生产环境非常有必要 xff0c 但是在
  • IDEA若依框架新建模块

    创建新的module 项目上鼠标右键 选择Maven项目 Parent选ruoyi 点击Finish 编辑RuoYi Vue Wisdom ruoyi wisdom pom xml 在 lt artifactId gt ruoyi wisd
  • SpringBoot拦截指定路径统一处理

    最近在做一个有趣的项目 xff0c 做一个API生成小工具 可以对简单的API路径进行配置SQL自动生成API 简单来讲 xff1a URI对应sql api userselect from user api user addresssel
  • vim代码注释生成插件neogen

    更好的注释生成器 支持多种语言和注释约定 项目地址 xff1a https github com danymat neogen 注意事项 nvim版本以大于等于NVIM v0 6 1不然会有报错 插件安装 插件的运行需要依赖nvim tre
  • SpringBoot中封装jdbc工具类

    背景 现在的数据层的开发 xff0c 大多会使用如MyBatis或JPA之类的开发工具 这些开发工具给我们的开发过程中带来了极大的便利 但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活 xff0c 性能更高 由于部分场景下MyB
  • 若依设置匿名访问路径

    背景 在实际开发的过程中 xff0c 会有一些开放的API是可以游客访问的 xff0c 无需登录的 那么在若依这套框架中如何设置呢 xff1f 配置 文件路径如下 xff1a span class token class name RuoY
  • 初探OGNL表达式

    简介 对象导航图语言 xff08 Object Graph Navigation Language xff09 xff0c 简称OGNL xff0c 是应用于Java中的一个开源的表达式语言 xff08 Expression Languag
  • mvn命令启动Spring boot项目

    Spring boot项目在IDEA中启动非常的方便 xff0c 点击绿色三角按钮就可以启动了 最近有用vim开发Spring boot的小伙伴问我 xff0c 能不能在命令中手动启动Spring boot项目呢 xff1f 当时是可以的
  • Netty核心源码分析(五)核心组件EventLoop源码分析

    文章目录 系列文章目录一 EventLoop源码分析1 NioEventLoop源码2 EventLoop的父接口SingleThreadEventExecutor xff08 1 xff09 addTask方法 xff08 2 xff09
  • python3对接微信小程序蓝牙

    39 39 39 Created on 2019年10月15日 64 author lg 39 39 39 from Crypto Cipher import AES from binascii import b2a hex a2b hex
  • ubuntu13.10 设置以root用户自动登陆

    ubuntu13 10 默认只有普通用户和Guest用户可登陆图形界面 xff0c 要切换root账号登陆 xff0c 需要做些修改 xff0c 步骤如下 xff1a 以普通用户登陆后 xff0c 先给root用户设置一个密码 xff1a
  • 仿mybatis的SQL解析器实现思路

    带表达式的SQL配置如下 xff1a span class token keyword select span span class token operator span span class token keyword from spa