问题描述

假设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列每个值传递给子查询进行一对多查询

官方文档

property description
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

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

  1. MyBatis——@Result注解column参数传递多个参数

    问题描述 @Result注解column参数传递多个参数. 官方文档 property description column 数据库的列名或者列标签别名.与传递给resultSet.getString ...

  2. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  3. mySQL学习记录(局域网连接/基础查询/条件查询/常见函数/窗口函数/表连接/子查询/插修删建表)

    一些基础概念 DB 数据库 存储数据的容器 DBMS 数据库管理系统 又称数据库软件.产品如mysql/oracle/db2/sqlserver SQL 结构化查询语言 是所有的DBMS都使用的一种D ...

  4. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  5. 查询子串_SQL视图、子查询和常见函数的应用

    一.视图 含义:虚拟表,和普通表一样使用,通过表动态生成的数据. 创建语法的关键字 是否实际占用物理空间 使用 视图 CREATE VIEW 没有(只保存了SQL逻辑) 增删改查,一般不能增删改 表 ...

  6. eclipse列名无效_【转】sql使用In语句查询出所有,但子查询列名无效

    本文转自http://www.ddvip.com/tech/100019101.html 原文题目:关于sql语句in的使用注意规则 今天使用sql时候发现一个问题,使用IN查询时,查出主表所有的数据 ...

  7. oracle模糊查询中的regexp_like嵌套子查询用法

    oracle模糊查询中的regexp_like嵌套子查询用法 regexp_like一般用于模糊查询某一列时包含多个查询条件 需求1:在用户表中查询出账号包含650000和230000的用户. sel ...

  8. mysql子查询字符串位置_MySql基础-子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询用()括起来 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任 ...

  9. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

最新文章

  1. mybaits十三:使用collection分布查询
  2. python123第九周测验答案2020_运用python123平台助力编程课教学
  3. 原码、反码、补码的产生、应用以及优缺点有哪些?
  4. omwin密立根油滴实验数据处理程序_大物实验报告更新啦~
  5. Java queue总结
  6. 生产者消费者的实际使用
  7. CANOpen紧急报文
  8. 学习web标准、用户体验改善、Ajaxamp;Asp.Net
  9. jQuery选择器,用逗号分隔的时候需要注意范围问题
  10. 支付宝 RSA和RSA2签名算法区别
  11. 四脚贴片晶振的引脚区分
  12. 使用螺旋桨PaddleHelix完成RNA结构预测竞赛的前置基础知识整理
  13. 归并排序-自底向上的归并排序算法
  14. 重启Usb蓝牙设备(PD虚拟机模拟插拔)
  15. 中科院生物信息学题目整理
  16. 益聚星荣:一文看懂,为什么有的投资人讨厌元宇宙,有的却爱死它了
  17. power shell 命令 动词 大全 再也不用死记硬背命令
  18. 分门别类刷leetcode——栈、队列、堆(C++实现)
  19. php微信一次性订阅消息demo,微信一次性订阅消息
  20. Cmake传入项目版本号

热门文章

  1. tcpdump 识别成dns_dns tcpdump
  2. php输出股票价格代码,实时抓取YAHOO股票报价的php代码_PHP教程 - strrpos
  3. html樱花飘落代码_爱心飘落特效
  4. python re match groups_【原创】如何治疗使用python中re模块group、groups与findall分组匹配后产生的“眩晕反应”...
  5. java 气泡 提示插件_Java气泡提示功能实现
  6. python tablewidget 颜色_【整理】PyQt如何修改QTableView中表格颜色即如何修改QModelIndex颜色 | 勤奋的小青蛙...
  7. linux是基于什么的软件模式进行发布的,《Linux操作系统与应用项目教程》习题.doc...
  8. go在方法中修改结构体的值_golang修改结构体中的切片值方法
  9. python sql注入脚本_python打造一个分析网站SQL注入的脚本
  10. centos7开发java体验_centos7之Java开发环境构建