2017-02-22 44 views
0

Следующий код работает с классом mapper, но имеет copypast объявления результатов (что в моем случае огромно).
Как я могу повторно использовать объявление @Results?Повторное использование объявления результатов Mybatis

@Mapper 
public interface DailyMasterCurrentTradeDao { 
    @Select("select * from dly_mstr_curr_trd") 
    @Results({ 
     @Result(property = "accAdsStC", column = "ACC_ADS_ST_C"), 
     ... 
    }) 
    List<DailyMasterCurrentTrade> selectDailyMasterCurrentTrades(); 

    @Select("select * from dly_mstr_curr_trd where rownum < #{rownumThreshold}") 
    @Results({ 
     @Result(property = "accAdsStC", column = "ACC_ADS_ST_C"), 
     ... 
    }) 
    List<DailyMasterCurrentTrade> selectFewDailyMasterCurrentTrades(long rownumThreshold); 
} 

ответ

1

Это обычная проблема: ограничение аннотаций. Люди, работающие с аннотациями, часто стремятся «запретить» конфигурацию XML (или другого типа файла).

Боюсь, вы не можете повторно использовать аннотации. Тогда ваш выбор ограничивается дублированием кода или частичным использованием XML, по крайней мере для resultMap объявлений, ссылающихся на них на @ResultMap ("resultMapId").

(Mybatis) Элементы XML загружаются в реестр, в то время как аннотации (как правило) можно рассматривать как часть объявления метода. Аннотации предназначены для привязки к методам: отсутствие ссылки на ссылку, в отличие от XML.

0

Вы можете использовать @ResultMap для ссылки/повторного использования другого определения @Results.

@Select("SELECT * FROM user where id = ${value}") 
@ResultMap("userResult") 
User findOne(Long id); 

@Select("SELECT * FROM user") 
@Results(id = "userResult", value = { 
    @Result(property = "id", column = "id", id = true), 
    @Result(property = "name", column = "name"), 
    @Result(property = "phone", column = "phone") 
}) 
List<User> findAll(); 

см здесь подробно: https://github.com/mybatis/mybatis-3/issues/155