MyBatis 的動態 SQL 特性來實現有值字段才進行插入或更新

MyBatis 動態 SQL 解決方案

<!-- 動態INSERT語句 -->
<insert id="addDailyFreezeTer" parameterType="com.linyang.pecker.pojo.DailyFreezeTerminalBean">INSERT INTO dailyfreezeter_info<trim prefix="(" suffix=")" suffixOverrides=",">checkId, terminalId, pointId, meterNo, dataDate, saveDate, stepFlag,<if test="day_050601FF != null">day_050601FF,</if><if test="day_050602FF != null">day_050602FF,</if><if test="day_050603FF != null">day_050603FF,</if><if test="day_050604FF != null">day_050604FF,</if><if test="day_050605FF != null">day_050605FF,</if><if test="day_050606FF != null">day_050606FF,</if><if test="day_050607FF != null">day_050607FF,</if><if test="day_050608FF != null">day_050608FF,</if><if test="day_E1008060 != null">day_E1008060,</if><if test="day_E1008061 != null">day_E1008061,</if><if test="day_E1008062 != null">day_E1008062,</if><if test="day_E1008063 != null">day_E1008063,</if><if test="day_040005FF != null">day_040005FF,</if><if test="day_E1008031 != null">day_E1008031,</if></trim>VALUES<trim prefix="(" suffix=")" suffixOverrides=",">#{checkId}, #{terminalId}, #{pointId}, #{meterNo}, #{dataDate}, #{saveDate}, #{stepFlag},<if test="day_050601FF != null">#{day_050601FF},</if><if test="day_050602FF != null">#{day_050602FF},</if><if test="day_050603FF != null">#{day_050603FF},</if><if test="day_050604FF != null">#{day_050604FF},</if><if test="day_050605FF != null">#{day_050605FF},</if><if test="day_050606FF != null">#{day_050606FF},</if><if test="day_050607FF != null">#{day_050607FF},</if><if test="day_050608FF != null">#{day_050608FF},</if><if test="day_E1008060 != null">#{day_E1008060},</if><if test="day_E1008061 != null">#{day_E1008061},</if><if test="day_E1008062 != null">#{day_E1008062},</if><if test="day_E1008063 != null">#{day_E1008063},</if><if test="day_040005FF != null">#{day_040005FF},</if><if test="day_E1008031 != null">#{day_E1008031},</if></trim>
</insert>

實現說明

動態 INSERT 語句

  • 使用<trim>標簽處理括號和逗號
  • 通過<if>判斷字段是否為 null,只有非 null 字段才會加入 SQL
  • suffixOverrides=","自動處理多余的逗號


<!-- 動態UPDATE語句 -->
<update id="updateDailyFreezeTer" parameterType="com.linyang.pecker.pojo.DailyFreezeTerminalBean">UPDATE dailyfreezeter_info<set><if test="day_050601FF != null">day_050601FF = #{day_050601FF},</if><if test="day_050602FF != null">day_050602FF = #{day_050602FF},</if><if test="day_050603FF != null">day_050603FF = #{day_050603FF},</if><if test="day_050604FF != null">day_050604FF = #{day_050604FF},</if><if test="day_050605FF != null">day_050605FF = #{day_050605FF},</if><if test="day_050606FF != null">day_050606FF = #{day_050606FF},</if><if test="day_050607FF != null">day_050607FF = #{day_050607FF},</if><if test="day_050608FF != null">day_050608FF = #{day_050608FF},</if><if test="day_E1008060 != null">day_E1008060 = #{day_E1008060},</if><if test="day_E1008061 != null">day_E1008061 = #{day_E1008061},</if><if test="day_E1008062 != null">day_E1008062 = #{day_E1008062},</if><if test="day_E1008063 != null">day_E1008063 = #{day_E1008063},</if><if test="day_040005FF != null">day_040005FF = #{day_040005FF},</if><if test="day_E1008031 != null">day_E1008031 = #{day_E1008031},</if><if test="dataDate != null">dataDate = #{dataDate},</if><if test="saveDate != null">saveDate = #{saveDate},</if><if test="stepFlag != null">stepFlag = #{stepFlag},</if></set>WHERE checkId = #{checkId}  <!-- 根據實際主鍵調整 -->
</update>

動態 UPDATE 語句

  • 使用<set>標簽自動處理 SET 關鍵字和逗號
  • 同樣通過<if>判斷字段是否為 null
  • 需要確保 WHERE 子句使用正確的主鍵或唯一標識

注意事項

  • 對于必須字段(如 checkId, terminalId 等),建議在 Java 代碼中確保其非空
  • 如果字段類型是基本數據類型(如 int, long),需要改用包裝類(Integer, Long)才能判斷 null
  • 對于日期類型字段,可能需要額外處理空字符串或默認值的情況

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82352.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡原理與 TCP/IP 協議詳解

一、網絡通信的本質與基礎概念 1.1 什么是網絡通信&#xff1f; 網絡通信的本質是跨設備的數據交換&#xff0c;其核心目標是讓不同物理位置的設備能夠共享信息。這種交換需要解決三個核心問題&#xff1a; 如何定位設備&#xff1f; → IP地址如何找到具體服務&#xff1f;…

CUDA編程筆記(1)--最簡單的核函數

本文用來記錄cuda編程的一些筆記以及知識 本筆記運行在windows系統&#xff0c;vs編譯器中&#xff0c;cuda版本是12.6 先看一下最基本的代碼例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系統架構中的限流實踐:構建多層防護體系(二)

系統架構中的限流實踐:構建多層防護體系 一、接入層限流:流量攔截第一關二、應用層限流(服務內限流)Java生態方案對比三、分布式限流(跨服務限流)四、數據層限流(數據庫/緩存限流)1. 數據庫防護策略2. 緩存優化方案五、中間件層限流(消息隊列/分布式服務)六、客戶端限…

AI學習筆記二十八:使用ESP32 CAM和YOLOV5實現目標檢測

若該文為原創文章&#xff0c;轉載請注明原文出處。 最近在研究使用APP如何顯示ESP32 CAM的攝像頭數據&#xff0c;看到有人實現把ESP32 CAM的數據流上傳&#xff0c;通過YOLOV5來檢測&#xff0c;實現拉流推理&#xff0c;這里復現一下。 一、環境 arduino配置esp32-cam開發環…

uni-app(5):Vue3語法基礎上

Vue (讀音 /vju?/&#xff0c;類似于 view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是&#xff0c;Vue 被設計為可以自底向上逐層應用。Vue.js 的核心是一個允許采用簡潔的模板語法來聲明式地將數據渲染進 DOM 的系統&#xff0c;只關注視圖層&#xff0c;…

JAVA:Kafka 存儲接口詳解與實踐樣例

?? 1、簡述 Kafka 以其高吞吐、可擴展和高可靠性著稱,其強大性能的背后核心在于其高效的存儲設計。Kafka 不是傳統意義上的隊列,而是一個分布式日志系統,其存儲模塊是核心組成部分。 本文將深入剖析 Kafka 的存儲接口實現機制,并結合 Java 示例進行模擬驗證。 ?? 2、…

Docker 使用鏡像[SpringBoot之Docker實戰系列] - 第537篇

歷史文章&#xff08;文章累計530&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 《…

數據庫入門教程:以商品訂單系統為例

數據庫入門教程&#xff1a;以商品訂單系統為例 一、前言 數據庫是現代軟件開發中不可或缺的基礎&#xff0c;掌握數據庫的基本概念和操作&#xff0c;是每個開發者的必經之路。本文將以“商品-品牌-客戶-訂單-訂單項”為例&#xff0c;帶你快速入門數據庫的核心知識和基本操…

GeoServer樣式設置:使用本地圖標及分層/分視野顯示

GeoServer樣式設置:使用本地圖標及分層/分視野顯示 1、本地圖標生效設置2、GeoServer添加不同視野的圖標點樣式1)服務預覽效果2)本地圖標引用3)不同視野顯示不同圖標4)標注注記顯示空間的點數據,使用圖標來表示是非常常見的業務需求,而且由于在不同比例尺下,可能需要設…

DL00347-基于人工智能YOLOv11的安檢X光危險品刀具檢測含數據集

&#x1f6a8; AI技術革新&#xff0c;提升安檢效率與安全性&#xff01;YOLOv11助力X光危險品刀具檢測&#xff01; &#x1f4a1; 在安全領域&#xff0c;效率與精準度的要求從未如此迫切。作為科研人員&#xff0c;是否一直在尋找一款可以提升安檢準確率、減少人工干預、提…

測試計劃與用例撰寫指南

測試計劃與用例撰寫指南 一、測試計劃&#xff1a;項目測試的 “導航地圖”1.1 測試計劃的核心目標 1.2 測試計劃的關鍵要素 1.2.1 項目概述 1.2.2 測試策略 1.2.3 資源與進度 1.2.4 風險評估與應對 二、測試用例&#xff1a;測試執行的 “行動指南”2.1 測試用例的設計原則 2…

微服務的應用案例

從“菜市場”到“智慧超市”&#xff1a;一場微服務的變革之旅 曾經&#xff0c;我們的系統像一個熙熙攘攘的傳統菜市場。所有功能模塊&#xff08;攤販&#xff09;都擠在一個巨大的單體應用中。用戶請求&#xff08;買菜的顧客&#xff09;一多&#xff0c;整個市場就擁堵不堪…

Java設計模式之觀察者模式:從基礎到高級的全面解析

文章目錄 一、觀察者模式基礎概念1.1 什么是觀察者模式?1.2 觀察者模式的四大角色1.3 觀察者模式類圖二、觀察者模式實現步驟2.1 基礎實現步驟2.2 詳細代碼實現第一步:定義主題接口第二步:定義觀察者接口第三步:創建具體主題第四步:創建具體觀察者第五步:客戶端使用三、觀…

GATT 服務的核心函數bt_gatt_discover的介紹

目錄 概述 1 GATT 基本概念 1.1 GATT 的介紹 1.2 GATT 的角色 1.3 核心組件 1.4 客戶端操作 2 bt_gatt_discover函數的功能和應用 2.1 函數介紹 2.1 發現類型&#xff08;Discover Type&#xff09; 3 典型使用流程 3.1 服務發現示例 3.2 級聯發現模式 3.3 按UUID過…

【更新至2023年】1985-2023年全國及各省就業人數數據(無缺失)

1985-2023年全國及各省就業人數數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;1985-2023年 2、來源&#xff1a;Z國統計年鑒、各省年鑒、新中國60年 3、指標&#xff1a;就業人數 4、范圍&#xff1a;全國及31省 5、缺失情況&#xff1a;無缺失 6、指標解釋&am…

0基礎學習Linux之揭開朦朧一面:環境基礎開發工具

目錄 Linux下安裝軟件的方案&#xff1a; 對于操作系統的理解&#xff1a; 操作系統的生態問題&#xff1a; 什么是好的操作系統&#xff08;os&#xff09;&#xff1a; 重新理解centos VS ubnutu VS kail&#xff1a; 關于yum: 用 yum 安裝軟件(安裝和卸載軟件一定要有r…

YOLO 算法詳解:實時目標檢測的里程碑

在計算機視覺領域&#xff0c;目標檢測一直是一個關鍵且熱門的研究方向&#xff0c;而 YOLO&#xff08;You Only Look Once&#xff09;算法憑借其出色的實時性和較高的檢測精度&#xff0c;成為了目標檢測算法中的明星選手。本文將深入探討 YOLO 算法的原理、發展歷程、技術優…

leetcode98.驗證二叉搜索樹:遞歸法中序遍歷的遞增性驗證之道

一、題目深度解析與BST核心性質 題目描述 驗證二叉搜索樹&#xff08;BST&#xff09;是算法中的經典問題&#xff0c;要求判斷給定的二叉樹是否滿足BST的定義&#xff1a; 左子樹中所有節點的值嚴格小于根節點的值右子樹中所有節點的值嚴格大于根節點的值左右子樹本身也必須…

MathQ-Verify:數學問題驗證的五步流水線,為大模型推理筑牢數據基石

MathQ-Verify&#xff1a;數學問題驗證的五步流水線&#xff0c;為大模型推理筑牢數據基石 大語言模型在數學推理領域進展顯著&#xff0c;但現有研究多聚焦于生成正確推理路徑和答案&#xff0c;卻忽視了數學問題本身的有效性。MathQ-Verify&#xff0c;通過五階段流水線嚴格…

八股戰神-JVM知識速查

1.JVM組成 JVM由那些部分組成&#xff0c;運行流程是什么&#xff1f; JVM是Java程序的運行環境 組成部分&#xff1a; 類加載器&#xff1a;加載字節碼文件到內存 運行時數據區&#xff1a;包括方法區&#xff0c;堆&#xff0c;棧&#xff0c;程序計數器&#xff0c;本地…