Mybatis resultMap(使用子查询)

本文探讨了Mybatis中resultMap如何处理子查询的情况,特别指出子查询返回的集合字段属性必须直接对应数据库字段,别名可能导致错误。同时,展示了实现数据库子查询子集的XML配置示例。

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

Mybatis resultMap(使用子查询)

  1. mybatis返回查询返回字段问题(子查询返回的集合字段属性必须是数据库的字段,别名会报错)
  <resultMap id="NoteDetailInfoMap" type="com.huanshuo.wisdomportal.vo.NoteDetailInfo">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="user_id" property="userId" jdbcType="INTEGER" />
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="publish_time" property="publishTime" jdbcType="TIMESTAMP" />
        <result column="user_space_baseinfo_id" property="userSpaceBaseinfoId" jdbcType="INTEGER" />
        <result column="content" property="content" jdbcType="LONGVARCHAR" />
        <result column="is_delete" property="isDelete" jdbcType="BIT" />
        <result column="tenant_id" property="tenantId" jdbcType="VARCHAR" />
        <result column="title" property="title" jdbcType="VARCHAR" />
        <result column="is_top" property="isTop" jdbcType="BIT" />
        <result column="public_area" property="publicArea" jdbcType="BIT" />
        <result column="status" property="status" jdbcType="BIT" />
        <result column="visitors" property="visitors" jdbcType="INTEGER" />
        <result column="praises" property="praises" jdbcType="INTEGER" />
        <result column="comments" property="comments" jdbcType="INTEGER" />
        <result column="classification" property="classification" jdbcType="VARCHAR" />
        <result column="collectionCount" property="collectionCount" jdbcType="INTEGER" />
        <result column="user_space_note_id" property="userSpaceNoteId" jdbcType="INTEGER" />
        <collection property="noteFileEntities" ofType="com.huanshuo.wisdomportal.entity.UserSpaceNoteFileEntity">
            <result column="name" property="name" jdbcType="VARCHAR" />
            <result column="link" property="link" jdbcType="VARCHAR" />
            <result column="size" property="size" jdbcType="INTEGER" />
            <result column="suffix" property="suffix" jdbcType="VARCHAR" />
            <result column="img" property="img" jdbcType="VARCHAR" />
            <result column="file_id" property="fileId" jdbcType="VARCHAR" />
            <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
        </collection>
    </resultMap>

<select id="noteCollectionList" resultMap="NoteDetailInfoMap">
        SELECT
            z.id ,
            z.create_time ,
            z.is_delete ,
            z.classification,
            z.collectionCount,
            z.comments,
            z.praises,
            z.publish_time,
            z.visitors
        FROM(
            SELECT
                    **zusn. id,
                    zc. user_id,
                    zc.user_space_note_id,
                    zc. is_delete,
                    zusn.create_time,
                    zusn.is_top**
                FROM
                  z_user_sapace_note_collection zc
                LEFT JOIN z_user_space_note zusn ON zusn.id= zc.user_space_note_id
                WHERE zc.tenant_id=#{tenantId}
                AND zusn.tenant_id=#{tenantId}
                AND zusn.is_delete=0
                AND zc.is_delete=0
                AND zc.user_id=#{userId}
                <if test="startIndex!= null and startSize!=null">
                    limit #{startIndex}, #{startSize}
                </if>
            ) z
        LEFT JOIN z_user_space_note_file zusnf
        ON z.user_space_note_id = zusnf.user_space_note_id
     ORDER BY z.create_time DESC;
    </select>

2.返回数据库子查询的子集


{
    place: '动物园',
    allCounts: 300,
    perDay : [
        {
            date: '2018-11-11',
            counts: 100
        },
        {
            date: '2018-11-12',
            counts: 200
        }
    ]
},
{
    place: '植物园',
    allCounts: 100,
    perDay : [
        {
            date: '2018-11-11',
            counts: 100
        }
    ]
},

xml文件如下:

<select id="pageResultMapSelect" parameterType="java.util.Map" resultMap="pageResultMap">
    select date,counts from t_广州 where place=#{place} group by date
</select>
<resultMap id="pageResultMap" resultType="java.util.Map">
    <result column="place" property="place" />
    <result column="allCounts" property="allCounts" />
    <collection property="perDay" javaType="java.util.List" ofType="java.util.Map" column="(place=place)" select="pageResultMapSelect"></collection>
</resultMap>
<select id="page" parameterType="java.util.Map" resultMap="pageResultMap">
    select place,sum(counts) as allCounts from t_广州 group by place
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值