博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis基于注解的one-to-one, one-to-many联合查询,传参及传多个参数的办法
阅读量:7011 次
发布时间:2019-06-28

本文共 5445 字,大约阅读时间需要 18 分钟。

hot3.png

Mybatis文档里的关联查询是这样的:

@Results(id = "requirementResult", value = {@Result(column="uuid",property="uuid", id = true),@Result(column="uuid",property="bids", many = @Many(select = "com.xxx.BidMapper.selectByRequirementUuid")),@Result(column="uuid",property="attachments", many = @Many(select = "com.xxx.RequirementAttachmentMapper.selectByRequirement")),@Result(column="name_of_requirement",property="name_of_requirement"),@Result(column="cat_of_requirement",property="cat_of_requirement"),@Result(column="statement_of_material",property="statement_of_material"),@Result(column="statement_of_processing",property="statement_of_processing"),@Result(column="estimate_price",property="estimate_price"),@Result(column="commission_type",property="commission_type"),@Result(column="commission_price",property="commission_price"),@Result(column="include_transfee",property="include_transfee"),@Result(column="reception_address",property="reception_address"),@Result(column="ton_of_requirement",property="ton_of_requirement"),@Result(column="statement_of_package",property="statement_of_package"),@Result(column="other_statement",property="other_statement"),@Result(column="create_time",property="create_time"),@Result(column="create_by",property="create_by"),@Result(column="modify_time",property="modify_time"),@Result(column="modify_by",property="modify_by"),@Result(column="is_delete",property="is_delete")})@Select("select uuid, name_of_requirement, cat_of_requirement, statement_of_material, statement_of_processing, estimate_price, commission_type, commission_price, include_transfee, reception_address, ton_of_requirement, statement_of_package, other_statement, create_time, create_by, modify_time, modify_by, is_delete" +" from ft_requirement where is_delete='N'" +" order by create_time desc")List
selectRequirements();//BidMapper里的方法@Select("select uuid,requirement_uuid,bid,statement_of_commodity,create_time,create_by,modify_time,modify_by,is_delete " + " from ft_bid where requirement_uuid=#{value} and is_delete='N'")List
selectByRequirementUuid(String requirementUuid);//RequirementAttachmentMapper里的方法@Select("select uuid,requirement_uuid,file_path,create_time,create_by,is_delete from ft_requirement_attachment " + " where requirement_uuid=#{value} and is_delete='N'")List
selectByRequirement(String requirementUuid);

非常简单,在执行的时候,会对每个查询方法都执行一次,例如,selectRequirements() 执行生成了2个结果,selectByRequirementUuid()执行两次,selectByRequirement执行两次,总共执行了5次查询。

这个例子中,关联查询都是只有一个参数,所以很简单。如果关联查询要传入多个参数怎么办?看下面的例子:

@Results(id = "requirementResult", value = {@Result(column="uuid",property="uuid", id = true),@Result(column="uuid",property="bids", many = @Many(select = "com.xxx.BidMapper.selectByRequirementUuid")),@Result(column="requirement=uuid, creator=myUuid",property="attachments", many = @Many(select = "com.xxx.RequirementAttachmentMapper.selectByRequirementAndCreator")),@Result(column="name_of_requirement",property="name_of_requirement"),@Result(column="cat_of_requirement",property="cat_of_requirement"),@Result(column="statement_of_material",property="statement_of_material"),@Result(column="statement_of_processing",property="statement_of_processing"),@Result(column="estimate_price",property="estimate_price"),@Result(column="commission_type",property="commission_type"),@Result(column="commission_price",property="commission_price"),@Result(column="include_transfee",property="include_transfee"),@Result(column="reception_address",property="reception_address"),@Result(column="ton_of_requirement",property="ton_of_requirement"),@Result(column="statement_of_package",property="statement_of_package"),@Result(column="other_statement",property="other_statement"),@Result(column="create_time",property="create_time"),@Result(column="create_by",property="create_by"),@Result(column="modify_time",property="modify_time"),@Result(column="modify_by",property="modify_by"),@Result(column="is_delete",property="is_delete")})@Select("select uuid, #{myUuid} as myUuid, name_of_requirement, cat_of_requirement, statement_of_material, statement_of_processing, estimate_price, commission_type, commission_price, include_transfee, reception_address, ton_of_requirement, statement_of_package, other_statement, create_time, create_by, modify_time, modify_by, is_delete" +" from ft_requirement where is_delete='N' and uuid=#{requirementUuid} " +" order by create_time desc")RequirementObj selectRequirement(@Param("requirement") String requirementUuid, @Param("myUuid") String myUuid);//BidMapper里的方法@Select("select uuid,requirement_uuid,bid,statement_of_commodity,create_time,create_by,modify_time,modify_by,is_delete " +            " from ft_bid where requirement_uuid=#{value} and is_delete='N'")List
selectByRequirementUuid(String requirementUuid);//RequirementAttachmentMapper里的方法@Select("select uuid,requirement_uuid,file_path,create_time,create_by,is_delete from ft_requirement_attachment " + " where requirement_uuid=#{requirement} and create_by=#{creator} and is_delete='N'")List
selectByRequirementAndCreator(@Param("requirement") String requirementUuid, @Param("creator") String creator);

这里要注意的几个点:

  • 子查询使用的参数,只能从父查询的结果集中取
  • 要传入联合查询的参数,在column中声明:column="requirement=uuid, creator=myUuid"
  • 子查询要使用调用方传入的参数,需要将调用方传入的参数放入到父查询的结果集中: select uuid, #{myUuid} as myUuid, name_of_requirement ....

仅此而已

转载于:https://my.oschina.net/ez8life/blog/2998835

你可能感兴趣的文章
PHP安全编程:register_globals的安全性 全局变量注册(转)
查看>>
SQL批处理与事务控制
查看>>
POJ - 2391 最大流
查看>>
WCF学习资料汇总
查看>>
15-Flutter移动电商实战-商品推荐区域制作
查看>>
LeetCode-Best Time to Buy and Sell Stock I&&II
查看>>
Java compiler level does not match解决方法(转)
查看>>
ROS初级教程 cmake cmakelist.txt 的编写教程
查看>>
Comparing Inline and Multi-Statement Table valued UDFs
查看>>
python 机器学习
查看>>
php如何控制客户端生成缓存
查看>>
不错的在线印章生成器网站
查看>>
Arduino控制LCD显示helloworld
查看>>
线程、任务和同步学习笔记(一)
查看>>
JavaScript this
查看>>
OpenJudge/Poj 1163 The Triangle
查看>>
POJ 3130 半平面交+模版改进
查看>>
Python基础二
查看>>
AndroidStudio -- AndroidStuido中找不到cache.properties文件
查看>>
nginx 无法访问root权限的文件内容
查看>>