日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询

發布時間:2024/10/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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列每個值傳遞給子查詢進行一對多查詢

官方文檔

propertydescription
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查詢其購物車(商家->商品 一對多查詢)* @param consumerId 顧客id* @return 購物車商品列表*/@Select("select distinct saler.id,saler.shopname,#{consumerId} as consumerId from shoppingcart \n" +"join saler on saler.id = shoppingcart.salerId")@Results(@Result(property = "goods",column = "{salerId = id,consumerId = consumerId}",many = @Many(select = "cn.datacharm.springbootvuecli.dao.CartMapper.findGoodsBySalerId")))List<Shop> findCartById(Integer consumerId);@Select("select \n" +"sid,consumerId,productName,price,photo,\n" +"shoppingcart.salerId,\n" +"shoppingcart.productId,\n" +"shoppingcart.amount\n" +"from shoppingcart\n" +"join saler_inventory on shoppingcart.salerId = saler_inventory.salerId\n" +"and shoppingcart.productId = saler_inventory.productId\n" +"where shoppingcart.salerId = #{salerId}\n"+"and consumerId = #{consumerId}" )List<Goods> findGoodsBySalerId(Integer salerId,Integer consumerId); @Result中column = "{salerId = id,consumerId = consumerId}"

表示把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参数传递——父查询函数的参数传递到子查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。