2010-08-24 46 views
2

我有以下的java類。如何從spring xml設置SqlMapClientTemplate

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; 
    } 
} 

我的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] for property '的SqlMapClientTemplate';

一切工作正常,如果,而不是SqlMapClientTemplate我通過SqlMapClient但我必須明確地趕SQLExceptions

我應該怎麼改?

回答

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 ISW無非是輔助類多。 Spring和iBatis都沒有強制使用它,如果你想使用它,你需要自己實例化它。

+0

這是現貨。你以前是否和春天一起工作過......你如何擁有這樣的知識:) – 2010-08-24 21:47:38

+0

@learn_plsql:我已經在這裏或那裏玩過它了:) – skaffman 2010-08-24 22:21:54