Mybatis一对多传递多个参数和自定义参数

news/2024/12/5 7:07:55/

问题:

假设a方法中传入一个带查询参数x,而子查询里也要这个参数
如何在子查询b中带入这个参数

一般一对多查询方式:

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

解决方案

  • 表 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 \n" +"where consumerId = #{consumerId}")@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 表示(类似别名,对应子查询参数)
  • 然后以这两个参数进行子查询

http://www.ppmy.cn/news/398711.html

相关文章

NestJs 管道(Pipe)

&#x1f384;Hi~ 大家好&#xff0c;我是小鑫同学&#xff0c;资深 IT 从业者&#xff0c;InfoQ 的签约作者&#xff0c;擅长前端开发并在这一领域有多年的经验&#xff0c;致力于分享我在技术方面的见解和心得 &#x1f680;技术&代码分享 我在 94Code 总结技术学习&…

windows编译ffmpeg,并开启png的编解码器

废话不多说了&#xff0c;先上下载链接 ffmpeg官方网站&#xff1a;http://ffmpeg.org/download.html ffmpeg源码下载链接:https://ffmpeg.org/releases/ffmpeg-3.4.13.tar.gz 如果需要其他版本&#xff0c;修改版本号即可&#xff0c;适用于3.4全系列&#xff0c;如https:/…

【监控】Zabbix:企业级开源监控解决方案

文章目录 一、zabbix的基本概述二、zabbix的构成三、zabbix的监控对象四、zabbix的常用术语五、zabbix的工作流程六、zabbix进程详解七、zabbix的监控框架7.1 三种架构模式的架构图如下&#xff1a;7.2 每个模块的工作职责&#xff1a; 八、zabbix源码安装及部署一、服务端安装…

eval函数的定义为:eval(source, globals=None, locals=None, /)

eval() 函数用于执行一个字符串表达式&#xff0c;并返回表达式的值。 参数说明&#xff1a; - source&#xff1a;必需&#xff0c;要被计算的表达式字符串。 - globals&#xff1a;可选&#xff0c;全局命名空间&#xff0c;如果被提供&#xff0c;则必须是一个字典对象。 …

算法课设 戳气球问题实验报告 动态规划

戳气球实验报告 目录 一、题目 二、分析原问题并做调整 三、分析子问题及其递推关系 四、确定dp数组的计算顺序 五、复杂度分析 六、具体实现代码 七、填表示例寻找最优解和最优方案 八、总结 九、致谢 一、题目 有n个气球&#xff0c;编号为0到n-1&#xff0c;每个…

闲聊下最近哦

随便聊聊 聊聊最近工作或日常上一家公司一直比较忙,人也比较懒,一直没有写博客,最近换了下工作,争取坚持写博客吧 聊聊最近工作或日常 上一家公司一直比较忙,人也比较懒,一直没有写博客,最近换了下工作,争取坚持写博客吧 上家公司做了几年多了,上半年离职换了个工作,现阶段这…

pycocotools报错,NameError: name ‘unicode’ is not defined

在深度学习训练过程中的评估阶段使用pycocotools时出现错误&#xff1a; if type(resFile) str or type(resFile) unicode: NameError: name ‘unicode’ is not defined 据网上说应该是python2和3版本的问题&#xff0c;Python2 的unicode函数在 Python3 中不再使用。 解决方…

我来侃手机--连载一之开篇就论N73

最近这一段时间以来&#xff0c;我一直在关注手机方面的资讯&#xff0c;从性能、参数、行情等各个方面深入了解&#xff0c;从一开始的孤陋寡闻&#xff0c;到现在也是半个行家了&#xff0c;当然毕竟是业余选手&#xff0c;还不能和各大网站靠写手机评测文章混饭的大哥相提并…