我有以下java类。
package com.org.data.dbresource;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
public class DBConnectionManager {
private SqlMapClientTemplate sqlMapClientTemplate;
public void setSqlMapClientTemplate (SqlMapClientTemplate sq)
{
this.sqlMapClientTemplate = sq;
}
public SqlMapClientTemplate getSqlMapClientTemplate ()
{
return this.sqlMapClientTemplate;
}
}
My Spring xml如下所示:
<bean id="IbatisDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/RSRC/app/oltp"/>
</bean>
<bean id="MySqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map.xml"/>
<property name="dataSource" ref="IbatisDataSource"/>
</bean>
<bean id="myObject" class="com.org.data.dbresource.DBConnectionManager">
<property name="sqlMapClientTemplate" ref="MySqlMapClient"/>
</bean>
我得到的错误是:
无法转换属性值 类型 [com.ibatis.sqlmap.engine.impl.SqlMapClientImpl] 要求的类型 [org.springframework.orm.ibatis.SqlMapClientTemplate] 对于属性'sqlMapClientTemplate';
如果我通过SqlMapClientTemplate
而不是SqlMapClient
而不是SQLExceptions
我必须明确抓住{{1}}
我应该改变什么?
答案 0 :(得分:1)
错误说明了一切 - 您正在尝试将SqlMapClient
类型的对象(由SqlMapClientFactoryBean
创建)注入类型为SqlMapClientTemplate
的属性中。
您需要在SqlMapClientTemplate
内自己手动实例化DBConnectionManager
,例如
private SqlMapClientTemplate sqlMapClientTemplate;
public void setSqlMapClient(SqlMapClient sqlMapClient)
{
this.sqlMapClientTemplate = new SqlMapClientTemplate(sqlMapClient);
}
然后
<bean id="myObject" class="com.org.data.dbresource.DBConnectionManager">
<property name="sqlMapClient" ref="MySqlMapClient"/>
</bean>
请记住,SqlMapClientTemplate
只不过是一个助手类。 Spring和iBatis都没有强制要求使用它,如果你想使用它,你需要自己实例化它。