MyBatis 中 @Param 註解的四種使用場景,最後一種經常被人忽略!
有一些小夥伴覺得 MyBatis 只有方法中存在多個引數的時候,才需要新增 @Param 註解,其實這個理解是不準確的。即使 MyBatis 方法只有一個引數,也可能會用到 @Param 註解。
但是,在你總結出規律之前,你可能會覺得莫名其妙,有的時候一個引數明明不用新增 @Param 註解,有的時候,卻需要新增,不新增會報錯。
有的人會覺得這是 MyBatis 各個版本差異的鍋,不可否認,MyBatis 發展很快,不同版本之間的差異還挺明顯的,不過這個加不加 @Param 註解的問題,卻並不是版本的鍋!今天鬆哥就和大家來聊一聊這個問題,到底哪些情況下需要新增 @Param 註解。
首先,如下幾個需要新增 @Param 註解的場景,相信大家都已經有共識了:
- 第一種:方法有多個引數,需要 @Param 註解
例如下面這樣:
@Mapper
public interface UserMapper {
Integer insert(@Param("username") String username, @Param("address") String address);
}
對應的 XML 檔案如下:
<insert id="insert" parameterType="org.javaboy.helloboot.bean.User"> insert into user (username,address) values (#{username},#{address}); </insert>
這是最常見的需要新增 @Param 註解的場景。
- 第二種:方法引數要取別名,需要 @Param 註解
當需要給引數取一個別名的時候,我們也需要 @Param 註解,例如方法定義如下:
@Mapper
public interface UserMapper {
User getUserByUsername(@Param("name") String username);
}
對應的 XML 定義如下:
<select id="getUserByUsername" parameterType="org.javaboy.helloboot.bean.User"> select * from user where username=#{name}; </select>
老實說,這種需求不多,費事。
- 第三種:XML 中的 SQL 使用了 $ ,那麼引數中也需要 @Param 註解
$ 會有注入漏洞的問題,但是有的時候你不得不使用 $ 符號,例如要傳入列名或者表名的時候,這個時候必須要新增 @Param 註解,例如:
@Mapper
public interface UserMapper {
List<User> getAllUsers(@Param("order_by")String order_by);
}
對應的 XML 定義如下:
<select id="getAllUsers" resultType="org.javaboy.helloboot.bean.User">
select * from user
<if test="order_by!=null and order_by!=''">
order by ${order_by} desc
</if>
</select>
前面這三種,都很容易懂,相信很多小夥伴也都懂,除了這三種常見的場景之外,還有一個特殊的場景,經常被人忽略。
- 第四種,那就是動態 SQL ,如果在動態 SQL 中使用了引數作為變數,那麼也需要 @Param 註解,即使你只有一個引數。
如果我們在動態 SQL 中用到了 引數作為判斷條件,那麼也是一定要加 @Param 註解的,例如如下方法:
@Mapper
public interface UserMapper {
List<User> getUserById(@Param("id")Integer id);
}
定義出來的 SQL 如下:
<select id="getUserById" resultType="org.javaboy.helloboot.bean.User">
select * from user
<if test="id!=null">
where id=#{id}
</if>
</select>
這種情況,即使只有一個引數,也需要新增 @Param 註解,而這種情況卻經常被人忽略!
好了,不知道大家有沒有 GET 到呢?有問題歡迎留言討論。
關注公眾號【江南一點雨】,專注於 Spring Boot+微服務以及前後端分離等全棧技術,定期視訊教程分享,關注後回覆 Java ,領取鬆哥為你精心準備的 Java 乾貨!
相關推薦
MyBatis 中 @Param 註解的四種使用場景,最後一種經常被人忽略!
有一些小夥伴覺得 MyBatis 只有方法中存在多個引數的時候,才需要新增 @Param 註解,其實這個理解是不準確的。即使 MyBatis 方法只有一個引數,也可能會用到 @Param 註解。 但是,在你總結出規律之前,你可能會覺得莫名其妙,有的時候一個引數明明不用新增 @Param 註解,有的時候,卻需
Mybatis中@Param註解詳細使用和原理分析
對於目前市場上火爆的持久層框架MyBatis相信大家在工作中肯定是用得很多,但是你對其mapper介面代理物件和其方法上的@Param註解又瞭解多少呢? 廢話不多說,接來下就給大家來分析下 MapperRegistry MapperRegistry是用於註冊和快
轉:組織敏捷不是一種選擇,而是一種必須!
個人理解:靈活、柔性、敏捷,所有都在指向高度不確定性、快速變化的時代特徵。人永遠是活動的主體,關注人的素質提升,培養與放權,才是實現敏捷的關鍵。面對變化,只能聽從指令、按規則行事,缺少主動的意識何談敏捷。戰場狀況瞬息萬變,戰鬥在一線的人員除了高度協作,更重要的是適時而變,在大目標一致的情況,使用更有
你有1元、5元、7元三種硬幣,求一種方法,用最少的硬幣湊出m元
/* * 程式碼:學習動態規劃的思想,採用自底向上,用迭代去實現。 * * 硬幣數目的最小單元是1、3、5,湊一次必須使用三個單元之一,假設 * 錢的數目為m,則 m = 1 * x + 3 * y + 5 * z; * * 如果要湊夠0元,只有一種方案,
Socket粘包問題的3種解決方案,最後一種最完美!
在 Java 語言中,傳統的 Socket 程式設計分為兩種實現方式,這兩種實現方式也對應著兩種不同的傳輸層協議:TCP 協議和 UDP 協議,但作為網際網路中最常用的傳輸層協議 TCP,在使用時卻會導致粘包和半包問題,於是為了徹底的解決此問題,便誕生了此篇文章。 # 什麼是 TCP 協議? TCP 全稱
mybatis傳多個引數(不使用@param註解情況下),3.4.2版本之後出現#{0}-#{n}引數繫結異常
解決方案: 在mybatis配置檔案中宣告setting屬性的useActualParamName 引數值為false **
關於Mybatis的@Param註解 及 mybatis Mapper中各種傳遞引數的方法
原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 關於Mybatis的@Param註解 Mybatis 作為一個輕量級的資料持久化框架,目前(2018)的應用非常廣泛,基本可以取代Hiberna
MyBatis中sqlSession操作數據庫,不報錯但無法實現數據修改(增、改、刪)
修改 () brush light pub clas java bat job public void addCustomerTest() throws Exception { SqlSession sqlSession = MyBatisUtils.ge
mybatis中@Param的用法和作用
配置 pre tis 內容 RF 數值 package col ML 用註解來簡化xml配置的時候,@Param註解的作用是給參數命名,參數命名後就能根據名字得到參數值,正確的將參數傳入sql語句中 我們先來看Mapper接口中的@Select方法 packag
MyBatis中#{}和${}的四個區別
區別1: #{} 相當於JDBC SQL語句中的佔位符 “?”(PreparedStatement) ${} 相當於JDBC SQL語句中的連線符號 “+” (Statement) 所以,${} 存在SQL注入問題 區別2: #{} 進行輸入對映的時候,會對引數進行型別解析
Mybatis中@Param的使用
. QuerySupplierComparisonBillResult querySupplierComparisonBill(@Param("supplierId") Long supplierId, @Param("dateType") int dateType, @Param("first
讓使用者輸入一個日期字串,將其轉換成日期格式, 格式是(yyyy/MM/dd,yyyyMMdd,yyyy-MM-dd)中的一種, 任何一種轉換成功都可以; 如果所有的都無法轉換,輸出日期格式非法。
第三種方法 while(true) { Date d; System.out.println("正在
【轉載】關於Mybatis的@Param註解
轉自:https://blog.csdn.net/mrqiang9001/article/details/79520436 Mybatis 作為一個輕量級的資料持久化框架,目前(2018)的應用非常廣泛,基本可以取代Hibernate。關於 @param 這個註解的使用,作者這裡整理了一些筆記。
@param spring中@param和mybatis中@param使用區別
spring中@param和mybatis中@param使用區別 置頂 2015年03月14日 11:51:09 閱讀數:55176 spring中@param /** * 查詢指定使用者和
@Param註解 關於mybatis的@Param註解和引數
關於mybatis的@Param註解和引數 引用 https://www.cnblogs.com/whisper527/p/6568028.html 薇飄意 1,使用@Param註解 當以下面的方式進行寫SQL語句時:  
mybatis中對List使用in語法,foreach語法
service中程式碼 public Integer deleteAlarmCountResultLogical(String deleted, ArrayList<String> idList){ HashMap<String, Object>
MyBatis中實現動態的SQL語句,分頁以及mybatis的常用的配置
<select id="getListByPage" resultType="com.gxa.bj.modle.UserInfoPage" parameterType="com.gxa.bj.modle.UserInfoPage">
MyBatis中的轉義字元(大於,小於,大於等於,小於等於)
符號 小於 小於等於 大於 大於等於 和 單引號 雙引號 原符號 < <= > >= & ’ " 替換符號 < <= > >= & &a
Mybatis中重要註解說明
<!--注意:xml中的標籤是有先後順序的,將滑鼠放在configuration標籤上,彈出框的末尾可以檢視先後順序--> 1、<properties> mybatis可以使用properties來引入外部properties配置檔案的內容
Linux 統計檔案中某個字串出現的次數(2種方法,推薦第二種)
一、grep+wc 1、單個字串 grep -o targetStr filename | wc -l 備註:單個字串可以不加引號 2、多個字串 grep -o targetStr_1\|targetStr_2\|targetStr_3…… filename | wc