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".
获得的
- 如果我在我的第二个查询中省略 ${firmDBName},该查询将尝试访问我的主数据库并抛出 table "PrimaryDB.frm_dealer_type" not found。所以它基本上是试图在我的主数据库中搜索名为 "frm_dealer_type" 的 table。
如果我尝试像
那样重写@Result
@Result(属性="dealerTypeID", column="firmDBName=firmDBName, frm_dealer_type_id=frm_dealer_type_id", one=@One(select="retrieveDealerTypeDAO")),
它抛出一个错误,指出 Column"firmDBName" 不存在。
- 将 ${firmDBName} 更改为 #{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
我正在尝试访问我的辅助数据库中的 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".
获得的- 如果我在我的第二个查询中省略 ${firmDBName},该查询将尝试访问我的主数据库并抛出 table "PrimaryDB.frm_dealer_type" not found。所以它基本上是试图在我的主数据库中搜索名为 "frm_dealer_type" 的 table。
如果我尝试像
那样重写@Result@Result(属性="dealerTypeID", column="firmDBName=firmDBName, frm_dealer_type_id=frm_dealer_type_id", one=@One(select="retrieveDealerTypeDAO")),
它抛出一个错误,指出 Column"firmDBName" 不存在。
- 将 ${firmDBName} 更改为 #{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