首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

让iBATIS支持多个sql-地图-config.xml配置文件

2012-10-31 
让iBATIS支持多个sql-map-config.xml配置文件注: Spring2.5.5以上 已经开始支持多个configLocations 和 ma

让iBATIS支持多个sql-map-config.xml配置文件
注: Spring2.5.5以上 已经开始支持多个configLocations 和 mappingLocations了.

文件:  sql-map-config.xml

<sqlMapConfig><settings cacheModelsEnabled="true" enhancementEnabled="true"statementCachingEnabled="true" maxSessions="128" maxTransactions="128"maxRequests="128" /><sqlMap resource="cn/iwoo/demo/dao/maps/Article.xml" /><sqlMap resource="cn/iwoo/demo/dao/maps/CodeModel.xml"/></sqlMapConfig>


文件: applicationContext-hibernate.xml
<bean id="sqlMapClient" value="classpath:sql-map-config.xml"/><property name="dataSource" ref="dataSource"/></bean>
上面这两段大家应该都比较熟悉了.

上面这两段就是修改前的代码.

初衷: 当一个项目越来越大的时候,这个sql-map-config.xml中的sqlMap也随着迅速膨胀. 而且,将系统模块划分后,所有的模块都依旧往这一个sql-map-config.xml文件中写东西,总归是感觉不太爽.

期望: 可以将这个sql-map-config.xml的sqlMap能够拆分到多个子sql-map-config.xml, 每个模块一个子sql-map-config.xml, 不同模块间大家也不冲突,相安无事. 同时还要对已经存在的sql-map-config.xml文件提供兼容.

修改后的文件: applicationContext-hibernate.xml
<bean id="sqlMapClient" value="classpath:sql-map-config.xml"/><property name="extendConfigLocation" value="classpath:extendConfig.xml"/><property name="dataSource" ref="dataSource"/></bean>

CustomSqlMapClientFactoryBean是继承自SqlMapClientFactoryBean的一个自定义的类.
中间额外多了一个这个属性: extendConfigLocation.

文件: extendConfig.xml (用来作为额外管理依赖的一个配置文件)
<?xml version="1.0" encoding="UTF-8"?><sqlMapConfig><!-- <sqlMapImport resource="" url=""/> --><sqlMapImport resource="a.xml"/></sqlMapConfig>

表示, 现在配置了一个属于a模块的sqlMap的a.xml.

文件: a.xml (子模块a的所有sqlMap文件配置在这里)
<?xml version="1.0" encoding="UTF-8"?><sqlMapImport><sqlMap resource="cn/iwoo/demo/dao/maps/CodeModel.xml"/></sqlMapImport>

这个配置文件的内容和原来的sql-map-config.xml几乎一样,都是sqlMap的集中堆放点. 只是DOCTYPE被我自定义成了sqlMapImport, 不再是sqlMapConfig了.

文件: sql-map-config.xml
<sqlMapConfig><settings cacheModelsEnabled="true" enhancementEnabled="true"statementCachingEnabled="true" maxSessions="128" maxTransactions="128"maxRequests="128" /><sqlMap resource="cn/iwoo/demo/dao/maps/Article.xml" /></sqlMapConfig>

看,修改后的sql-map-config.xml中原来归属于a模块的CodeModel.xml的sqlMap放到了该属于它自己的a模块的a.xml中去了.

原来只存在这两个文件:
applicationContext-hibernate.xmlsql-map-config.xml        系统中所有的sqlMap都注册在这里面

修改后:
applicationContext-hibernate.xml  sql-map-config.xml    老系统中的sql-map-config.xml文件. extendConfig.xml      额外的管理其他模块的配置文件,需要将下面的a.xml注册在这里面a.xml                模块a的sqlMap都配置在这里面


这样修改后, 每个模块就可以有自己的sqlMap汇总的一个xml文件. 只是需要将这些汇总文件再注册在extendConfig.xml中即可. .

因为:
100 -        private Resource configLocation; 91 +         private Resource[] configLocations; 101 92    93 +         private Resource[] mappingLocations; 


Spring2.5.5以上 已经开始支持多个configLocations 和 mappingLocations了.

具体可以看这个地址:
http://fisheye1.atlassian.com/browse/springframework/spring/src/org/springframework/orm/ibatis/SqlMapClientFactoryBean.java?r1=1.17&r2=1.18

没想到Spring2.5.0还没解决的问题,在2.5.5就已经解决了.  <!-- 默认的SqlMapClient --><bean id="defaultSqlMapClient"ref="defaultDataSource" /><property name="configLocation"value="classpath:talent/ibatis/sql-map-config.xml" /><!-- 自动加载sql-mapping文件 --><property name="mappingLocations"><value>classpath:/talent/ibatis/sqlmap/**/*.xml</value></property><property name="useTransactionAwareDataSource" value="true"></property></bean>
spring2.5.5提供了自动扫描加载功能,如上博主可以试试!

另想请教博主一个spring事务不能回滚的问题,具体见问题频道:http://www.iteye.com/problems/6314
提前谢谢!! 8 楼 xuyiooo 2009-01-22   好像不行,感觉启动的时候没有加载CustomSqlMapClientFactoryBean 9 楼 xuyiooo 2009-01-22   好像不行,感觉启动的时候没有加载CustomSqlMapClientFactoryBean

热点排行