我用这个mybatis自带的resultMap是因为它对查询树状结构,组织架构有良好的支持而不需要去做递归或其它繁琐操作,

直接可以一步到位

进入正题

<resultMap id="Organ" type="com.pskj.GSLZ.pojo.zfzb.Organ" ><result column="OR_ID" property="OR_ID" jdbcType="VARCHAR"></result><result column="OR_NAME" property="OR_NAME" jdbcType="VARCHAR"></result><result column="PARENT_ID" property="PARENT_ID" jdbcType="VARCHAR"></result><association column="OR_ID" property="count" javaType="Integer" select="count"/><collection column="OR_ID"  property="subOrgan" ofType="Organ" javaType="java.util.ArrayList" select="selectChildren"></collection></resultMap><!--查询一级组织架构--><select id="checkList" parameterType="pd" resultMap="Organ" useCache="false">SELECT *FROM sys_organ tWHERE t.OR_ID = #{OR_ID} AND t.OR_STATE = '2'</select><!--查询下级组织架构--><select id="selectChildren" parameterType="pd" resultMap="Organ"  useCache="false">SELECT *FROM sys_organ t WHERE t.PARENT_ID = #{OR_ID} AND t.OR_STATE = '2'</select><!--统计各支队故障数量--><select id="count" parameterType="pd" resultType="Integer" useCache="false">SELECT IFNULL(sum(num),0) count from zfzb_subcheck zsk LEFT JOIN zfzb_equip_check zec on zec.EC_ID=zsk.EC_ID<where>zec.STATE='1'<!--查询下级组织所有id,这是写的一个MySQL查询函数-->and ORGAN_ID in(SELECT OR_ID from sys_organ where OR_STATE='2' and FIND_IN_SET(OR_ID,findOrgan(#{OR_ID})))</where></select>

resultMap怎么用应该不用我去具体介绍吧,百度一下你就知道,主要看<association/>,<collection/>中的select对应的查询,

还用我的parameterType="pd"中pd用的map封装的,可以把它认为一个map

当然我没展示全部,主要就是查询组织架构的树状结构及统计

 <!--统计各支队故障数量--><select id="count" parameterType="pd" resultType="Integer" useCache="false">SELECT IFNULL(sum(num),0) count from zfzb_subcheck zsk LEFT JOIN zfzb_equip_check zec on zec.EC_ID=zsk.EC_ID<where>zec.STATE='1'<!--查询下级组织所有id,这是写的一个MySQL查询函数-->and ORGAN_ID in(SELECT OR_ID from sys_organ where OR_STATE='2' and FIND_IN_SET(OR_ID,findOrgan(#{OR_ID})))<if test="OR_ID!=null and OR_ID!=''"><!-- 1--></if></where></select>

用组织id做if判断

出现了报错

<resultMap id="Organ" type="com.pskj.GSLZ.pojo.zfzb.Organ" ><result column="OR_ID" property="OR_ID" jdbcType="VARCHAR"></result><result column="OR_NAME" property="OR_NAME" jdbcType="VARCHAR"></result><result column="PARENT_ID" property="PARENT_ID" jdbcType="VARCHAR"></result><association column="{OR_ID=OR_ID}" property="count" javaType="Integer" select="count"/><collection column="OR_ID"  property="subOrgan" ofType="Organ" javaType="java.util.ArrayList" select="selectChildren"></collection></resultMap>

这里主要将association的column改成了多参数方式传递就可以正常查询了,随后我试验了OR_NAME等字段都可以正常查询,但有时候我们需要时间查询,关键字查询怎么办,

将startDate和endDate两个时间查询的参数放进去试试

<resultMap id="Organ" type="com.pskj.GSLZ.pojo.zfzb.Organ" ><result column="OR_ID" property="OR_ID" jdbcType="VARCHAR"></result><result column="OR_NAME" property="OR_NAME" jdbcType="VARCHAR"></result><result column="PARENT_ID" property="PARENT_ID" jdbcType="VARCHAR"></result><!-- 这里我想实现将时间查询的参数能够传递至统计查询里,并且每次遍历时参数的值不会改变--><association column="{OR_ID=OR_ID,startDate=startDate,endDate=endDate}" property="count" javaType="Integer" select="count"/><collection column="OR_ID"  property="subOrgan" ofType="Organ" javaType="java.util.ArrayList" select="selectChildren"></collection></resultMap>

直接报错,startDate找不到,这样一想也确实,startDate和endDate本来就不是组织实体类里的字段,换一种思路

   <resultMap id="Organ" type="com.pskj.GSLZ.pojo.zfzb.Organ" ><result column="OR_ID" property="OR_ID" jdbcType="VARCHAR"></result><result column="OR_NAME" property="OR_NAME" jdbcType="VARCHAR"></result><result column="PARENT_ID" property="PARENT_ID" jdbcType="VARCHAR"></result><!-- 这里我想实现将时间查询的参数能够传递至统计查询里,并且每次遍历时参数的值不会改变--><association column="{OR_ID=OR_ID,startDate=startDate,endDate=endDate}" property="count" javaType="Integer" select="count"/><collection column="OR_ID"  property="subOrgan" ofType="Organ" javaType="java.util.ArrayList" select="selectChildren"></collection></resultMap><!--查询一级组织架构   startDate和endDate为构造的虚拟字段--><select id="checkList" parameterType="pd" resultMap="Organ" useCache="false">SELECT OR_ID,OR_NAME,PARENT_ID,IFNULL(#{startDate},'') startDate,IFNULL(#{endDate},'') endDateFROM sys_organ tWHERE t.OR_ID = #{OR_ID} AND t.OR_STATE = '2'</select><!--查询下级组织架构   这里的startDate和endDate是接受自一级组织传来的值并一级一级往下传递--><select id="selectChildren" parameterType="pd" resultMap="Organ"  useCache="false">SELECT OR_ID,OR_NAME,PARENT_ID,IFNULL(#{startDate},'') startDate,IFNULL(#{endDate},'') endDateFROM sys_organ t WHERE t.PARENT_ID = #{OR_ID} AND t.OR_STATE = '2'</select><!--统计各支队故障数量--><select id="count" parameterType="pd" resultType="Integer" useCache="false">SELECT IFNULL(sum(num),0) count from zfzb_subcheck zsk LEFT JOIN zfzb_equip_check zec on zec.EC_ID=zsk.EC_ID<where>zec.STATE='1'<!--查询下级组织所有id,这是写的一个MySQL查询函数-->and ORGAN_ID in(SELECT OR_ID from sys_organ where OR_STATE='2' and FIND_IN_SET(OR_ID,findOrgan(#{OR_ID})))<if test="startDate!=null and startDate!=''"><!--开始时间 -->and zec.CHECK_TIME  &gt;= #{startDate}</if><if test="endDate!=null and endDate!=''"><!--结束时间-->and zec.CHECK_TIME &lt;= #{endDate}</if></where></select>

这样就可以解决resultMap中的嵌套查询多参数无法传递的问题了,当然还有许多不足的地方,如果有好的建议和方法欢迎指出

转载于:https://www.cnblogs.com/magepi/p/10382736.html

mybatis的resultMap与association等联合查询,多个参数无法传递相关推荐

  1. JavaEE——Mybatis(6)--association的分步查询与延迟加载 以及Collection和鉴别器discriminator...

    使用association进行分步查询:(一般,部门什么的会有自己的Mappper,所以直接利用就好,不用再重新自己写) 1.先按照学生id查询学生信息 2.根据查询学生信息中的grade_id值去班 ...

  2. mybatis 使用resultMap实现关联数据的查询(association 和collection )

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  3. 【MyBatis框架】高级映射-一对多查询

    前面学习了一对一的查询,现在我们在刚才的数据模型基础上进行一对多的查询. 一对多查询 1.需求 查询订单及订单明细的信息. 2.sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查 ...

  4. Mybatis联合查询

    为什么80%的码农都做不了架构师?>>>    案例 一个博客系统中,用户可以任意发表博文(Post),用户还可以对博文进行评论(Comment).于是在这个系统中,存在以下的关系: ...

  5. MyBatis框架 多表联合查询实现

    三种方式: ①业务装配 对两个表编写单表查询语句,在业务层(Serivce)把查询的两个结果进行关联 ②使用Auto Mapping特性 在实现两表联合查询时通过别名完成映射,使用Maybatis的& ...

  6. 一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。

    多表联合查询 一个根据机场查询航线的例子.有两张表,机场表包含机场信息:机场id.机场名字.机场城市. 航班包含航线信息:航班id.飞机编号.飞行时间.票价.起飞机场id.降落机场id. 需要查询的结 ...

  7. Mybatis实现联合查询(六)

    1. 疑问 在之前的章节中我们阐述了如何用Mybatis实现检查的查询,而我们实际的需求中,绝大部分查询都不只是针对单张数据表的简单查询,所以我们接下来要看一下Mybatis如何实现联合查询. 2. ...

  8. SpringBoot+MyBatis多表联合查询

    SpringBoot+MyBatis多表联合查询 写在前面 联合查询在实际工作中用的并不多,因为很多表的数据比较大,或者说未来比较大的表,都要谨慎使用联合查询 数据准备 建表语句 create tab ...

  9. mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057

    拿到表的第一时间要学会分析陌生表的数据模型: 1.学习单表记录了什么东西(去学习理解需求) 2.学习单表重要字段的意义(优先学习不能为空的字段) 3.学习表与表之间的关系(一对一.一对多.多对多)通过 ...

  10. 使用mybatis的resultMap进行复杂查询

    记录下mybatis的集合查询中碰到的问题 https://jaychang.iteye.com/blog/2357143 MyBatis ofType和javaType区别 https://blog ...

最新文章

  1. Python中输出字体的颜色设置
  2. dve 二维数组信号 显示波形_函数任意波形发生器价格
  3. Qt Creator 4.9 发布
  4. php面试专题---6、正则表达式考点
  5. @ 添加属性(属性注入)
  6. html 上标下标 特殊字符等
  7. 深度学习---之显存单位,KiB,MiB与MB区别
  8. 迪尼斯神奇英语全32集含教材
  9. mysql数据库输出数据语法错误_MySQL数据库定义存储过程总是报语法错误的解决方法...
  10. 设置Windows 10 开机默认开启NUMLOCK
  11. python利用装饰器进行运行耗时分析
  12. Ucenter通信失败(终极解决)
  13. 【OpenCV学习】 《OpenCV3编程入门》--毛星云 01 邂逅OpenCV(OpenCV基本概念与基本架构) ROS系统上的运用(python实现)
  14. UML设计系列(6):活动图
  15. CDLinux U盘制作教程
  16. 家庭内两家计算机怎样共享,如何设置局域网多台计算机共享文件
  17. 将网站添加到桌面的方法
  18. 基于ssm企业销售人员培训系统
  19. (WDM)波分复用的总结
  20. 【论文译文】FasterRCNN

热门文章

  1. 发掘 iGoogle
  2. php对接微博热搜,基于PHP爬虫的微博热搜实时监控平台
  3. vue中组件的父子关系
  4. 未来人工智能发展趋势
  5. 25匹赛马得前三名问题求解
  6. Django重置管理后台模板
  7. UEFI开发探索50 – UEFI与网络2
  8. 音频处理——常用音频编码格式简介(PCM、G726、ADPCM、LPCM、G711、AAC)
  9. python怎么写阶乘_python阶乘怎么写
  10. oracle数据文件大小