MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询
問題描述
假設a方法中傳入一個帶查詢參數x
但是a方法的查詢結果中不包含參數x
而子查詢里也需要參數x
如何在子查詢b中帶入參數x
/*** 按User表中platform查詢User*/@Select("select * from user where pid = #{id}")List<User> findUsers(int id);/*** 一對多查詢*/@Select("select * from platform where 1 = 1")@Results({/*@Result(property = "id" , column = "id"),*/@Result(property = "users",/*javaType = List.class,*///對platform表中id屬性進行一對多查詢column = "id",many = @Many(select = "mybatis.mapper.HelloMapper.findUsers"))})List<Platform> getPlatforms();- findUsers需要傳入一個參數 -> 即使用platform表中id 可自動帶入進行一對多查詢
- @Result中column = "id"
- 表示把父查詢中id列每個值傳遞給子查詢進行一對多查詢
官方文檔
| column | 數據庫的列名或者列標簽別名。與傳遞給resultSet.getString(columnName)的參數名稱相同。注意: 在處理組合鍵時,您可以使用column=“{prop1=col1,prop2=col2}”這樣的語法,設置多個列名傳入到嵌套查詢語句。這就會把prop1和prop2設置到目標嵌套選擇語句的參數對象中。 |
問題分析
根據官方文檔,column是從resultSet獲取,所以無法直接獲取父函數的參數
可以把所需參數放進SQL查詢中保存起來,并取一個別名。
解決方案
表 shoppingcart :購物車 主要包含商家id字段,商品id及信息,顧客id等等
為了某個顧客顯示先購物車中商家,再顯示商家中商品,需要傳入一個顧客id
查詢商家需要顧客id作為查詢條件,查詢商品需要商家id和顧客id兩個條件
如果按以上的方法,(商家表中沒有顧客id)無法傳遞顧客參數
(假設僅傳遞一個商家id參數的話,子查詢兩個參數都會被設定為商家id值進行查詢)
思路:把顧客id放進查詢中保存起來,并給他取一個別名
這樣之后,顧客id即可傳遞給子查詢
?
表示把id列和consumerId列取出
id列值使用salerId,consumerId列使用consumerId 表示(類似別名,對應子查詢參數)
然后以這兩個參數進行子查詢
參考文章
https://blog.csdn.net/weixin_43297055/article/details/93635950
https://blog.csdn.net/weixin_43272781/article/details/106439505
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis——@Result注解co
- 下一篇: 《IBM-PC汇编语言程序设计》(第2版