2014-05-14 72 views
1

我正在使用時態版本化數據,因此大多數查詢都需要時間點和組ID。我如何將這些傳遞給我的嵌套多對一查詢?如何從@Result在MyBatis中將參數傳遞給@One

例如:

@Select("select * " 
     + "from type1 " 
     + "where effective_date <= #{0, typeHandler=...} " 
     + "and termination_date > #{0, typeHandler=...}") 
@Results({ 
    @Result(property = "id", column = "id"), 
    @Result(property = "groupId", column = "group_id"), 
    // ... 
    @Result(property = "type2", column = "type2_group_id", javaType = Type2.class, 
     one = @One(select = "com...mapper.Type2Mapper.getByGroupId")) // ** 
    // ... 
}) 

使得Type2Mapper具有:

@Select(...) 
Type2 getByGroupId(Date date, Long groupId); 

由// **標識的線必須與type2_group_id一起傳遞既傳給它的日期。很明顯,我可以重新排列一些事情或任何需要做的工作,我只是希望我不必去改變我的模型,以包含一個Long type2GroupId,然後在事實之後填充type2實例。

有什麼想法?

+1

另一種解決方案是在這裏描述: http://stackoverflow.com/questions/17193040/passing-multiple-columns-in-mybatis-assoctiation –

回答

0

我找不到任何方式做到這一點,所以我增加了對它的支持:https://github.com/mybatis/mybatis-3/pull/203

@Result(property = "type2", column = "type2_group_id", javaType = Type2.class, 
    one = @One(select = "com...mapper.Type2Mapper.getByGroupId", 
      parameterProvider = @OneParameterProvider(
        type = TemporalParameterProvider.class, method = "getParametersWithDate" 
      ))) 

和:

public class TemporalParameterProvider { 
    public Object getParametersWithDate(Object value, Class<?> type, List<Object> originalParameters) { 
     Map<String, Object> parameters = new HashMap<String, Object>(); 
     parameters.put("0", originalParameters.get(0)); 
     parameters.put("1", value); 
     return parameters; 
    } 
} 

這也可以用來查詢開來計算的原始列值,以及其他用例。