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 { ListgetAllUsers(@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 { ListgetUserById(@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 註解,而這種情況卻經常被人忽略!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2773449/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MyBatis 中 @Param 註解的四種使用場景,最後一種經常被人忽略!MyBatis
- SpringMVC 中 @ControllerAdvice 註解的三種使用場景!SpringMVCController
- @Param註解學習
- Java 自定義註解及使用場景Java
- 最適合使用RxJava處理的四種場景RxJava
- myBatis——註解,#{}與${},resultMap的使用MyBatis
- @Transactional 註解下,事務失效的多種場景
- zookeeper使用(四)--應用場景
- 詳解 Go 空結構體的 3 種使用場景Go結構體
- 開發中的幾種加密演算法的使用場景加密演算法
- 使用 iBatis (MyBatis)的元註解AnnotationsMyBatis
- 歸檔模式下四種完全恢復的場景模式
- redis常見的幾種使用場景Redis
- Redis 中 BitMap 的使用場景Redis
- [Unity-24] Unity的四種載入場景的方法Unity
- Jsp中param標籤的使用JS
- Redis中5種資料結構的使用場景介紹Redis資料結構
- PyCharm中批次註釋常用的四種方法!PyCharm
- MyBatis使用四(查詢詳解)MyBatis
- FutureTask的用法及兩種常用的使用場景
- MyBatis 與 SpringBoot 整合:註解和xml兩種使用方式介紹MyBatisSpring BootXML
- PHP 併發場景的幾種解決方案PHP
- 一文弄懂分散式場景中各種鎖的原理及使用分散式
- DCI 的 註冊場景ContextContext
- Redis 中 HyperLogLog 的使用場景Redis
- SOCKS5代理的四個使用場景
- mybatis原始碼解析(四)--- MapperStatement的註冊MyBatis原始碼APP
- mongodb 使用場景和不使用場景MongoDB
- Mybatis筆記04---使用註解開發MyBatis筆記
- Android 中註解的使用Android
- 前端兩種路由實現和使用場景前端路由
- Mybatis相關:基於註解的Mybatis開發MyBatis
- max場景瘦身,加快場景的開啟速度(多種方法)
- 面試中的 ThreadLocal 原理和使用場景面試thread
- sql中in和exists的原理及使用場景。SQL
- Java中的引用型別和使用場景Java型別
- Map的使用場景
- grep 的使用場景