`
zengshaotao
  • 浏览: 787263 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring-ibatis结构解析

 
阅读更多

<?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 开发指南pdf版

    《夏昕-iBatis 开发指南》是一本深入解析iBatis框架的实用教程,适合对Java编程有一定基础,希望掌握或提升在数据库交互方面技能的开发者。iBatis是著名的开源持久层框架,它提供了SQL映射功能,将数据库操作与业务...

    springAnnotationMVC-ibatis集成

    标题中的“springAnnotationMVC-ibatis集成”指的是在Java Web开发中,Spring MVC框架与iBatis数据访问层框架的整合使用。Spring MVC是Spring框架的一个模块,主要用于处理Web应用的请求-响应流程,而iBatis则是一个...

    springMVC-ibatis2

    首先,我们需要了解Spring MVC的生命周期和请求处理流程,这包括控制器的定义、模型视图的管理以及视图解析。 Spring MVC的核心组件包括DispatcherServlet,它负责接收HTTP请求并分发到适当的处理器。iBatis的集成...

    spring+ibatis配置实例

    "spring+ibatis配置实例"这个项目提供了一个完整的开发环境,包含所需的依赖包和标准化的项目结构,对初学者或开发者来说极具价值。 Spring是一个全面的Java应用框架,它提供了依赖注入(Dependency Injection,DI...

    spring3 ibatis整合实例

    Spring3 和 iBatis 整合是一个常见的Java企业级应用开发模式,主要用于构建灵活、可扩展的后端数据访问层。这个项目实例提供了一个详细的学习资源,帮助新手掌握这两种技术的融合。以下是对这个整合实例的详细解析:...

    DroidPilot-V2.5-Full-Ibatis.rar

    通常,这样的博客会包含安装步骤、核心功能解析、代码结构分析等信息。 标签"源码"表明这个压缩包包含实际的编程代码,可能是为了教学、研究或者二次开发目的。"工具"可能意味着DroidPilot是一个Android开发工具,...

    struts2+spring+ibatis增删查改翻页代码示例

    Struts2、Spring和iBatis是Java Web开发中经典的三大框架组合,它们协同工作能够构建出高效、灵活的企业级应用程序。在这个“struts2+spring+ibatis增删查改翻页代码示例”中,我们将深入探讨这三个框架如何协同实现...

    spring2.5 -3.0 hibernate3.3 jar包说明

    ### Spring 2.5 - 3.0 Jar 包解析 接下来,我们将详细介绍Spring 2.5至3.0版本中包含的关键Jar包及其功能: 1. **spring-core.jar** 这个Jar包包含了Spring框架的基础部分,是所有Spring应用的基础,提供了IoC...

    cairngorm简单入门实例(结合spring+ibatis)

    学习这个实例,开发者可以了解到如何在实际项目中应用Cairngorm框架,如何将Flex客户端与Spring+iBatis服务端进行交互,以及如何通过事件驱动的方式组织代码,提升项目的可维护性。 总之,这个入门实例为开发者提供...

    jpetstore-ibatis

    《基于Ibatis的JPetStore实战解析》 在IT领域,特别是Java开发中,JPetStore经常被用作示例项目来演示和学习各种技术框架的使用。本篇将深入探讨"jpetstore-ibatis"这个项目,它是对经典的JPetStore应用的重构,...

    spring-2.5.jar

    Spring 2.5引入了更加强大的模块化结构,允许开发者根据项目需求选择使用特定模块,减少了不必要的依赖,提高了项目的可维护性和灵活性。主要模块包括核心容器(Core Container)、数据访问/集成(Data Access/...

    spring and ibatis own back

    标题“spring and ibatis own back”暗示了这个压缩包文件可能包含了关于Spring框架与iBATIS数据访问层集成的相关内容。在IT行业中,Spring是一个广泛使用的开源Java框架,用于构建企业级应用程序,而iBATIS则是一个...

    spring+ibatis+jDom递归生成

    通过这样的组合,Spring负责管理依赖和事务,iBatis处理与数据库的交互,而jDom则用于解析返回的结果,实现数据的结构化。这种模式在处理复杂数据结构时特别有用,例如生成组织结构、文件系统目录树或其他类似的应用...

    搭建spring mvc+spring+ibatis所需所有jar包

    1. **概念**:Spring MVC是Spring框架的一个模块,用于构建MVC(Model-View-Controller)结构的Web应用。它提供了模型、视图和控制器之间的解耦,使代码更加模块化。 2. **核心组件**:DispatcherServlet是入口点,...

    struts + spring + ibatis 示例

    Struts、Spring 和 iBatis 是Java开发领域中三大经典的开源框架,它们分别负责Web层、业务层和服务层的管理。这个"Struts + Spring + iBatis 示例"项目Demo,旨在展示如何将这三个框架集成到一个应用中,实现高效且...

    Spring+iBatis+JDom递归生成XML树

    通过Spring管理依赖,iBatis处理数据库交互,JDom构建XML结构,实现了高效、灵活的XML生成方案。这对于需要将数据库数据导出为XML格式的应用场景,如数据备份、数据交换或API响应,都是非常实用的。

    Spring-Reference_zh_CN(Spring中文参考手册)

    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. ...

    注解方式搭建springmvc+spring+ibatis

    在本文中,我们将详细探讨如何使用注解方式搭建一个基于Spring MVC、Spring和iBatis的Web应用程序。这个框架组合被广泛用于构建企业级的Java应用,因为它提供了强大的依赖注入、AOP(面向切面编程)以及数据库操作...

    Spring和ibatis Ext整合完整实例

    10. **整合实例文档**:文档通常会详细解释每个步骤,包括环境配置、项目结构、主要类和配置文件解析,帮助你逐步理解和实现整个整合过程。 这个实例提供了一个完整的开发环境,你可以下载并运行它,以此为起点深入...

Global site tag (gtag.js) - Google Analytics