MyBatis在Mapper中傳遞多個參數(shù)的四種方法詳解
1、若Dao層函數(shù)有多個參數(shù),那么其對應的xml中,#{0}
代表接收的是Dao層中的第一個參數(shù),#{1}
代表Dao中的第二個參數(shù),以此類推。
假設Dao層函數(shù)有兩個參數(shù),分別是int類型的id和String類型的name:
// Dao層函數(shù) public User getUserByIdAndName(int id, String name); <!--對應的Mapper中--> <select id="getUserByIdAndName" resultType="User"> SELECT * FROM user WHERE id = #{0} AND name = #{1} </select>
2、使用@Param注解,在Dao層函數(shù)的參數(shù)前面添加@Param注解來顯式指定每個參數(shù)的名稱,例如:
// Dao層函數(shù) public User getUserByIdAndName(@Param("id") int id, @Param("name") String name); <!-- 對應的Mapper中 --> <select id="getUserByIdAndName" resultType="User"> SELECT * FROM user WHERE id = #{id} AND name = #{name} </select>
3、將多個參數(shù)封裝成Map并傳遞到Mapper中,例如:
// Dao層函數(shù) public User getUser(Map<String, Object> map); <!-- 對應的Mapper中 --> <select id="getUser" resultType="User"> SELECT * FROM user WHERE id = #{id} AND name = #{name} </select>
調(diào)用該函數(shù)時需要將參數(shù)封裝成Map并設置key值為"id"和"name",例如:
Map<String, Object> map = new HashMap<>(); map.put("id", 1); map.put("name", "張三"); User user = userDao.getUser(map);
4、如果Dao層函數(shù)傳遞的是一個對象,該對象包含多個參數(shù),MyBatis會將該對象看做是一個參數(shù),并且會自動地將對象中的屬性值映射到Mapper中的SQL語句中。
以查詢用戶信息為例,假設我們有一個User類,包含id、name和age三個屬性:
public class User { private int id; private String name; private int age; // 省略getter和setter方法 }
在Dao層函數(shù)中,我們可以直接傳入一個User對象作為參數(shù):
public User getUser(User user);
在Mapper.xml文件中,可以使用類似以下的SQL語句:
<select id="getUser" resultType="com.example.User"> SELECT * FROM user WHERE id = #{id} AND name = #{name} AND age = #{age} </select>
在執(zhí)行Dao層函數(shù)時,MyBatis會自動地根據(jù)user對象中的屬性值,將#{id}、#{name}和#{age}替換為對應的屬性值。例如:
User user = new User(); user.setId(1); user.setName("張三"); user.setAge(20); User result = userDao.getUser(user);
在執(zhí)行上述代碼時,MyBatis會將Mapper.xml中的SQL語句解析成如下形式:
SELECT * FROM user WHERE id = 1 AND name = '張三' AND age = 20
然后執(zhí)行該SQL語句,并將結(jié)果映射成User對象返回。
具體實現(xiàn)原理是通過MyBatis的OGNL表達式(Object-Graph Navigation Language,即對象圖導航語言)實現(xiàn)的。當我們在Mapper.xml文件中使用#{propertyName}時,MyBatis會使用OGNL表達式解析該表達式,找到對應的屬性值,并將其替換到SQL語句中。
例如,在上述例子中,當我們使用#{id}、#{name}和#{age}時,MyBatis會使用OGNL表達式從Map中獲取key分別為"id"、"name"和"age"的value,也就是user對象中的id、name和age屬性值。
到此這篇關(guān)于MyBatis在Mapper中傳遞多個參數(shù)的四種方法詳解的文章就介紹到這了,更多相關(guān)MyBatis Mapper傳遞多個參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis之mapper接口多參數(shù)方式
- Mybatis往Mapper.xml文件中傳遞多個參數(shù)問題
- 一文搞懂Mybatis中Mapper配置文件獲取參數(shù)的五種方式
- MyBatis在mapper中傳遞參數(shù)的四種方式
- Mybatis中關(guān)于自定義mapper.xml時,參數(shù)傳遞的方式及寫法
- Mybatis?Mapper中多參數(shù)方法不使用@param注解報錯的解決
- mybatis?mapper.xml?注釋帶參數(shù)的坑及解決
- MyBatis Mapper接受參數(shù)的四種方式代碼解析
- 解決Mybatis?mappe同時傳遞?List?和其他參數(shù)報錯的問題
相關(guān)文章
解析Java和Eclipse中加載本地庫(.dll文件)的詳細說明
本篇文章是對Java和Eclipse中加載本地庫(.dll文件)進行了詳細的分析介紹,需要的朋友參考下2013-05-05基于Java實現(xiàn)動態(tài)切換ubuntu壁紙功能
這篇文章主要為大家詳細介紹了如何使用 Java 在 Ubuntu Linux 系統(tǒng)中實現(xiàn)自動切換壁紙的示例程序,感興趣的小伙伴可以跟隨小編一起學習一下2024-11-11java算法題解??虰M99順時針旋轉(zhuǎn)矩陣示例
這篇文章主要為大家介紹了java算法題解??虰M99順時針旋轉(zhuǎn)矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01深入理解Java虛擬機 JVM 內(nèi)存結(jié)構(gòu)
本節(jié)將會介紹一下JVM的內(nèi)存結(jié)構(gòu),JVM運行時數(shù)據(jù)區(qū)的各個組成部分:堆,方法區(qū),程序計數(shù)器,Java虛擬機棧,本地方法棧,還會對Java堆的分代劃分做個簡單的介紹2021-09-09