【发布时间】:2017-12-23 03:02:47
【问题描述】:
我正在尝试访问辅助数据库中的一个表,该表的名称是从我的主数据库中获取的。我的困难是将“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 是从我的“主数据库”中获得的。
- 如果我在第二个查询中省略 ${firmDBName},则查询会尝试访问我的主数据库并抛出未找到表“PrimaryDB.frm_dealer_type”。所以它基本上是试图在我的主数据库中搜索一个名为“frm_dealer_type”的表。
-
如果我尝试重写 @Result 之类的
@Result(property="dealerTypeID", column="firmDBName=firmDBName, frm_dealer_type_id=frm_dealer_type_id", one=@One(select="retrieveDealerTypeDAO")),
它抛出一个错误,列“firmDBName”不存在。
- 将 ${firmDBName} 更改为 #{firmDBName} 也没有帮助。
我确实参考了这个博客 - here
我想要一个解决方案,将我的参数firmDBName 从我的主查询传递到辅助查询。
【问题讨论】:
标签: mybatis