mybatis - 在@One注解上传递多个参数

mybatis - Passing multiple parameters on @One annotation

我正在尝试访问我的辅助数据库中的 table,我正在从我的主数据库中获取其名称。我的困难是将 "DB-Name" 作为参数传递到我的辅助查询中,(顺便说一句,我正在使用基于 MyBatis 注释的映射器)。

这是我的映射器

@SelectProvider(type = DealerQueryBuilder.class, method = "retrieveDealerListQuery")
@Results({
    @Result(property="dealerID",                column="frm_dealer_master_id"),
    @Result(property="dealerTypeID",            column="frm_dealer_type_id",        one=@One(select="retrieveDealerTypeDAO")),
    @Result(property="dealerName",              column="frm_dealer_name")
})
public List<Dealer> retrieveDealerListDAO(@Param("firmDBName") String firmDBName);

@Select("SELECT * from ${firmDBName}.frm_dealer_type where frm_dealer_type_id=#{frm_dealer_type_id}")
@Results({
    @Result(property="dealerTypeID",            column="frm_dealer_type_id"),
    @Result(property="dealerType",              column="frm_dealer_type")
})
public DealerType retrieveDealerTypeDAO(@Param("firmDBName") String firmDBName, @Param("frm_dealer_type_id") int frm_dealer_type_id);

我的 firmDBName 是从我的 "Primary DB".

获得的

它抛出一个错误,指出 Column"firmDBName" 不存在。

我确实参考了这个博客 - here

我想要一个解决方案,将我的参数 firmDBName 从我的主要查询传递到次要查询。

此处的限制是您的专栏必须 return 由第一个 @SELECT 编辑。 如果您查看测试用例 here,您会看到 parent_xxx 值 return 由第一个 Select 编辑。 您的 DealerQueryBuilder 必须 select firmDBName 作为 return 值,并且您的列必须将 return 列的名称映射到该名称。

你的列定义总是错误的,应该是: {frm_dealer_type_id=frm_dealer_type_id,firmDBName=firmDBName} 或从您的第一个 select 开始 return 编辑的任何内容。

同样你可以参考我上面的测试用例以及这里的文档http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Nested_Select_for_Association