Mybatis:将部分SQL映射到POJO

时间:2017-08-25 06:33:32

标签: java mysql mapping mybatis

在我的日常工作中,我发现将SQL映射到其POJO的必要性。除了POJO本身的列之外,我还有一些需要映射到某处的计算列。将它映射到POJO中的新变量并不是最佳选择,因为我实际上并不知道我需要多少新列(现在和将来)。

示例SQL:

select id, name, surname, 
  calculated_column_1, calculated_column_2, ... 
  from person
  left outer join ...

calculated_column_1calculated_column_2 - 正如他们的名字所说 - 根据另一个表计算出的列。

我不知道我是否需要1,2或N个计算列。

如何将其映射到pojo?

1 个答案:

答案 0 :(得分:3)

经过多次尝试,我发现解决方案如下:

POJO:

private int id;
private String name;
private String surname;
private HashMap<String, Object> aditionalColumns;

// getters & setters

MyBatis Mapper:

<resultMap id="BaseResultMap" type="Person" automapping="true">
  <id column="id" property="id"/>
  <association
      property="aditionalColumns"
      resultMap="aditionalColumnsMapper" 
      columnPrefix="calculated_" />
</resultMap>

<resultMap id="aditionalColumnsMapper" type="map" autoMapping="true"/>

在这种情况下,我的aditionalColumns HashMap在映射后将如下所示:

{column_1=value1, column_2=value2}

注意:我不知道我需要多少列,如果你确切知道你需要多少列,并且它不会改变,你只能映射你的列,改变第二个resultMap,如下所示:

<resultMap id="aditionalColumnsMapper" type="map">
    <result column="calculated_column_1" property="calculated_column_1"/>
    <result column="calculated_column_2" property="calculated_column_2"/>
</resultMap>