[size=medium]
SqlMapClient是iBatis 2.x操作数据库的主要类,相当于hibernate的Session。
Spring创建iBatis的SqlMapClient实例是通过SqlMapClientFactoryBean.afterPropertiesSet方法创建的,由于SqlMapClientFactoryBean实现InitializingBean接口,IoC容器会在依赖注入完成后回调InitializingBean接口的afterPropertiesSet。
applicationContext.xml配置sqlMapClient
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:sqlMapConfig.xml</value>
</property>
</bean>
SqlMapClientFactoryBean通过的getObject()返回sqlMapClient,跟其他的FactoryBean一样。
生成的过程afterPropertiesSet方法
public void afterPropertiesSet() throws Exception {
/*设置自定义的lobHandler,LobHandler为操作二进制字段和大文本字段提供统一接口访问,如Oracle LOB*/
if (this.lobHandler != null) {
/*当前线程绑定Ibatis blob/clob等大字段数据处理器资源 */
configTimeLobHandlerHolder.set(this.lobHandler);
}
try {
/*创建iBatis的sqlMapClient相当于hibernate的Session,是iBatis操作数据库的主要类*/ this.sqlMapClient = buildSqlMapClient(this.configLocations, this.mappingLocations, this.sqlMapClientProperties);
// Tell the SqlMapClient to use the given DataSource, if any.
/*设置dataSource数据源*/
if (this.dataSource != null) {
TransactionConfig transactionConfig = (TransactionConfig) this.transactionConfigClass.newInstance();
DataSource dataSourceToUse = this.dataSource;
if (this.useTransactionAwareDataSource && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) {
/*生成事务数据源的动态代理*/
dataSourceToUse = new TransactionAwareDataSourceProxy(this.dataSource);
}
//为事务配置对象设置数据源
transactionConfig.setDataSource(dataSourceToUse);
//为事务配置对象设置属性
transactionConfig.initialize(this.transactionConfigProperties);
applyTransactionConfig(this.sqlMapClient, transactionConfig);
}
}
finally {
if (this.lobHandler != null) {
// Reset LobHandler holder.
configTimeLobHandlerHolder.remove();
}
}
}
具体sqlMapClient创建的过程
/*根据iBatis的配置文档sqlMapConfig.xml、映射文档如User.xml和属性文档生成sqlMapClient
* */
protected SqlMapClient buildSqlMapClient(
Resource[] configLocations, Resource[] mappingLocations, Properties properties)
throws IOException {
/*判断配置文档是否为空*/
if (ObjectUtils.isEmpty(configLocations)) {
throw new IllegalArgumentException("At least 1 'configLocation' entry is required");
}
SqlMapClient client = null;
/*生成配置文档解析器*/
SqlMapConfigParser configParser = new SqlMapConfigParser();
for (Resource configLocation : configLocations) {
/*获取配置文档的输入流*/
InputStream is = configLocation.getInputStream();
try {
/*生成sqlMapClient*/
client = configParser.parse(is, properties);
}
catch (RuntimeException ex) {
throw new NestedIOException("Failed to parse config resource: " + configLocation, ex.getCause());
}
}
if (mappingLocations != null) {
/*创建映射文档的解析器,自己可以在createSqlMapParser中做一些自定义处理,如通过反射方式设置缓冲配置*/
SqlMapParser mapParser = SqlMapParserFactory.createSqlMapParser(configParser);
for (Resource mappingLocation : mappingLocations) {
try {
mapParser.parse(mappingLocation.getInputStream());
}
catch (NodeletException ex) {
throw new NestedIOException("Failed to parse mapping resource: " + mappingLocation, ex);
}
}
}
return client;
}
[/size]
分享到:
相关推荐
2. **iBATIS 集成**:在 Spring 中集成 iBATIS 主要是通过 Spring 的 JDBC 模块,它可以管理 SQLMapClient 或 SqlSessionTemplate。通过配置文件,我们可以声明数据源、事务管理器以及 SqlSessionFactory 或 ...
2. **SqlMapClientFactoryBean**:用于配置和创建SqlMapClient实例。 3. **SqlMapClientTemplate**:提供了一个非侵入式的访问IBatis的方式,可以用于执行SQL语句并处理结果集。 4. **SqlMapClientDaoSupport**:...
### Spring+WebWork+iBatis 组合实例详解 #### 一、概述 在Java Web开发领域,Spring、WebWork与iBatis是三个非常重要的框架。本篇将结合具体的配置文件来详细介绍这三个框架是如何协同工作的,以及它们各自在项目...
- `sqlMapClient`:注入由Spring创建的SqlMapClient实例。 ##### 5. DAO层设计 DAO层需要继承`SqlMapClientDaoSupport`类或实现相应的接口,以便于使用SqlMapClient。 ```java public class TestDao extends ...
接下来配置了iBatis的SqlMapClient,这里使用的是Spring的`SqlMapClientFactoryBean`来创建一个SqlMapClient实例。 ```xml <bean id="sqlMapClient" class="org.springframework.orm.ibatis....
在Spring中,可以通过`SqlMapClientFactoryBean`来创建`SqlMapClient`实例。 ```xml <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <value>classpath:sqlMapConfig...
Spring的DI(Dependency Injection)特性允许在运行时动态地将依赖关系注入到DAO类中,如`SqlMapProductDao`的`SqlMapClient`实例,可以通过Spring的配置文件进行设置,提高了代码的可测试性和可扩展性。...
本示例工程是将这两个框架集成到 Eclipse IDE 中的一个实例,旨在帮助开发者理解和学习如何在实际项目中结合使用 Spring 和 iBATIS。 首先,`spring` 是一个开源的轻量级框架,它主要负责管理应用的组件(如服务、...
在Spring中,我们可以配置Spring容器来创建并管理SqlMapClient实例。 2. **SqlMapClientDaoSupport与SqlMapClientTemplate** Spring提供了`SqlMapClientDaoSupport`抽象类,它是DAO实现的基础。我们的自定义DAO类...
5. **DAO层**:包含与数据库交互的接口和实现,使用iBatis的SqlMapClient进行数据操作。 6. **XML配置文件**:iBatis的SQL映射文件,定义了SQL语句和结果映射。 7. **视图资源**:如JSP页面,用于呈现用户界面。 ...
- **作用**:配置Ibatis的数据源和映射文件,使得可以通过Spring管理Ibatis的实例。 - **配置**:定义一个`SqlMapClient` Bean,并指定映射文件的位置和数据源。 #### 四、web.xml文件配置 1. **添加Spring配置** ...
- **Spring配置文件**:定义Spring容器中各组件的生命周期管理,例如定义`AccountService`的Bean以及注入所需的`SqlMapClient`实例。 - **Struts2配置文件**:配置Action映射规则,比如定义一个名为`listAccounts`的...
6. **Service层**:包含业务逻辑,这些bean由Spring管理,并通过依赖注入获取到iBatis的Mapper实例,执行SQL操作。 7. **DAO层**:iBatis的Mapper接口实现,与数据库交互。 通过这样的整合,我们可以充分利用这三个...
【SSI框架搭建实例教程(struts spring ibatis整合 附切面事物处理)】 在软件开发中,集成多种框架可以提高应用程序的灵活性和可维护性。SSI框架是指Struts、Spring和iBatis的集成,这三种框架分别负责MVC模式中的...
5. 整合Spring和iBatis:通过Spring的SqlMapClientFactoryBean创建iBatis的SqlMapClient实例,并注入到需要使用数据库操作的Service中。 这样的整合使得系统具有良好的模块化和松耦合特性,方便开发、测试和维护。...
5. 将iBatis和Spring结合:使用SqlMapClientTemplate,由Spring管理SqlMapClient并进行数据访问。 在SSI项目中,我们可能看到以下文件: - struts-config.xml:Struts1的核心配置文件。 - sql-map-config.xml:...
- 在 `src` 目录下编写 Spring 配置文件,使用 `SqlMapClientFactoryBean` 完成 SqlMapClient 的定义。 - 注入 `dataSource` 和 iBatis 全局配置文件(无需在此配置文件中指定数据源)。 - 必须将 Spring 框架...
为了在Spring中配置iBATIS,我们需要在Spring的配置文件(如`beans.xml`)中声明`SqlMapClient` bean,并指定其配置文件。同时,我们还需要为每个DAO定义一个bean,声明它们继承自`SqlMapClientDaoSupport`,并注入`...
该示例展示了如何通过`SqlMapClientFactoryBean`来创建一个iBatis的SqlMapClient实例,并指定其配置文件的位置。同时,还展示了如何通过`JndiObjectFactoryBean`获取数据源(dataSource),这对于实际应用中的数据库...