摘要:如果我們在動態(tài)中用到了參數(shù)作為判斷條件,那么也是一定要加注解的,例如如下方法定義出來的如下這種情況,即使只有一個參數(shù),也需要添加注解,而這種情況卻經(jīng)常被人忽略好了,不知道大家有沒有到呢有問題歡迎留言討論。
有一些小伙伴覺得 MyBatis 只有方法中存在多個參數(shù)的時候,才需要添加 @Param 注解,其實這個理解是不準確的。即使 MyBatis 方法只有一個參數(shù),也可能會用到 @Param 注解。
但是,在你總結(jié)出規(guī)律之前,你可能會覺得莫名其妙,有的時候一個參數(shù)明明不用添加 @Param 注解,有的時候,卻需要添加,不添加會報錯。
有的人會覺得這是 MyBatis 各個版本差異的鍋,不可否認,MyBatis 發(fā)展很快,不同版本之間的差異還挺明顯的,不過這個加不加 @Param 注解的問題,卻并不是版本的鍋!今天松哥就和大家來聊一聊這個問題,到底哪些情況下需要添加 @Param 注解。
首先,如下幾個需要添加 @Param 注解的場景,相信大家都已經(jīng)有共識了:
第一種:方法有多個參數(shù),需要 @Param 注解
例如下面這樣:
@Mapper public interface UserMapper { Integer insert(@Param("username") String username, @Param("address") String address); }
對應的 XML 文件如下:
insert into user (username,address) values (#{username},#{address});
這是最常見的需要添加 @Param 注解的場景。
第二種:方法參數(shù)要取別名,需要 @Param 注解
當需要給參數(shù)取一個別名的時候,我們也需要 @Param 注解,例如方法定義如下:
@Mapper public interface UserMapper { User getUserByUsername(@Param("name") String username); }
對應的 XML 定義如下:
老實說,這種需求不多,費事。
第三種:XML 中的 SQL 使用了 $ ,那么參數(shù)中也需要 @Param 注解
$ 會有注入漏洞的問題,但是有的時候你不得不使用 $ 符號,例如要傳入列名或者表名的時候,這個時候必須要添加 @Param 注解,例如:
@Mapper public interface UserMapper { ListgetAllUsers(@Param("order_by")String order_by); }
對應的 XML 定義如下:
前面這三種,都很容易懂,相信很多小伙伴也都懂,除了這三種常見的場景之外,還有一個特殊的場景,經(jīng)常被人忽略。
第四種,那就是動態(tài) SQL ,如果在動態(tài) SQL 中使用了參數(shù)作為變量,那么也需要 @Param 注解,即使你只有一個參數(shù)。
如果我們在動態(tài) SQL 中用到了 參數(shù)作為判斷條件,那么也是一定要加 @Param 注解的,例如如下方法:
@Mapper public interface UserMapper { ListgetUserById(@Param("id")Integer id); }
定義出來的 SQL 如下:
這種情況,即使只有一個參數(shù),也需要添加 @Param 注解,而這種情況卻經(jīng)常被人忽略!
好了,不知道大家有沒有 GET 到呢?有問題歡迎留言討論。
關注公眾號【江南一點雨】,專注于 Spring Boot+微服務以及前后端分離等全棧技術,定期視頻教程分享,關注后回復 Java ,領取松哥為你精心準備的 Java 干貨!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75555.html
摘要:前言目前的大環(huán)境下,使用作為持久層框架還是占了絕大多數(shù)的,下面我們來說一下使用的幾種姿勢。測試測試的程序與之前的一致,我們直接訪問,可以看到成功的結(jié)果姿勢三使用的姿勢和可以與上面兩種方式進行結(jié)合,。。。接口的實現(xiàn)是通過。然后我們將的改為。 前言 目前的大環(huán)境下,使用Mybatis作為持久層框架還是占了絕大多數(shù)的,下面我們來說一下使用Mybatis的幾種姿勢。 姿勢一:零配置注解開發(fā) 第...
摘要:邊界清晰,有利于理解開發(fā)測試和部署。前后端分離考慮到目前開發(fā)流行前后端分離,為了適應潮流,引入前后端分離的約束。該請求被接受處理,但是該處理是不完整的。 本文欲回答這樣一個問題:在 「特定環(huán)境 」下,如何規(guī)劃Web開發(fā)框架,使其能滿足 「期望 」? 假設我們的「特定環(huán)境 」如下: 技術層面 使用Java語言進行開發(fā) 通過Maven構(gòu)建 基于SpringBoot 使用Intelli...
摘要:前兩篇已經(jīng)構(gòu)建了標準工程實例,也整合了實現(xiàn)了簡單數(shù)據(jù)庫訪問,本篇主要更深入的學習下,實現(xiàn)較為完整的數(shù)據(jù)庫的標準服務。到這里,最復雜的數(shù)據(jù)訪問基本就算編寫完了。 前兩篇已經(jīng)構(gòu)建了RESTful API標準工程實例,也整合了MyBatis實現(xiàn)了簡單數(shù)據(jù)庫訪問,本篇主要更深入的學習下,實現(xiàn)較為完整的數(shù)據(jù)庫CRUD的標準服務。 首先看下要實現(xiàn)的效果吧,完成下面截圖部分的API,除了CRUD之外...
摘要:但是鑒于國內(nèi)市場環(huán)境而言,掌握無異于是佳的選擇,低學習成本和動態(tài)解耦的特點使得更容易被人們所接受。 SpringBoot 是為了簡化 Spring 應用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關注業(yè)務本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 MyBatis 是一款優(yōu)秀的持久層框架,它支持...
摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區(qū)分點在于工作方向的側(cè)重點不同。 [TOC] 這是一份來自嗶哩嗶哩的Java面試Java面試 32個核心必考點完全解析(完) 課程預習 1.1 課程內(nèi)容分為三個模塊 基礎模塊: 技術崗位與面試 計算機基礎 JVM原理 多線程 設計模式 數(shù)據(jù)結(jié)構(gòu)與算法 應用模塊: 常用工具集 ...
閱讀 3820·2021-10-12 10:12
閱讀 1453·2021-10-11 10:58
閱讀 2290·2021-10-09 10:01
閱讀 2597·2021-09-24 09:48
閱讀 2699·2021-09-09 11:38
閱讀 3526·2019-08-30 15:44
閱讀 1724·2019-08-30 14:22
閱讀 518·2019-08-29 12:42