Mybatis中isNotNull與isNotEmpty的使用技巧
做開發工作時間長了,會發現,在需求逐步梳理清晰以後,大致的方向已經明確了。此時會進入細節開發環節,是最繁瑣,也是決定開發質量的關鍵階段。最近遇到了一個生產問題,必填欄位的值,清空儲存,無法儲存成功。
具體業務需求是這樣的:
客戶的基本資訊,坐席可以儲存,也可以提交後端系統進行審批。
1,儲存的時候,其實就是一個暫存的功能,只要坐席輸入的是合法的值,都要儲存入庫。
2,提交審批的時候會進行各種校驗,包括合法性校驗、必填校驗,業務邏輯校驗等等。
生產問題就出在這個儲存的功能上,如果一個欄位有值,但是坐席清空,點儲存,這時候儲存沒有生效。
問題其實也很好定位,我去看了一下程式碼就找到問題了。但是這個問題在生產上一直存在的。
主要是不是阻斷性問題,影響不大,所以可能有的坐席發現了,也沒有在意,沒有報生產問題。
原因就是:本該使用isNotNull的地方,缺使用了isNotEmpty
以上是從業務的角度來分析的,接下來,我們從技術角度來看一下這個問題。
isNotNull,顧名思義,就是不為null,也就是<>null
isNotEmpty,顧名思義就是不為空,也就是<>null,並且<>''(空字串)
區別也很明顯,就是是否包含空字串。針對上面的業務場景,我們需要儲存空字串,該什麼哪個呢,看一下下面2個SQL語句:
UPDATE PRODUCT P SET UPDATE_TIME = SYSDATE <isNotEmpty prepend="AND" property="productName"> P.PRODUCT_NAME = #productName# </isNotEmpty> WHERE P.PRODUCT_ID = #productId#
UPDATE
PRODUCT P
SET
UPDATE_TIME = SYSDATE
<isNotNull prepend="AND" property="productName">
P.PRODUCT_NAME = #productName#
</isNotNull>
WHERE
P.PRODUCT_ID = #productId#
當頁面傳遞過來的值為空字串時,我們要保證能執行對PRODUCT_NAME的修改,很顯然,需要使用isNotNull標籤。
出問題的原因其實也簡單,就是複製貼上的程式碼,也沒有注意到isNotNull與isNotEmpty的區別。所以平時我們還是要細心,關鍵心中要有分寸,如果你很清楚的知道isNotNull與isNotEmpty的區別,一旦看到這個,你自然就會想到該如何使用。
相關推薦
Mybatis中isNotNull與isNotEmpty的使用技巧
做開發工作時間長了,會發現,在需求逐步梳理清晰以後,大致的方向已經明確了。此時會進入細節開發環節,是最繁瑣,也是決定開發質量的關鍵階段。最近遇到了一個生產問題,必填欄位的值,清空儲存,無法儲存成功。 具體業務需求是這樣的: 客戶的基本資訊,坐席可以儲存,也可以提交後端
[轉]MyBatis中resultType與resultMap區別
作用 進一步 sel 存在 其中 對象 直接 model ati MyBatis中關於resultType和resultMap的具體區別如下: MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap。resultTy
mybatis中的${}與#{}的理解
破壞 字段名 數據 from 兩種 opera 使用場景 any operator mybatis作為目前java較為常使用的orm框架,其中動態sql的參數的註入有${}與#{兩種形式,下面來介紹一下他們之間的區別, #{}作為參數註入的方式時,從表象上來看,是在
談談mybatis中的#與$的區別
需要 mybatis 默認 tis 不改變 輸出 spa 字符串 _id #相當於對數據 加上 雙引號,$相當於直接顯示數據 1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麽解析
Mybatis中的#{}與${}區別以及什麼是SQL注入
今天搞懂了一個問題,就是在使用Mybatis時#{}與${}到底有什麼區別?原來也看過別人的部落格,感覺總是迷迷糊糊(原諒我是菜鳥),今天把這個問題整理了一遍,水平有限,各位大佬如果發現錯誤的地方請指正1,首先Mybatis中的#{}與${}到底有什麼區別?其實,區別就是如果
Mybatis中jdbcTyped與javaType的對應關係、及oracle、mysql的對應
Mybatis中jdbcType和javaType的對應關係 JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR
一文理清Mybatis中resultType與resultMap之間的關係和使用場景
1.概要 Mybatis ORM半自動對映框架對java開發工程師來說應該是必會的框架之一。它的好處這裡不是我們討論的重點。令很
Mybatis中Mapper代理形式開發與spring整合
can sna 修改 jar xid oca pac user cal 1.導入jar包 2.分包 cogfig:存放配置文件 mapper:存放映射與接口 pojo:存放實體類 test:測試代碼 3.編寫配置文件 SqlMapConfig.xml <?
java mybatis中insert 操作 返回主鍵的小技巧。。。。
res des lec oracl 嵌入 tid batis 元素 ble 第一種方式: 在實體類的映射文件 "*Mapper.xml" 這樣寫: <insert id="insertvmatedic" keyColumn="mdid" useGeneratedKe
Mybatis中#與$的區別
根據 class select ssi 什麽 jdb 解析 lec 後臺 1.兩者都是動態的向sql語句中傳入需要的參數 2.#傳入的參數在SQL中顯示為字符串 eg:select id,name,age from student where id =#{id},
筆記:MyBatis中$與#的區別
首先MyBatis中 $與#都是動態傳參 # 將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號 $ 將傳入的資料直接顯示生成在sql中 # 佔位符號,能夠很大程度防止sql注入「語句的拼接」 $ sql拼接符號,無法防止Sql注入 如果使用在order by中就需要使用 $
mybatis中${}與#{}的區別
mybatis中${}和#{}都可以在增刪改查中使用 select * from student where name = ${name}; select * from student where name = #{name}; 二者的意思相同,都可以用來查詢資料庫中的內容,且查詢的結果
mybatis中動態sql的實現與使用
首先引用一段mybatis文件中的話: 動態 SQL MyBatis 的強大特性之一便是它的動態 SQL。如果你有使用 JDBC 或其它類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句的痛苦。例如拼接時要確保不能忘記新增必要的空格,還要注意去掉列表最
mybatis中的find_in_set 與in
1.FIND_IN_SET(str,strlist) 假設,字串str在strlist的列表中,其中strlist 的字串是被“,”分開的,那麼在mybatis中的查詢語句為 “find_in_set(id,
PHP學習——24 PHP面向物件(類中靜態成員的建立與訪問技巧:static)
<?php class Employee { // 訪問控制符:指示類成員在哪裡可以被訪問:public/protected/private // 成員狀態符:指示如何訪問該成員:靜態self/parent/static,非靜態:$this-> public static $
Mybatis中解決資料庫表字段與實體類不一致的解決方法
解決方法一:通過在查詢sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致,這樣就可以使表的欄位名和實體類的屬性名一一對應上了,這種方式時通過在sql語句中定義別名來解決欄位名和屬性名的對映關係的。 解決方法二:通過<resultMap>來對映欄位名和實體類屬性名一
Mybatis中${ }與#{ }的區別
今天看BBS,看到有關於面試問題的一個帖子,裡面提到了關於Mybatis中的#{}和${}的區別,這裡也簡單總結記錄下。 #{ }:預編譯處理,字串替換,進行型別匹配 Mybatis處理#{}時,會將SQL語句中的變數#{}替換成?號,呼叫PreparedS
Mybatis中的mapper.xml裡面${} 和 #{}區別與用法
Mybatis 的Mapper.xml語句中parameterType向SQL語句傳參有兩種方式:#{}和${} #{}方式能夠很大程度防止sql注入。 $方式無法防止Sql注入。 $方式一般用於傳入資料庫物件,例如傳入表名. 一般能用#的就別用$. #{}表示一個佔
Mybatis 中 in 語法 的# 與 $區別
今天寫map時,(虛擬碼):update xxx t set t.a='1' where id in (#{ids}); 當ids傳入為string 1,2,3 時,得出效果只是更新了id=1的資料,原來#{xxx}是一個字串,mybatis只會當他是一個值,如果你想達到字
MyBatis中#和$的區別與PageHelper配置詳解
一.PageHelper配置詳解 二.MyBatis中#和$的區別 #將傳入的資料都當成一個字串,會對自動傳入