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