Mybatis结果声明重用

时间:2017-02-22 16:11:33

标签: java annotations mybatis

以下代码正在使用mapper类,但它有结果集声明的copypast(在我的情况下很大)。
我怎样才能重用@Results声明?

@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);
}

2 个答案:

答案 0 :(得分:4)

您可以使用@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

答案 1 :(得分:2)

这是常见问题:达到注释限制。使用注释的人经常试图“禁止”XML(或其他文件类型)配置。

我担心你无法重复使用注释。您的选择仅限于代码复制或部分使用XML,至少对于 resultMap 声明,由@ResultMap(“resultMapId”)引用它们。

(Mybatis)XML元素被加载到注册表中,而注释(通常)可以被视为方法声明的一部分。 注释被设计为绑定到方法:没有要引用的id,与XML不同。