现有两张表
数据源表:data_source(主键data_source_id)
数据源品牌标签表:data_source_brand (data_source_id, brand)
两张表是一对多的关系,一个数据源可以有多个品牌标签
期望结果:
查询一个数据源的时候,以List<String>的形式带出品牌标签brand
{
"updateBy": "admin",
"updateTime": "2023-03-22 10:21:39",
"dataSourceId": 15,
"brandList": [
"CD01",
"CD02"
]
}
MyBatis配置如下:
<resultMap type="DataSource" id="DataSourceResult">
<id property="dataSourceId" column="data_source_id" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<collection property="brandList" ofType="java.lang.String" javaType="list">
<result column="sub_brand" />
</collection>
</resultMap>
<sql id="selectDataSourceVo">
select s.data_source_id, s.update_by, s.update_time,
c.brand as sub_brand
from data_source s
left join data_source_brand c on s.data_source_id = c.data_source_id
</sql>
<select id="selectDataSourceList" parameterType="DataSource" resultMap="DataSourceResult">
<include refid="selectDataSourceVo"/>
</select>
注意避坑:
实现机制是先执行两表关联查询语句,MyBatis再针对一对多关系做合并,但是由于关联后导致数据条数增加,会影响使用limint分页的时的单页行数的准确性。