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

在Mybatis中写sql的常量应用

下面示例把原来写死的 1、2、3 都替换成了绑定好的常量,同时额外演示了如何把第五个状态也一起统计(如果你的 DTO 没有对应字段,也可删掉相应那一行)。

<!-- 1. 定义可复用的常量绑定 -->
<sql id="DeviceStatusConstants"><bind name="cntPendingDebugging"value="@org.jeecg.modules.test.constant.Constants@cntPendingDebugging"/><bind name="cntDebugging"value="@org.jeecg.modules.test.constant.Constants@cntDebugging"/><bind name="cntInspection"value="@org.jeecg.modules.test.constant.Constants@cntInspection"/><bind name="cntPendingAcceptance"value="@org.jeecg.modules.test.constant.Constants@cntPendingAcceptance"/><bind name="cntWaitingForDelivery"value="@org.jeecg.modules.test.constant.Constants@cntWaitingForDelivery"/>
</sql><!-- 2. 在查询中 include 并使用常量 -->
<select id="barChartData" resultType="org.jeecg.modules.test.dto.BarChartDataDTO"><include refid="DeviceStatusConstants"/>SELECTp.id,p.project_name AS projectName,-- 使用绑定后的常量,替代原来写死的数字SUM(CASE WHEN d.device_type = #{cntPendingDebugging} THEN 1 ELSE 0 END)       AS cntWaitDebugging,SUM(CASE WHEN d.device_type = #{cntDebugging} THEN 1 ELSE 0 END)             AS cntDebugging,SUM(CASE WHEN d.device_type = #{cntInspection} THEN 1 ELSE 0 END)            AS cntDebuggingDone,SUM(CASE WHEN d.device_type = #{cntPendingAcceptance} THEN 1 ELSE 0 END)     AS cntDebuggingInterrupted,SUM(CASE WHEN d.device_type = #{cntWaitingForDelivery} THEN 1 ELSE 0 END)    AS cntWaitingForDeliveryFROM v_projects pLEFT JOIN v_device_info dON p.id = d.project_idGROUP BY p.id
</select>
  • <bind> 可以把 OGNL 表达式(这里是访问类中 public static final 常量)的结果绑定到一个变量,后续直接用 #{变量名} 引用,避免反复写长长的全限定名 (java - MyBatis - dynamic variable - Stack Overflow)。
  • <sql>+<include> 则能把这些绑定统一管理,多处复用,无需在每个 <select> 里重复写。

相关文章:

  • Redis Sentinel 和 Redis Cluster 各自的原理、优缺点及适用场景是什么?
  • 同一个路由器接口eth0和ppp0什么不同?
  • springboot中有关数据库信息转换的处理
  • Opencv中图像深度(Depth)和通道数(Channels)区别
  • MySQL事务隔离级别的实现原理MVCC
  • 51c自动驾驶~合集37
  • 「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具
  • 夜族觉醒 服务搭建 异地联机 保姆教程 流畅不卡顿
  • 【linux网络】网络基础概念
  • 流量守门员:接口限流艺术
  • 软件设计师-软考知识复习(2)
  • vue3+flex动态的绘制蛇形时间轴
  • Python小程序:上班该做点摸鱼的事情
  • vue3+Nest.js项目 部署阿里云
  • 字节跳动社招面经 —— BSP驱动工程师(4)
  • vue.js中的一些事件修饰符【前端】
  • uni-app 中封装全局音频播放器
  • 深入蜂窝物联网 第四章 Cat-1 与 5G RedCap:带宽、低时延与未来趋势
  • 五、UI自动化测试05--PyTest框架
  • 【SpringBoot】基于MybatisPlus的博客管理系统(1)
  • 云南铁路:打造“铁路+金融+产业”融合发展生态
  • 民营经济促进法出台,自今年5月20日起施行
  • 阿迪达斯一季度营收增近13%,称美国加征关税对业绩带来不确定性
  • 李在明涉嫌违反《公职选举法》案将于5月1日宣判
  • 港交所与香港证监会就“中概股回流意向”已与部分相关企业进行接触
  • 大学男生被捉奸后将女生推下高楼?桂林理工大学辟谣