mybatis中对resultMap 做嵌套查询 多参数查询

本文详细介绍 MyBatis 中 resultMap 的使用方法,包括如何映射复杂对象、集合及关联查询等高级特性。通过具体示例,展示如何实现组织架构查询和个人趋势分析等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<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 t
        WHERE 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 type="PersonalTrends" id="PersonalTrendsResult">
        <result property="id" column="id"/>
        <result property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="buidingId" column="buiding_id"/>
        <result property="buidingName" column="buiding_name"/>
        <result property="trends" column="trends"/>
        <result property="likeNum" column="like_num"/>
        <result property="creatTime" column="creat_time"/>
        <result property="updateTime" column="update_time"/>
        <result property="phone" column="phone"/>
        <association property="isLike" javaType="Integer" column="{tid = id,ph = phone}" select="getIsLikeBy"></association>
    </resultMap>

<!-- photo 是mapper 传进来的参数 把 这个字段 变成返回值-->

<sql id="selectPersonalTrendsVo">
        select id, user_id, user_name, buiding_id, buiding_name, trends,like_num, creat_time, update_time ,${phone} phone from personal_trends
    </sql>

<!-- 这是主要查询方法-->

<select id="selectPersonalTrendsByBid" parameterType="java.util.Map"
            resultMap="PersonalTrendsResult">
        <include refid="selectPersonalTrendsVo"/>
        where buiding_id = #{buidingId}
        and user_id = #{userId}
        order by creat_time desc
        limit 20
    </select>

<!-- 这是resultMap 中 isLike 的查询-->

<select id="getIsLikeBy" parameterType="java.util.Map" resultType="java.lang.Integer">
        select count(id) from likes_record where trends_id = #{tid} and customer_phone = #{ph} and likes = "1"
    </select>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值