在${}中为甚么采用@Param及多参数查询@Param
在${}中為甚么采用@Param
?
多參數(shù)查詢@Param
- 引入
1、SqlSession中的insert/update/delete/selectOne/selectList方法只能至多傳入一個(gè)參數(shù);
2、如果要在MyBatis中,傳入多個(gè)參數(shù),要么把參數(shù)封裝到JavaBean對(duì)象要么封裝到Map中,在xml的SQL中,對(duì)應(yīng)#{}里面引用的就是Map里面的key;
3、MyBatis在#{}中參數(shù)流程:
?????1.會(huì)去參數(shù)對(duì)象中,按照屬性或者M(jìn)ap的key去查詢;
?????2.如果找不到,嘗試直接把方法的實(shí)際參數(shù)作為查詢參數(shù)值;
4、如果一定要在Mapper接口上的一個(gè)方法中添加多個(gè)參數(shù),就一定要在每個(gè)參數(shù)前使用@Param標(biāo)簽;
User login(@Param("name")String name,@Param("password")String password);
?? 原理:Mybatis在處理這些Mapper方法的時(shí)候,會(huì)自動(dòng)的把這些參數(shù)包裝成一個(gè)Map對(duì)象,@Param中的value就會(huì)作為這個(gè)Map的key,對(duì)應(yīng)的參數(shù)值,就會(huì)作為這個(gè)Key的value;
?
設(shè)計(jì)查詢用戶的方法,根據(jù)用戶名和薪水查詢滿足條件的用戶
?
select id,name,salary from t_user where name = #{name} and salary = #{salary}
?
因?yàn)?Mapper 中select 標(biāo)簽只能接受一個(gè)參數(shù), 無法同時(shí)接受 name 跟salary
?
將name 跟salary包裝成一個(gè)user對(duì)象,問題就解決了.
?
| //List<User> findUserByNameAndSalary(@Param("name") String name, @Param("salary") BigDecimal salary); |
| <select id="findUserByNameAndSalary" resultType="user"> ? |
| @Test ? |
?
參數(shù)較少時(shí)推薦使用@Param,參數(shù)較多時(shí)可以分裝成實(shí)體對(duì)象或者map
?
總結(jié)
以上是生活随笔為你收集整理的在${}中为甚么采用@Param及多参数查询@Param的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis----#与$区别
- 下一篇: Maven中scope依赖范围和依赖的传