如何在mybatis映射器中的同一选择中提取pojo和动态映射?

问题描述 投票:0回答:1

如何在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>

有人可以帮忙吗?

sql jdbc mybatis
1个回答
0
投票

似乎是一个非传统的表结构。仍然可能,但是有些冗长。

<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_namelast_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

© www.soinside.com 2019 - 2024. All rights reserved.