记一次mybatis关联映射之两条sql映射到一个resultMap中「建议收藏」

记一次mybatis关联映射之两条sql映射到一个resultMap中「建议收藏」目标:在一个查询结果中嵌入另一个Sql的结果集ArrayList。用第一条Sql的结果集中的某些字段值为参数传给第二条Sql(其实是传给第二条Sql的Dao接口,传的参数要对应Dao接口中的形参)第一条SQL<selectid=”elsQueryAll”resultMap=”CompanyResultMapDto”>SELECTid,…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目标:在一个查询结果中嵌入另一个Sql的结果集ArrayList。用第一条Sql的结果集中的某些字段值为参数传给第二条Sql(其实是传给第二条Sql的Dao接口,传的参数要对应Dao接口中的形参)


第一条SQL

<select id="elsQueryAll" resultMap="CompanyResultMapDto">
    SELECT
        id,
        comp_name,
        comp_area_id,
        (select complete_path from rz_area where id = comp_area_id) as comp_area_name ,
        comp_area_info,
        create_time,
        update_time,
        conn_user_name,
        conn_user_tel,
        data_type,
        balance,
        frozen_balance,
        STATUS,
        delete_flag,
        business_license,
        cs_phone
        main_products,
        lat_x,
        lng_y,
        'sys_company' as target_table
    FROM
	    sys_company
	limit #{start},#{rows}
    </select>

第一条SQL的映射

<resultMap id="CompanyResultMapDto" type="com.rz.dto.RzCompanyDto">
        <id column="id" jdbcType="BIGINT" property="id" />
        <result column="comp_name" jdbcType="VARCHAR" property="compName" />
        <result column="comp_area_id" jdbcType="VARCHAR" property="compAreaId" />
        <result column="comp_area_name" jdbcType="VARCHAR" property="compAreaName" />
        <result column="comp_area_info" jdbcType="VARCHAR" property="compAreaInfo" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
        <result column="conn_user_name" jdbcType="VARCHAR" property="connUserName" />
        <result column="conn_user_tel" jdbcType="VARCHAR" property="connUserTel" />
        <result column="data_type" jdbcType="CHAR" property="dataType" />
        <result column="balance" jdbcType="DECIMAL" property="balance" />
        <result column="frozen_balance" jdbcType="DECIMAL" property="frozenBalance" />
        <result column="status" jdbcType="CHAR" property="status" />
        <result column="delete_flag" jdbcType="CHAR" property="deleteFlag" />
        <result column="business_license" jdbcType="BIGINT" property="businessLicense" />
        <result column="cs_phone" jdbcType="VARCHAR" property="csPhone" />
        <result column="main_products" jdbcType="VARCHAR" property="mainProducts" />
        <result column="lat_x" jdbcType="VARCHAR" property="latX" />
        <result column="lng_y" jdbcType="VARCHAR" property="lngY" />
        <result column="targetTable" jdbcType="VARCHAR" property="target_table" />
        <collection property="pictures" select="com.rz.dao.RzPicInfoMapper.selectByTargetTableAndTableId" fetchType="eager" column="{targetTable=target_table,tableId=id}"></collection>
    </resultMap>

第二条SQL及Dao

<select id="selectByTargetTableAndTableId" resultType="com.rz.domain.RzPicInfo">
      select * from rz_pic_info where target_table=#{targetTable} and table_id=#{tableId}
    </select>
/**
     * 该方法已经作为SysCompanyMapper中的联合查询(使用方式参考模板),删除请谨慎
     * @param targetTable
     * @param tableId
     * @return
     */
    List<RzPicInfo> selectByTargetTableAndTableId(@Param("targetTable") String targetTable, @Param("tableId") Long tableId);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189634.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python句柄是什么意思_python窗口句柄

    python句柄是什么意思_python窗口句柄文件句柄的实例:通过句柄定位未见读取的起始位置以及大文件的分块读取为了使用读文件函数,需要使用相对于PHP脚本的路径为他们指出要读取的文件,然而,大多数PHP的文件函数使用一种稍有区别的机制访问文件,这种机制与连接数据库的机制非常相似,该过程使用fopen()函数进行“连接”,使用fclose函数“断开连接”。fopen函数的返回值是一个PHP文件指针,也被称为文件句柄,一旦拥有了文件句柄…

    2022年8月31日
  • Java基本开发环境搭建

    Java基本开发环境搭建

    2021年12月2日
  • 什么是mvc设计模式它有什么优点_简单介绍mvc设计模式

    什么是mvc设计模式它有什么优点_简单介绍mvc设计模式什么是MVC设计模式

    2022年11月3日
  • String与StringBuffer的区别

    String与StringBuffer的区别String与StringBuffer的区别简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。String:在String类中没有用来改变已有字

    2022年9月21日
  • 菜鸟看源码之ArrayDeque

    菜鸟看源码之ArrayDeque先扯点别的:今天上海风不小,现在窗外依然是狂风呜咽,不禁让人想起山科的风。今天分析一下ArrayDeque的源码ArrayDeque的继承关系图ArrayDeque实现了Deque接口,内部使用一个可调整大小的数组来存放元素。数组没有容量限制,必要的时候数组的容量会增加。ArrayDeque不是线程安全的。不允许添加Null元素。当ArrayDeque作为一个栈来使用的时候,Ar…

    2022年9月19日
  • linux视频教程哪个最好_最好的Linux教程[通俗易懂]

    linux视频教程哪个最好_最好的Linux教程[通俗易懂]linux视频教程哪个最好Linuxisanamewhichbroadlydenotesafamilyoffreeandopen-sourcesoftwareoperatingsystemdistributionsbuiltaroundtheLinuxkernel.Linux的名称广泛地表示围绕Linux内核构建的一系列免费和开源软件操作系统发行版。…

    2022年6月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号