2017-08-25 93 views
0

在我的日常工作中,我发现将SQL映射到其POJO的必要性。除了POJO本身的列外,我还有一些需要映射到某个地方的计算列。将它映射到POJO中的新变量似乎不是最好的选择,因为我实际上不知道需要多少新列(现在和将来)。Mybatis:将部分SQL映射到POJO中的HashMap

实施例:

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

赞赏如果你回答你自己的问题。不是它的问题部分 –

+0

马上改变它。谢谢 –

回答

1

多次尝试后,我找到了解决办法如下:

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>