淺談為什么要使用mybatis的@param
起因
我們先來看一個(gè)報(bào)錯(cuò)
報(bào)錯(cuò)很簡單,參數(shù) start 沒找到。
我是在實(shí)現(xiàn)一個(gè) API 接口時(shí)發(fā)現(xiàn)了一個(gè)問題,當(dāng)我不使用 @Param 標(biāo)簽時(shí),mybatis 是不認(rèn)識(shí)哪個(gè)參數(shù)叫什么名字的,盡管我定義了 (long start,long end) 它仍然不認(rèn)識(shí)。在這個(gè)接口上,我希望根據(jù)前端傳來的參數(shù),查找指定范圍的數(shù)據(jù),例如:我想搜索第二頁的數(shù)據(jù),假設(shè)一頁20個(gè),那么搜索的范圍就是21-40,于是就會(huì)調(diào)用接口中的 getTypeListByRange 來查找對(duì)應(yīng) mapper 的 SQL 語句。
public interface TypeDao { Type getTypeByid(long id); List<Type> getTypeListAll(); List<Type> getTypeListByRange(long start,long end); }
解釋 @Param
org.apache.ibatis.annotations.Param 當(dāng)映射器方法需要多個(gè)參數(shù)時(shí),這個(gè)注解可以被用于:給映射器方法中的每個(gè)參數(shù)來取一個(gè)名字。否則,多參數(shù)將會(huì)以它們的順序位置和SQL語句中的表達(dá)式進(jìn)行映射,這是默認(rèn)的。
語法要求:若使用@Param(“id”),則SQL中參數(shù)應(yīng)該被命名為:#{id}。
使用
Dao 層
import org.apache.ibatis.annotations.Param; import com.caeser.upmovie.entity.Type; public interface TypeDao { Type getTypeByid(long id); List<Type> getTypeListAll(); List<Type> getTypeListByRange(@Param("start")long start,@Param("end")long end); }
Mapper
<select id="getTypeListByRange" resultType="com.caeser.upmovie.entity.Type"> SELECT ID, NAME, CREATE_TIME, UPDATE_TIME FROM upm_type LIMIT #{start},#{end}; </select>
單元測(cè)試
public class TypeTest extends BaseTest{ @Autowired private TypeDao typeDao; @Test public void testDao(){ List<Type> typeList1=typeDao.getTypeListByRange(1, 4); for(int i=0;i<typeList1.size();i++){ System.out.println(typeList1.get(i).getName()); } } }
結(jié)果
總結(jié)
當(dāng) Dao 層傳遞參數(shù)為多個(gè)參數(shù)時(shí),為了規(guī)范,必須使用 @Param 給參數(shù)命名。這里需要注意,使用的是 mybatis 的 param 來命名。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法
這篇文章主要介紹了三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Java獲取本機(jī)IP地址的方法代碼示例(內(nèi)網(wǎng)、公網(wǎng))
在IT領(lǐng)域獲取本機(jī)IP地址是一項(xiàng)基礎(chǔ)但重要的任務(wù),特別是在網(wǎng)絡(luò)編程、遠(yuǎn)程協(xié)作和設(shè)備通信中,這篇文章主要給大家介紹了關(guān)于Java獲取本機(jī)IP地址的方法(內(nèi)網(wǎng)、公網(wǎng)),需要的朋友可以參考下2024-07-07SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)
這篇文章主要介紹了SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04深入學(xué)習(xí)java并發(fā)包ConcurrentHashMap源碼
這篇文章主要介紹了深入學(xué)習(xí)java并發(fā)包ConcurrentHashMap源碼,整個(gè) ConcurrentHashMap 由一個(gè)個(gè) Segment 組成,Segment 代表”部分“或”一段“的意思,所以很多地方都會(huì)將其描述為分段鎖。,需要的朋友可以參考下2019-06-06SpringBoot加載不出來application.yml文件的解決方法
這篇文章主要介紹了SpringBoot加載不出來application.yml文件的解決方法,文中通過示例代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作有一定的幫助,需要的朋友跟著小編來一起來學(xué)習(xí)吧2023-12-12詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐
在 Web 開發(fā)中, 我們經(jīng)常會(huì)需要處理各種異常,這篇文章主要介紹了詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01java ssm框架的controller實(shí)現(xiàn)向頁面?zhèn)鬟f參數(shù)
這篇文章主要介紹了java ssm框架的controller實(shí)現(xiàn)向頁面?zhèn)鬟f參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05