浏览 13974 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-11
注: 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" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" 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" class="cn.iwoo.demo.ibatis.CustomSqlMapClientFactoryBean"> <property name="configLocation" 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中去了. 原来只存在这两个文件:
修改后:
这样修改后, 每个模块就可以有自己的sqlMap汇总的一个xml文件. 只是需要将这些汇总文件再注册在extendConfig.xml中即可. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-11
也就是原来需要将所有的sqlMap文件都配置在一个地方,就是sql-map-config.xml.
这样完全不便于模块化的管理. 现在每个模块都有一个自己的集中配置点, 比如:上面的a.xml, 可以将自己模块对应的sqlMap文件配置在里面. 还需要额外做的就是将各个模块的集中配置文件 再在extendConfig.xml中注册一下. 比如: 在extendConfig.xml声明a.xml. |
|
返回顶楼 | |
发表时间:2008-08-14
有用吗?只是把原来在sql-map-config.xml中集中管理换了个地方而已吧,其实在sql-map-config.xml中分块引入不也解决这个问题?
|
|
返回顶楼 | |
发表时间:2008-08-14
bukebushuo 写道 有用吗?只是把原来在sql-map-config.xml中集中管理换了个地方而已吧,其实在sql-map-config.xml中分块引入不也解决这个问题?
什么是分块引入? |
|
返回顶楼 | |
发表时间:2008-08-14
为什么没用?
假如我告诉你,我的Eclipse的Package中有45的项目需要去写这个sql-map-config.xml文件,你还觉得没意义吗? 目前这个sql-map-config.xml文件已经被配置了397行sqlMap, 那这个意义就非常大了. 而且,未来2年还要继续往这里面写,带来的只会是不停的冲突, 臃肿和无意义的肥胖. 一个产品是划分模块来面对客户的,纵然在写这个sql-map-config.xml的时候已经依照规范让一个模块的sqlMap都写在一块,可是一次只注释掉10个模块对应的10行配置文件,总会比注释掉10个模块对应的100行配置文件要方便吧. 而且,当系统变得越来越庞大的时候,带来的就是调试程序时启动Tomcat的时间越来越长,程序员为了加速Tomcat的启动会将与自己无关的模块的sqlMap注释掉,这个时候这个小功能就会显得很有用了. |
|
返回顶楼 | |
发表时间:2008-08-19
你用的什么版本的spring?
我这里编译错误,说SqlMapClientFactoryBean的buildSqlMapClient方法有三个参数的~你给的类里是两个参数的buildSqlMapClient方法~在CustomSqlMapClientFactoryBean的第36行 |
|
返回顶楼 | |
发表时间:2008-08-20
我用的是Spring2.5.0, 我也查了Spring2.0的代码, 发现都是2个参数.
你用的肯定是Spring2.5.5以上的版本, 那你就没必要再看这个文章了. . 因为: 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就已经解决了. |
|
返回顶楼 | |
发表时间:2008-11-09
<!-- 默认的SqlMapClient --> <bean id="defaultSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource" 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 提前谢谢!! |
|
返回顶楼 | |
发表时间:2009-01-22
好像不行,感觉启动的时候没有加载CustomSqlMapClientFactoryBean
|
|
返回顶楼 | |
发表时间:2009-01-22
好像不行,感觉启动的时候没有加载CustomSqlMapClientFactoryBean
|
|
返回顶楼 | |