`
anthon_lx
  • 浏览: 101384 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

iBatis和Spring的整合方法

    博客分类:
  • J2EE
阅读更多
在使用iBatis的sqlmap时,总是有些疑惑,DAO是怎么找到sqlmap的配置文件的呢,DAO是怎么获得数据库的配置信息的呢,这些又是怎么和Spring整合在一起的呢?带着这些疑问,鄙人试图通过对某个项目的代码分析,来理清这些头绪。
             当我们书写一个DAO实现类时,首先implement一个DAO接口。然后继承BaseDAO类。这个类对Spring的DaoSupport类作了扩展,提供了两个重要的方法setDataSource()和setSqlMapClient()。setDataSource()方法用来设置数据源,从而确定数据库配置信息。而setSqlMapClient()用来设置SqlMapClient,就是SqlMapClient确定了sqlmap的配置。其整个静态结构如下图所示:
     
             在上图中,BaseDAO的setDataSource()和setSqlMapClient()方法实际上是分别调用了SqlMapClientTemplate类对象sqlMapClientTemplate的setDataSource()和setSqlMapClient()方法。其中setDataSource()方法是SqlMapClientTemplate类通过继承JdbcAccessor类获得。
      下面讲讲这一切是怎么和Spring整合到一起的。
             我们在spring的bean配置文件配置DAO,比如拿admPacVoucherDAO为例:
    <beanid="admPacVoucherDAO"class="com.counter.biz.dal.ibatis.IbatisAdmPacVoucherDAO"parent="sqlMapClientDAO"/>              IbatisAdmPacVoucherDAO继承了BaseDAO类,对于继承来的属性,这里用parent="sqlMapClientDAO" 来获得。sqlMapClientDAO是另一个bean,这个bean就是BaseDAO的实例!也就是说,只要看看这个bean是怎么写的,就可以知道admPacVoucherDAO这个DAO怎么配置起来的。这一点可以从图一中看出来。
             我们找到sqlMapClientDAO的声明如下:
    <beanid="sqlMapClientDAO"class="com.counter.biz.dal.BaseDAO">
           <propertyname="sqlMapClient">
               <refbean="sqlMapClient"/>
           </property>
           <propertyname="dataSource">
               <refbean="dataSource"/>
           </property>
        </bean>
    果然,其中有sqlMapClient和dataSource属性。好!继续追下去,我们看看sqlMapClient这个bean的声明:
    <beanid="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
           <propertyname="configLocation">
               <value>counter/persistence/counter-sqlmap.xml</value>
           </property>
        </bean>
             哈哈,找到sqlmap配置文件在哪里指定了,就是这里。configLocation指定了配置文件的位置。打开看看果然是各个sqlmap的配置:
    <?xmlversion="1.0"encoding="GB2312"?>
    <!DOCTYPEsqlMapConfigPUBLIC"-//iBATIS.com//DTD SQL Map Config 2.0//EN""http://www.ibatis.com/dtd/sql-map-config-2.dtd">
    <sqlMapConfig>
        <settingscacheModelsEnabled="true"enhancementEnabled=
"false"lazyLoadingEnabled="false"maxRequests="3000"maxSessions=
"3000"maxTransactions="3000"useStatementNamespaces="false"/>
        <sqlMapresource="counter/sqlmap/pacioli-sql-mapping.xml"/>
        <sqlMapresource="counter/sqlmap/common-sqlmap-mapping.xml"/>
       。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
        <sqlMapresource="com/counter/biz/dal/sqlmap/PacVoucherDebitInfo-sqlmap-mapping.xml"/>
        <sqlMapresource="com/counter/biz/dal/sqlmap/PacVoucherExt-sqlmap-mapping.xml"/>
    </sqlMapConfig>
             可是再看看sqlMapClient这个bean的类型,疑惑又来了。这个bean根本不是SqlMapClient类的实例,甚至似乎和SqlMapClient没有任何联系。这个bean的类型是SqlMapClientFactoryBean。原来这是一个工厂类,这个类负责组装SqlMapClient类的实例。这个类有getObject()和getObjectType()方法。getObject()返回的就是SqlMapClient类的实例,而getObjectType()方法返回SqlMapClient类。这种工厂方法很有意思,笔者会在以后对种方式作深入研究。
             当我通过spring的IoC获得DAO的bean,并执行其中一个方法,比如:
    publicintgetDebitCountByVoucherId(LongvoucherId){
       Integercount=(Integer)
    this.getSqlMapClientTemplate().queryForObject(
                     "MS-PAC-VOUCHER-DEBIT-COUNT-BY-VOUCHERID",voucherId);
       returncount.intValue();
    }
             实际是获得SqlMapClientTemplate类对象,并执行其中的方法。而通过上文可以得知,SqlMapClientTemplate类对象通过获得的sqlMapClient就可以得到所有sqlmap的配置。
分享到:
评论

相关推荐

    iBatis和Spring整合

    iBatis和Spring整合 iBatis和Spring整合

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

    ibatis与spring整合

    通过以上步骤,我们可以将ibatis与Spring框架很好地整合在一起,利用Spring的强大功能来简化ibatis的配置和管理。这种整合方式不仅提高了开发效率,也使得应用的结构更加清晰、易于维护。随着项目的复杂度增加,这种...

    ibatis与spring的整合

    在整合iBATIS和Spring的过程中,主要目标是利用Spring的IOC(Inversion of Control)容器来管理和协调数据访问层(DAO)以及事务处理,同时利用iBATIS作为SQL映射框架,提供灵活的数据库操作。以下将详细阐述整合的...

    Struts2+iBATIS+Spring整合

    Struts2+iBATIS+Spring整合是Java Web开发中一种常见的技术栈组合,这三种框架协同工作,可以构建出高效、灵活的企业级应用。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理HTTP请求,管理前端...

    ibatis spring struts 整合案例

    在Ibatis Spring Struts整合中,Spring通常作为核心框架,管理其他组件的生命周期,包括Struts的Action和Ibatis的SqlSession。开发者可以利用Spring的AOP功能来管理事务,确保在多条数据库操作之间保持一致性。...

    ibatis+spring整合

    "Ibatis+Spring整合"是指将这两个框架集成到同一个项目中,以利用它们的优势互补,实现更高效、更灵活的数据访问层。下面我们将详细探讨这个整合过程中的关键知识点。 首先,集成Ibatis和Spring的第一步是引入相关...

    ibatis和Spring整合的详细例子

    ibatis和Spring整合的详细例子 iBatis和Spring整合的详细例子,数据库用的是mysql,开发环境是Eclipse3.2。 1、首先把用到的包导入进来:  spring-framework-1.2.7.jar  iBATIS_DBL-2.1.7.597.jar  mysql-...

    ibatis 与spring3整合

    "Ibatis 与 Spring3 整合"这一主题,涉及到的是两个知名Java框架——Ibatis(一个轻量级的持久层框架)和Spring(一个全面的企业级应用框架)的协同工作。下面我们将深入探讨这一整合过程中的关键知识点。 Ibatis ...

    struts和ibatis和spring整合按列

    - Spring可以管理SqlSessionTemplate或SqlSessionDaoSupport,它们是iBatis与Spring整合的关键类,提供数据库操作的方法。 - 将iBatis的Mapper接口定义为Spring的Bean,通过@Autowired注解自动注入到需要的地方。 ...

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    ibatis和spring整合开发 例子

    总结来说,Ibatis和Spring的整合使得我们在使用Ibatis强大SQL能力的同时,享受到了Spring带来的组件化和依赖注入的便利。这种整合方式提高了代码的可读性和可维护性,降低了系统复杂度。在实际项目中,我们可以根据...

    ibatis与Spring整合例子

    在IT领域,iBATIS和Spring的整合是一个常见的实践,特别是在构建基于Java的企业级应用时。iBATIS是一个优秀的持久层框架,它简化了数据库操作,而Spring则是一个全面的框架,提供了依赖注入、事务管理等多种功能。接...

    ibatis_spring整合Demo

    通过这个"ibatis_spring整合Demo",我们可以看到Ibatis与Spring的整合使得数据库操作更加简洁,同时利用了Spring的IoC和AOP特性,提高了代码的可测试性和可维护性。在实际项目中,这样的整合方式可以大大简化开发...

    ibatis与spring整合实例(附源码)

    标题 "ibatis与spring整合实例(附源码)" 暗示了本文将探讨如何在实际项目中结合使用这两个流行的Java开发框架——iBatis和Spring。iBatis是一个SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,而Spring则...

    IBatis + spring 整合

    总结来说,IBatis与Spring的整合使得我们能够在享受Spring的高级功能的同时,利用IBatis的简单易用和强大的SQL处理能力。这种整合方式降低了开发难度,提高了代码的可读性和可维护性,是现代企业级应用开发中的常见...

    struts2+ibatis+spring整合开发.doc

    在《struts2+ibatis+spring整合开发》文档中,详细介绍了如何将Struts2、Ibatis与Spring三大框架进行整合,以实现一个高效、可扩展的企业级应用系统。本文将对这份文档的主要内容进行深度解析,并从中提炼出重要的...

    struts+iBATIS+spring整合例子

    Struts、iBATIS和Spring是Java开发中常用的三大框架,它们各自负责不同的职责,而将它们整合在一起,可以构建出高效、灵活的企业级应用程序。本文将深入探讨这三者的核心概念、整合过程以及实际应用。 **Struts** ...

    spring3.2与Ibatis整合

    Spring 3.2 与 iBatis 的整合是Java企业级开发中常见的一种技术组合,它结合了Spring的依赖注入和事务管理能力以及iBatis的SQL映射框架的灵活性。这种整合允许开发者将业务逻辑与数据访问层解耦,提高了代码的可维护...

Global site tag (gtag.js) - Google Analytics