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

在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> 里重复写。
http://www.xdnf.cn/news/2881.html

相关文章:

  • 万物皆可执行:多功能机器人正在定义新生产力法则
  • Ceph IO读写流程详解(二)——RADOSGW请求处理
  • Lightroom 2025手机版:专业编辑,轻松上手
  • 基于 STM32 的智慧图书馆智能控制系统设计与实现
  • DeepSeek破界而来:重构大规模深度检索的算力与边界
  • Java云原生+quarkus
  • 1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
  • Consul安装部署(Windows环境)
  • 链表反转_leedcodeP206
  • 判断图片url损坏无法展示工具类
  • UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别
  • 关于本地端口启动问题
  • JAVA--- 关键字static
  • 长效住宅IP是什么?如何获取长效住宅IP?
  • 工程管理部绩效考核关键指标与项目评估
  • 选择排序快速排序
  • 国标GB28181视频平台EasyCVR实用方案:如何实现画面拉伸
  • 大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
  • 信创开发中的数据库详解:国产替代背景下的技术生态与实践指南
  • 百度「心响」:通用超级智能体,重新定义AI任务执行新范式
  • Linux CentOS 7 安装Apache 部署html页面
  • 前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南
  • 2025.4.29_STM32_看门狗WDG
  • 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献
  • 前端防护利器:disable-devtool 使用指南 - 保护你的Web应用安全
  • JAVA---集合ArrayList
  • 《从线性到二维:CSS Grid与Flex的布局范式革命与差异解析》
  • Spring中bean的生命周期(笔记)
  • LeetCode热题100--53.最大子数组和--中等
  • 最新的30个Android Kotlin面试题