在我的日常工作中,我发现将SQL映射到其POJO的必要性。除了POJO本身的列之外,我还有一些需要映射到某处的计算列。将它映射到POJO中的新变量并不是最佳选择,因为我实际上并不知道我需要多少新列(现在和将来)。
示例SQL:
select id, name, surname,
calculated_column_1, calculated_column_2, ...
from person
left outer join ...
calculated_column_1
和calculated_column_2
- 正如他们的名字所说 - 根据另一个表计算出的列。
我不知道我是否需要1,2或N个计算列。
如何将其映射到pojo?
答案 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>