如何在Person类中映射这些动态属性?属性的数量是动态的,并且对于不同的人而言是不同的。
Mybatis选择语句
<select id="getPersonDetails" resultMap="person" parameterType="java.util.HashMap">
select first_name,
last_name,
prop1,
prop2,
prop3
.
.
.
.
.
from commons.person
where id = #{personId}
</select>
POJO类别
class Person {
String firstName;
String lastName;
Map<String,Object> props
}
<resultMap="person" type="Person">
<result property="firstName" column="first_name">
<result property="lastName" column="last_name">
**Dynamic properties**
</resultMap>
无法创建如下所示的静态地图。
<resultMap="dynamicProperties" type="map">
<result property="prop1" column="prop1">
<result property="prop2" column="prop2">
</resultMap>
有人可以帮忙吗?
似乎是一个非传统的表结构。仍然可能,但是有些冗长。
<resultMap="person" type="Person">
<result property="firstName" column="first_name">
<result property="lastName" column="last_name">
<association property="props" autoMapping="true" />
</resultMap>
通过在启用自动映射的情况下添加<association />
,结果集中的每一列都将映射到props
。
然而,这意味着映射到Person
的列(即first_name
和last_name
)也被映射到props
。要从自动映射中排除特定的列,您需要添加<result />
而不指定property
属性。例如
<resultMap="person" type="Person">
<result property="firstName" column="first_name">
<result property="lastName" column="last_name">
<association property="props" autoMapping="true">
<result column="first_name" />
<result column="last_name" />
</association>
</resultMap>
ps.s。如果属性的变化已知,则可以选择discriminator。