如何从spring xml设置SqlMapClientTemplate

时间:2010-08-24 19:51:33

标签: java spring ibatis

我有以下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}}

,那么一切正常

我应该改变什么?

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都没有强制要求使用它,如果你想使用它,你需要自己实例化它。