在mybatis 中,父类的baen对象中有一个List<Bean>,子类继承父类后并且在mybatis的<resultMap>中继承了父类的<resultMap>,在子类查询时没有这个list的属性,我们应该在父类中使用<collection>标签来映射这个集合,让子类都有这个
代码:
<
resultMap
id
="BaseResultMap"
type
="base.domain.MapGeometry"
>
<
id
column
="WID"
jdbcType
="VARCHAR"
property
="wid"
/>
<
result
column
="POINT_GEOMETRY"
jdbcType
="CLOB"
property
="pointGeometry"
/>
<
result
column
="NAVIGATION_GEOMETRY"
jdbcType
="CLOB"
property
="navigationGeometry"
/>
<
result
column
="LABEL_GEOMETRY"
jdbcType
="CLOB"
property
="labelGeometry"
/>
<
result
column
="POLYGON_GEOMETRY"
jdbcType
="CLOB"
property
="polygonGeometry"
/>
<
result
column
="BROADCAST_AREA_GEOMETRY"
jdbcType
="CLOB"
property
="broadcastAreaGeometry"
/>
<
result
column
="LOD_LVL_ID"
jdbcType
="VARCHAR"
property
="lodLvlId"
/>
<
result
column
="MIN_LOD_LVL"
jdbcType
="DECIMAL"
property
="minLodLvl"
/>
<
result
column
="MAX_LOD_LVL"
jdbcType
="DECIMAL"
property
="maxLodLvl"
/>
<
collection
property
="mapGeometryRTerminals"
javaType
="ArrayList"
column
="wid"
ofType
="base.domain.MapGeometryRTerminal"
select
="selectTerminalByPrimaryKey"
/>
</
resultMap
>
<
select
id
="selectTerminalByPrimaryKey"
parameterType
="java.lang.String"
resultType
="map"
>
select
*
from tb_map_geometry_r_terminal
where GEOMETRY_WID = #{geometryWid,jdbcType=VARCHAR}
</
select
>
结果:
"mapGeometryRTerminals": [{
"GEOMETRY_WID": "c14782ef-1627-4233-aaf3-beec17b4d164",
"TERMINAL_TYPE_WID": "2",
"WID": "688D03A04DAA2DA9E050007F01002845"
}, {
"GEOMETRY_WID": "c14782ef-1627-4233-aaf3-beec17b4d164",
"TERMINAL_TYPE_WID": "5",
"WID": "688D03A04DAB2DA9E050007F01002845"
}, {
"GEOMETRY_WID": "c14782ef-1627-4233-aaf3-beec17b4d164",
"TERMINAL_TYPE_WID": "6",
"WID": "688D03A04DAC2DA9E050007F01002845"
}, {
"GEOMETRY_WID": "c14782ef-1627-4233-aaf3-beec17b4d164",
"TERMINAL_TYPE_WID": "9",
"WID": "688D03A04DAD2DA9E050007F01002845"
}],
在上面的代码中<collection>中的property 对应的是你父类中bean中list的属性名称,javaType可以不写,mybatis会判断
类型,ofType对应的是你list集合中泛型的bean对象,select对应的是你下面写的select查询的id,column对应的是你的列名,下
面sql的传入参数对不上也没有关系,就跟我上面一样,都是一样的结果,当然你看到这个的时候我代码里已经改了