我在项目架构中为了达到减少配置的目的,将ibatis的*sql.xml文件路径配置放到了spring里面(spring2.5以上版本支持)
<!-- ibatis配置 -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sql-map-config.xml</value>
</property>
<property name="mappingLocations">
<value>
classpath:/sql/*/*SQL.xml
</value>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
由此导致的问题有两个,一是sql-map-config.xml的dtd要求sqlMapConfig节点下必须要有<sqlMap resource="***" />,所以
我加了一个空的配置文件<sqlMap resource="sql/common/empty.xml" />,这个还好办点
第二就是在*SQL.xml中运用cacheModel时,缓存本身生效,但是配置的<flushOnExecute statement="***"/>完全不起作用,
经过逐步调试,和对源代码的查看,发现ibatis在查找flushOnExecute的statement时,是直接寻找sql-map-config.xml里面的
<sqlMap resource="**.xml" />配置,在这些xml文件中查找对应的statement,然而,我的配置文件是在spring中设置的,所以,
cacheModel的flushOnExecute配置就无法找到对应的statement,导致cache无法清除。