ibatis:iBatis和Spring的整合方法来源: 发布时间:星期四, 2009年2月12日 浏览:268次 评论:0
在使用iBatissqlmap时总是有些疑惑DAO是如何找到sqlmap配置文件呢DAO是如何获得数据库配置信息呢这些又是如何和Spring整合在起呢?带着这些疑问鄙人试图通过对某个项目代码分析来理清这些头绪 当我们书写个DAO实现类时首先implement个DAO接口然后继承BaseDAO类这个类对SpringDaoSupport类作了扩展提供了两个重要思路方法DataSource和SqlMapClientDataSource思路方法用来设置数据源从而确定数据库配置信息而SqlMapClient用来设置SqlMapClient就是SqlMapClient确定了sqlmap配置其整个静态结构如下图所示: 图1 在上图中BaseDAODataSource和SqlMapClient思路方法实际上是分别了SqlMapClientTemplate类对象sqlMapClientTemplateDataSource和SqlMapClient思路方法其中DataSource思路方法是SqlMapClientTemplate类通过继承JdbcAccessor类获得 下面讲讲这切是如何和Spring整合到起 我们在springbean配置文件配置DAO比如拿admPacVoucherDAO为例: <beanid="admPacVoucherDAO"="com.counter.biz.dal.ibatis.IbatisAdmPacVoucherDAO"parent="sqlMapClientDAO"/> IbatisAdmPacVoucherDAO继承了BaseDAO类对于继承来属性这里用parent="sqlMapClientDAO" 来获得sqlMapClientDAO是另个bean这个bean就是BaseDAO例子!也就是说只要看看这个bean是如何写就可以知道admPacVoucherDAO这个DAO如何配置起来这点可以从图中看出来 我们找到sqlMapClientDAO声明如下: <beanid="sqlMapClientDAO"="com.counter.biz.dal.BaseDAO"> <propertyname="sqlMapClient"> <refbean="sqlMapClient"/> </property> <propertyname="dataSource"> <refbean="dataSource"/> </property> </bean> 果然其中有sqlMapClient和dataSource属性好!继续追下去我们看看sqlMapClient这个bean声明: <beanid="sqlMapClient" ="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> <tingscacheModelsEnabled="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类这种工厂思路方法很有意思笔者会在以后对种方式作深入研究 当我通过springIoC获得DAObean并执行其中个思路方法比如: publicgetDebitCountByVoucherId(LongvoucherId){ Integercount=(Integer) this.getSqlMapClientTemplate.queryForObject( "MS-PAC-VOUCHER-DEBIT-COUNT-BY-VOUCHERID",voucherId); count.Value; } 实际是获得SqlMapClientTemplate类对象并执行其中思路方法而通过上文可以得知SqlMapClientTemplate类对象通过获得sqlMapClient就可以得到所有sqlmap配置 0
相关文章读者评论发表评论 |
|