MyBatis知识点:

本文详细介绍了MyBatis中columnPrefix属性的作用,它用于在一对多和一对一关联映射时,自动为子集合或关联对象的字段添加前缀。通过设置columnPrefix,可以方便地将数据库查询结果映射到复杂的数据结构中,例如在示例中,columnPrefix分别用于一对多的has-many关联和一对一的has-one关联,使得XML返回结果能够正确构建父子关系。

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

1:columnPrefix

当一个 collection 定义了一个 columnPrefix 属性时,其含义是将前缀自动添加到它关联的那个 resultMap 的 column 中。

关于父子结构的挂靠:

public class A implements Serializable {
    private Long id;
    private Long parentId;
    private String name;
}
public class B extends A{
    private List<A> children666;
}

Mapper.xml

collection:一对多关联(has many)

<mapper namespace="com.dao.ADao">
    <resultMap id="listWithChildrenMap" type="com.dto.B"
               extends="com..mapper.PmsProductCategoryMapper.BaseResultMap">
        <collection property="children" resultMap="com.mapper.A.BaseResultMap"
                    columnPrefix="child_"></collection>
    </resultMap>
    <select id="listWithChildren666" resultMap="listWithChildrenMap">
        select c1.id, c1.name,
               c2.id   child_id, c2.name child_name
        from A  c1 left join B c2 on c1.id = c2.parent_id
    </select>
</mapper>

sql查询结果集为:                                          xml返回结果集为父子关系:

association: 一对一关联(has one)

<mapper namespace="com.dao.ADao">
    <resultMap id="listWithChildrenMap" type="com.dto.B"
               extends="com..mapper.PmsProductCategoryMapper.BaseResultMap">
        <association property="product" resultMap="com.mapper.A.BaseResultMap"
                    columnPrefix="p_"></association>
    </resultMap>
    <select id="listWithChildren666" resultMap="listWithChildrenMap">
        select c1.id, c1.name,
               c2.id   p_id, p.name p_name
        from A  c1 left join B c2 on c1.id = c2.parent_id
    </select>
</mapper>

sql查询结果集:                              xml返回结果:

 

 

 

 

参考:Mybatis 中 columnPrefix别名的用法 - 好好活着活到春天 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值