Mybatis使用ResultMap中嵌套collection标签主键id不封装的问题

mapper.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fangxinqian.order.zhendao.service.mapper.ProductMapper">

    <resultMap type="cn.fangxinqian.order.zhendao.common.vos.ProductByGroupVO" id="productByGroupVO">
        <collection column="id" property="simple" ofType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO"
                    select="getSimple">
        </collection>
        <collection column="id" property="active" ofType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO"
                    select="getActive">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="enclosure_url" property="enclosureUrl"/>
        </collection>
    </resultMap>

    <select id = "getProductByGroup" resultMap="productByGroupVO">
        SELECT distinct p.id,
        p.product_name,
        p.create_time,
        IFNULL(
        (SELECT count(1)
        FROM t_template_product
        GROUP BY  product_id
        HAVING product_id = p.id),0) 'count'
    FROM t_product p
    LEFT JOIN t_template_product tp
        ON p.id = tp.product_id
    WHERE true
    <if test="groupId != 0">
        AND p.group_id = #{groupId}
    </if>
    <if test="key != null">
        AND p.product_name like CONCAT(CONCAT('%',#{key},'%'))
    </if>
    </select>

    <!-- 获取未删除的普通附件 -->
    <select id="getSimple" resultType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO" parameterType="integer">
        select id,`name`,enclosure_url from t_enclosure e where product_id = #{id} and enclosure_type = 0 and enclosure_status = 0
    </select>

    <!-- 获取未删除的活动附件 -->
    <select id="getActive" resultType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO" parameterType="integer">
        select id,`name`,enclosure_url from t_enclosure e where product_id = #{id} and enclosure_type = 1 and enclosure_status = 0
    </select>
</mapper>

这是我的xml文件,如果不使用嵌套查询的话,只执行getProductByGroup是能正常返回的,但是加上了嵌套查询以后,返回除了主查询的主键没有封装进去,别的都正常,确定写了get和set方法,后面在某个论坛上面找到一个解答,就是在写resultMap的时候,主键不以id这样的格式来写<id column="id" property="id"/>,而是以标签来写,在resultMap加上<result column="id" property="id"/> 这样就能成功返回啦。

    <resultMap type="cn.fangxinqian.order.zhendao.common.vos.ProductByGroupVO" id="productByGroupVO">
        <result column="id" property="id"/>
        <collection column="id" property="simple" ofType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO"
                    select="getSimple">
        </collection>
        <collection column="id" property="active" ofType="cn.fangxinqian.order.zhendao.common.vos.EnclosureVO"
                    select="getActive">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="enclosure_url" property="enclosureUrl"/>
        </collection>
    </resultMap>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatisresultMap标签用于配置实体类与表字段的映射规则。该标签有以下作用: - 自定义映射规则,通过id属性给映射规则指定一个唯一标识,用于在其他地方引用。 - 使用id标签配置映射,指定实体类的属性和数据库表的字段的对应关系。 - 使用result标签配置普通字段映射,指定实体类的属性和数据库表的字段的对应关系。 举例来说,可以使用resultMap标签来配置一个名为studentmap的映射规则,该规则用于将数据库表的字段与Student实体类的属性进行映射。其id标签用于配置映射,result标签用于配置普通字段映射。例如: ```xml <resultMap id="studentmap" type="student"> <id property="sid" column="s_id"></id> <result property="sname" column="s_name"></result> <result property="sage" column="s_age"></result> <result property="sphone" column="s_phone"></result> </resultMap> ``` 此外,在核心配置文件,还可以通过设置lazyLoadingEnabled属性来开启延迟加载。如果使用的是MyBatis 3.41之前的版本,还需要配置aggressiveLazyLoading为true。同时,可以使用resultMap标签来配置一对多的映射关系,将一个教师对象对应多个学生对象。例如: ```xml <resultMap id="teacher" type="Teacher"> <id property="tid" column="t_id"></id> <result property="tname" column="t_name"></result> <result property="tage" column="t_age"></result> <collection property="students" ofType="student"> <id property="sid" column="s_id"></id> <result property="sage" column="s_age"></result> <result property="sname" column="s_name"></result> <result property="sphone" column="s_phone"></result> </collection> </resultMap> ``` 此外,可以使用association标签来配置多对一的映射关系,将多个学生对象对应一个教师对象。例如: ```xml <association property="teacher" javaType="Teacher"> <result property="tid" column="t_id"></result> <result property="tname" column="t_name"></result> <result property="tage" column="t_age"></result> </association> ``` 总结起来,resultMap标签MyBatis用于配置实体类与表字段的映射规则,可以通过id、result、collection、association等子标签来实现不同类型的映射关系的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [mybatisResultmap标签的的使用](https://blog.csdn.net/weixin_43891398/article/details/125608434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值