<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list><!--<value>META-INF/jdbc.properties</value> --></list>
</property>
</bean>
<bean id="datasource" class="数据源实现类">
<property name="url" value="${jdbc.url}" />
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="200" />
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="META-INF/sqlMapConfig.xml" />
<property name="dataSource" ref="datasource" />
</bean>
<!-- 抽象的数据库访问实现 -->
<bean abstract="true" id="abstractDao" class="com.jnkj.dao.AbstractDao">
<property name="sqlMapClient" ref="sqlMapClient" />
<property name="dataSource" ref="datasource" />
</bean>
<!-- DAO定义 继承了抽象公用的dao之后,不用每个dao都配置一个property的属性 -->
<bean id="deptDAO" parent="abstractDao" class="com.jnkj.dao.DeptDAOImpl" />
</beans>
分析:
当service层调用deptDAO后,会直接实例化abstractDao,但是abstractDao本身没有配置的属性,
所以得从父类找寻属性,找到abstractDao,有extends SqlMapClientDaoSupport,所以找到SqlMapClientDaoSupport
public abstract class SqlMapClientDaoSupport extends DaoSupport {
private SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate();
private boolean externalTemplate = false;
public final void setDataSource(DataSource dataSource) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setDataSource(dataSource);
}
}
public final DataSource getDataSource() {
return this.sqlMapClientTemplate.getDataSource();
}
public final void setSqlMapClient(SqlMapClient sqlMapClient) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
}
}
public final SqlMapClient getSqlMapClient() {
return this.sqlMapClientTemplate.getSqlMapClient();
}
public final void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate) {
Assert.notNull(sqlMapClientTemplate, "SqlMapClientTemplate must not be null");
this.sqlMapClientTemplate = sqlMapClientTemplate;
this.externalTemplate = true;
}
public final SqlMapClientTemplate getSqlMapClientTemplate() {
return this.sqlMapClientTemplate;
}
}
虽然没有相应属性,但是有对应的set,get方法,所以是可以完成初始化的。
对于setDataSource方法,是sqlMapClientTemplate 对象调用的,
又 private SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate();
我们可以看一下SqlMapClientTemplate 这个类:
public class SqlMapClientTemplate extends JdbcAccessor implements SqlMapClientOperations {
private SqlMapClient sqlMapClient;
public SqlMapClientTemplate() {
}..........................
可以看出继承了JdbcAccessor ,故需要一个jdbc的数据源
对于sqlMapClient属性的初始化,在SqlMapClientFactoryBean里可以体现
SqlMapClientFactoryBean部分代码如下:
public class SqlMapClientFactoryBean implements FactoryBean<SqlMapClient>, InitializingBean {
private static final ThreadLocal<LobHandler> configTimeLobHandlerHolder = new ThreadLocal<LobHandler>();
public static LobHandler getConfigTimeLobHandler() {
return configTimeLobHandlerHolder.get();
}
private Resource[] configLocations;
private Resource[] mappingLocations;
private Properties sqlMapClientProperties;
private DataSource dataSource;
private boolean useTransactionAwareDataSource = true;
private Class transactionConfigClass = ExternalTransactionConfig.class;
private Properties transactionConfigProperties;
private LobHandler lobHandler;
private SqlMapClient sqlMapClient;
public SqlMapClientFactoryBean() {
this.transactionConfigProperties = new Properties();
this.transactionConfigProperties.setProperty("SetAutoCommitAllowed", "false");
}
一大堆的属性,但是我们只需要配置dataSource,和configLocations
sqlMapConfig.xml的文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="true" enhancementEnabled="false"
lazyLoadingEnabled="false" errorTracingEnabled="true" maxRequests="20"
maxSessions="20" maxTransactions="10" useStatementNamespaces="false"/>
<sqlMap resource="META-INF/sqlmap/Dept.xml"/>
</sqlMapConfig>
相关推荐
《夏昕-iBatis 开发指南》是一本深入解析iBatis框架的实用教程,适合对Java编程有一定基础,希望掌握或提升在数据库交互方面技能的开发者。iBatis是著名的开源持久层框架,它提供了SQL映射功能,将数据库操作与业务...
标题中的“springAnnotationMVC-ibatis集成”指的是在Java Web开发中,Spring MVC框架与iBatis数据访问层框架的整合使用。Spring MVC是Spring框架的一个模块,主要用于处理Web应用的请求-响应流程,而iBatis则是一个...
首先,我们需要了解Spring MVC的生命周期和请求处理流程,这包括控制器的定义、模型视图的管理以及视图解析。 Spring MVC的核心组件包括DispatcherServlet,它负责接收HTTP请求并分发到适当的处理器。iBatis的集成...
"spring+ibatis配置实例"这个项目提供了一个完整的开发环境,包含所需的依赖包和标准化的项目结构,对初学者或开发者来说极具价值。 Spring是一个全面的Java应用框架,它提供了依赖注入(Dependency Injection,DI...
Spring3 和 iBatis 整合是一个常见的Java企业级应用开发模式,主要用于构建灵活、可扩展的后端数据访问层。这个项目实例提供了一个详细的学习资源,帮助新手掌握这两种技术的融合。以下是对这个整合实例的详细解析:...
通常,这样的博客会包含安装步骤、核心功能解析、代码结构分析等信息。 标签"源码"表明这个压缩包包含实际的编程代码,可能是为了教学、研究或者二次开发目的。"工具"可能意味着DroidPilot是一个Android开发工具,...
Struts2、Spring和iBatis是Java Web开发中经典的三大框架组合,它们协同工作能够构建出高效、灵活的企业级应用程序。在这个“struts2+spring+ibatis增删查改翻页代码示例”中,我们将深入探讨这三个框架如何协同实现...
### Spring 2.5 - 3.0 Jar 包解析 接下来,我们将详细介绍Spring 2.5至3.0版本中包含的关键Jar包及其功能: 1. **spring-core.jar** 这个Jar包包含了Spring框架的基础部分,是所有Spring应用的基础,提供了IoC...
学习这个实例,开发者可以了解到如何在实际项目中应用Cairngorm框架,如何将Flex客户端与Spring+iBatis服务端进行交互,以及如何通过事件驱动的方式组织代码,提升项目的可维护性。 总之,这个入门实例为开发者提供...
《基于Ibatis的JPetStore实战解析》 在IT领域,特别是Java开发中,JPetStore经常被用作示例项目来演示和学习各种技术框架的使用。本篇将深入探讨"jpetstore-ibatis"这个项目,它是对经典的JPetStore应用的重构,...
Spring 2.5引入了更加强大的模块化结构,允许开发者根据项目需求选择使用特定模块,减少了不必要的依赖,提高了项目的可维护性和灵活性。主要模块包括核心容器(Core Container)、数据访问/集成(Data Access/...
标题“spring and ibatis own back”暗示了这个压缩包文件可能包含了关于Spring框架与iBATIS数据访问层集成的相关内容。在IT行业中,Spring是一个广泛使用的开源Java框架,用于构建企业级应用程序,而iBATIS则是一个...
通过这样的组合,Spring负责管理依赖和事务,iBatis处理与数据库的交互,而jDom则用于解析返回的结果,实现数据的结构化。这种模式在处理复杂数据结构时特别有用,例如生成组织结构、文件系统目录树或其他类似的应用...
1. **概念**:Spring MVC是Spring框架的一个模块,用于构建MVC(Model-View-Controller)结构的Web应用。它提供了模型、视图和控制器之间的解耦,使代码更加模块化。 2. **核心组件**:DispatcherServlet是入口点,...
Struts、Spring 和 iBatis 是Java开发领域中三大经典的开源框架,它们分别负责Web层、业务层和服务层的管理。这个"Struts + Spring + iBatis 示例"项目Demo,旨在展示如何将这三个框架集成到一个应用中,实现高效且...
通过Spring管理依赖,iBatis处理数据库交互,JDom构建XML结构,实现了高效、灵活的XML生成方案。这对于需要将数据库数据导出为XML格式的应用场景,如数据备份、数据交换或API响应,都是非常实用的。
11.1.1. Spring JDBC包结构 11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. ...
在本文中,我们将详细探讨如何使用注解方式搭建一个基于Spring MVC、Spring和iBatis的Web应用程序。这个框架组合被广泛用于构建企业级的Java应用,因为它提供了强大的依赖注入、AOP(面向切面编程)以及数据库操作...
10. **整合实例文档**:文档通常会详细解释每个步骤,包括环境配置、项目结构、主要类和配置文件解析,帮助你逐步理解和实现整个整合过程。 这个实例提供了一个完整的开发环境,你可以下载并运行它,以此为起点深入...