当前位置: 首页 > news >正文

java直接获取MyBatis将要执行的动态sql命令(不是拦截器方式)

目录

前言

一. 准备数据

1. 传输过来的json条件数据

2. mybatis 配置的动态sql

3. 想要的最终会执行的sql并返回给页面展示

二. 实现方式

三. 最终代码


前言

        1.在平常开发过程中,MyBatis使用时非常多的,一般情况下我们只需要在控制台看看MyBatis输出的日志,要不就是实现 MyBatis 提供的接口 Interceptor 来拦截,对执行前进行一些操作。

        2.但是有这么一种需求,将 MyBatis 的 sql 都配置到数据库里,相当于一个字符串,通过传输的 json 参数获取 MyBatis 解析 动态sql 获取最终sql,并返回给页面展示,是不是很小众的需求。

MappedStatement ms = configuration.getMappedStatement("com.路径.类名.方法名");
BoundSql boundSql = ms.getBoundSql(map);
String sql = boundSql.getSql();
System.out.println(sql);

        3.网上也没有太多案例,大部分都是此类只能解析静态sql的案例,很少有解析动态sql的案例,今天就遇到了,所以今天记录下是怎么实现的。

一. 准备数据

比方说我们有这么一组数据

1. 传输过来的json条件数据

{"id": "17484150668118547d7bd2c539749a378d8a69dfa26d","serialNum": 1,"courseId": "2024-2025-2-D571061023-075212","orderNum": 2,"list1": ["362D8FD7F24DABACE065020C29BC0833"],"name": "啦啦","way": "1","list2": [{"orderNum": 3,"id": "1748415080498a2142926e7e22c483e1f6e7a84b48387","name": "3哈3"},{"orderNum": 4,"id": "17484150985463b22fcccb983ead6a6bc8e4f11fdadcd6","name": "4哈4"}]
}

2. mybatis 配置的动态sql

BEGINinsert into t_aaaaaaa (id, course_id, name, serial_num, way, order_num, create_date, update_date)  values(#{id}, #{courseId}, #{name} , #{serialNum} ,  #{way} , #{orderNum}, sysdate, sysdate);<foreach collection="list1" item="item" index="index" >insert into t_bbbbbbbb (id, host_id, ass_id)values (sys_guid(), #{id}, #{item});</foreach><if test="list2 != null and list2.size > 0"><foreach collection="list2" item="item" index="index" >insert into t_cccccccc (id, course_id, host_id, order_num, create_date, update_date, name)values (sys_guid(), #{courseId}, #{id}, #{item.orderNum}, sysdate, sysdate, #{item.name});</foreach></if>
END;
http://www.xdnf.cn/news/707167.html

相关文章:

  • 重新测试deepseek Jakarta EE 10编程能力
  • while循环
  • 内存泄漏可能有哪些原因导致
  • 酒店管理破局:AI 引领智能化转型
  • Onvif协议:IPC客户端开发-IPC相机控制(c语言版)
  • (一)视觉——工业相机(以海康威视为例)
  • 2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题
  • 论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS
  • Spring Security架构中过滤器的实现
  • 设计模式-代理模式
  • 零基础开始的网工之路第十六天------Linux安全管理
  • 电路图识图基础知识-电路接线图(八)
  • 回调函数的理解
  • 人工智能在智能城市中的创新应用与未来趋势
  • 汽车制造场景下Profibus转Profinet网关核心功能与应用解析
  • HarmonyOS NEXT~鸿蒙开发能力:HarmonyOS SDK AI 全解析
  • 软考-系统架构设计师-第九章 系统架构设计基础知识
  • 美化显示GDB调试的数据结构
  • 【循环神经网络RNN第一期】循环神经网络RNN原理概述
  • 前人栽树,后人乘凉——AdaBoost
  • 2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版
  • 美团启动618大促,线上消费节被即时零售传导到线下了?
  • 知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好
  • RabbitMQ集群与负载均衡实战指南
  • PP-OCRv5 C++封装DLL C#调用源码分享
  • 3D PDF如何制作?SOLIDWORKS MBD模板定制技巧
  • 新能源汽车电控系统的精准守护者PKDV5355高压差分探头
  • 【第4章 图像与视频】4.6 结合剪辑区域来绘制图像
  • 纯前端实现图片伪3D视差效果
  • 华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现