当前位置:文档之家› Spring与ibatis整合学习心得

Spring与ibatis整合学习心得

Spring与ibatis整合学习心得
梁飞虎首先,明确一下ibatis在此工程中的作用相当于hibernate,就是进行数据库的访问,也就是连接操作数据库用的。

因此常说的SSH结构也可用SSI来取代,只是ibatis是一个轻量级的框架。

在spring.jar包中有org.springframework.orm.ibatis.SqlMapClientFactoryBean类,此类用于读取ibatis中的配置文件(总配置文件)sqlMapConfig.xml,具体的配置位置是在applicationContext.xml中:
标记1
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation">
<value>WEB-INF/sqlMapConfig.xml</value>
</property>
</bean>
而sqlMapConfig.xml文件中包含ibatis的map文件信息,这点不再详述。

SqlMapClientFactoryBean,这个class实现了两个interface:FactoryBean和InitializingBean,InitializingBean只有一个方法afterPropertiesSet()
spring调用构造函数后,发现它实现了InitializingBean接口,所以还会调用afterPropertiesSet来进一步初始化此class。

sqlMapClient 就是在这里面创建的。

至此一个完整的工厂创建完成。

FactoryBean接口主要方法就是public Object getObject();
要知道SqlMapClientFactoryBean是一个工厂类,他的作用就是你需要的时候调用它的一个方法,它就会返回你一个你需要的对象。

当然此处返回的就是一个sqlMapClient 对象。

所以这里的getObject实现就是把sqlMapClient 返回给调用者。

spring就是根据接口里的定义来调用getObject方法的,这样可以忽略到底是调用的那个对象的实例(也就是不关心调用的是哪个factory)。

也不关心返回的是什么对象,spring只知道调用了getObject就可以得到此factory所创建的对象就够了。

标记2
<bean id="zjjyyxDao"
class="com.cdc.capital.ibatis.dao.impl.ZjjyyxDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
public class ZjjyyxDaoImpl extends SqlMapClientDaoSupport implements ZjjyyxDAO{
/**
*资金划转录入
*@param yxb
*@return int
*/
public int saveZjjyyx(ZjjyyxBean yxb){
return this.getSqlMapClientTemplate().update("insertZjjyyx", yxb);
}
}
SqlMapClientDaoSupport类有setSqlMapClient(SqlMapClient)方法,通过标记1 和标记2处的配置,再结合Spring的IOC功能,可以得知SqlMapClientFactoryBean读取的sqlMapConfig.xml文件的信息已经传递到了SqlMapClientDaoSupport中。

所以,他调用自己的get…方法可以获得到和ibatis一样的SqlMapClient对象,从而能够连接操作数据库。

相关主题