mybaits 在resultMap 中使用autoMapping 时出现以下情况
<collection property="persons" ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true">
<id property="id" column="person_id"/>
<result property="name" column="person_name"/>
</collection>
在collection
中设置了autoMapping,也指定了映射字段的列和属性名,会出现关联查询时collection
返回是null,会直接映射成空对象
id : 1,
persons: [
{
personId:null,
personName:null
}
]
实验几次后发现去掉autoMaping就不会出现这种情况
id : 1,
persons:[]
还有一种方法是把<result/>
换成<id/>
同样能够解决
<collection property="persons" ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true">
<id property="id" column="person_id"/>
<id property="name" column="person_name"/>
</collection>
一般不会出现同时开启autoMapping 又使用指定列和类属性方式的二者取其一就行。
自动映射可以通过columnPrefix
指定前缀以及返回在sql中设置别名
的方式来映射。这样就可以用手动去collection
中写<id/>
<resule/>
了。
<collection property="persons" ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true" columnPrefix="p_">
</collection>
select
a.id as id,
p.id as p_id,
p.name as p_name
fron A a
left Join person p on p.id = a.pid
注意: SQL中映射的别名必须以设置好的前缀相同,同时保证别名和类属性名符合映射规则。