ibatis的cacheModel配置说明

ibatis的cacheModel配置说明具体参见:
http://www.iteye.com/topic/894922
我想说的是按照这篇文章的说明,配置是这样的:
<cacheModel id="model-cache" type="MEMORY" > 
     <flushInterval seconds="60"/> 
     <flushOnExecute statement="insertProduct"/> 
     <flushOnExecute statement="updateProduct"/> 
     <flushOnExecute statement="deleteProduct"/> 
     <property name="size" value="1000" /> 
</cacheModel>

可如果真这么配置是会出问题的。下面是我按上面例子配置后报的错,我的配置如下:
<sqlMap namespace="ConSys">
	<cacheModel type="LRU" id="con-cache">
		<flushInterval hours="10"/>
		<flushOnExecute statement="insertConsys"/>
		<flushOnExecute statement="delConsys"/>
		<flushOnExecute statement="upConsys"/>				
		<property name="size" value="1000"/>
	</cacheModel>
            .
            .
            .
</sqlMap>

注:我的insertConsys,delConsys,upConsys都在配置文件中有配置
这样配置会报:
引用

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in URL [file:/D:/eclipse/workspace/PGWebMonitor/WebContent/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [WEB-INF/SqlMapconfig.xml]; nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/end()'.  Cause: com.ibatis.sqlmap.client.SqlMapException: There is no statement named insertConsys in this SqlMap.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
at org.apache.struts2.StrutsSpringTestCase.setupBeforeInitDispatcher(StrutsSpringTestCase.java:39)
at org.apache.struts2.StrutsTestCase.setUp(StrutsTestCase.java:187)
at test.com.pzhsteel.util.basePara.setUp(basePara.java:16)
at junit.framework.TestCase.runBare(TestCase.java:128)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:228)
at junit.framework.TestSuite.run(TestSuite.java:223)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [WEB-INF/SqlMapconfig.xml]; nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/end()'.  Cause: com.ibatis.sqlmap.client.SqlMapException: There is no statement named insertConsys in this SqlMap.
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:342)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSet(SqlMapClientFactoryBean.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 30 more
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/end()'.  Cause: com.ibatis.sqlmap.client.SqlMapException: There is no statement named insertConsys in this SqlMap.
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:62)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:55)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:339)
... 33 more
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/end()'.  Cause: com.ibatis.sqlmap.client.SqlMapException: There is no statement named insertConsys in this SqlMap.
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:60)
... 36 more
Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no statement named insertConsys in this SqlMap.
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.getMappedStatement(SqlMapExecutorDelegate.java:231)
at com.ibatis.sqlmap.engine.config.SqlMapConfiguration.wireUpCacheModels(SqlMapConfiguration.java:242)
at com.ibatis.sqlmap.engine.config.SqlMapConfiguration.finalizeSqlMapConfig(SqlMapConfiguration.java:165)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$1.process(SqlMapConfigParser.java:72)
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
... 39 more

原因是ibatis找不到缺省包下的 insertConsys所以你只需要加上报名就好。正确配置如下:
<sqlMap namespace="ConSys">
	<cacheModel type="LRU" id="con-cache">
		<flushInterval hours="10"/>
		<flushOnExecute statement="ConSys.insertConsys"/>
		<flushOnExecute statement="ConSys.delConsys"/>
		<flushOnExecute statement="ConSys.upConsys"/>				
		<property name="size" value="1000"/>
	</cacheModel>
            .
            .
            .
</sqlMap>

猜你喜欢

转载自techno-it.iteye.com/blog/1151714