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版