1 SqlMapConfig.xml文档中参数配置 [standalone] 本属性表明XML文档是否是一个独立文档(standalone document)。它的值是根据XML声明(位于文档实体的首部)中的独立文档声明(在XML声明中是可选的)来设定的。如果没有独立文档声明,则该属性没有值(no value)。 关于XML,可以看一下这里的介绍: http://www.w3china.org/translation/infoset_20011024_cn.htm XML信息集Unicode中文版 至于cacheModelsEnabled属性指定了SQL Map运行时实例的缓存Model是否开启。 相关: { 在<settings>元素中提供了多个属性来配置和优化SQL Map运行时的实例: maxRequests属性指定了同时执行SQL语句最大运行数。 maxSessions属性指定了同一时间内活动的最大Session数。所谓Session就是一个请求或一个SQL Map运行时实例自动获得的会话。 maxTransactions属性指定了最大事务处理的线程数。 cacheModelsEnabled属性指定了SQL Map运行时实例的缓存Model是否开启。 lazyLoadingEnabled属性指定了持久化数据是否延迟加载。 enhancementEnabled属性指定了全局性的启用或禁用字节码增强,以优化访问POJO变量属性的功能。 useStatementNamespaces属性指定了在SQL Map映射文件中是否用全限定名来引用映射声明。 } 2 <settings cacheModelsEnabled="true" />是一定要配置的,不然cache不起作用。 readonly的配置 当readonly为true时,serialize是没有意义的,每个返回的对象就是cache中的对象,所以如果改动了该对象,则cache和数据库就不一致了。当readonly为true是不改动返回值要靠我们人工了。 当readonly为false时,serialize为false时,cache的实体是不需要实现Serializable的,但是很奇怪的 是,其返回的实体不是原本cache中的实体,改动返回值不会影响以后的返回值。serialize为true时,cache的实体是需要实现 Serializable的,其返回值应该是cache中的一个copy,所以可以随便修改而不影响cache。 看一个性能测试,对一行数据读取100000次。 条件 时间(毫秒) 没有cache 53164 readonly=true, 1406 readonly=false,serialize=false, 54538 readonly=false,serialize=true, 4077 结论: 1 可以看出,加入cache后性能提升还是很可观的。 2 readonly=false,serialize=true的cache比readonly=true的慢一点,但是不是很多,想比没有cache的情况还是性能提升很大。 3 奇怪的readonly=false,serialize=false得到了解答,从测试结果看,应该是每一次都是到db直接读的,这个和没有配置cache差不多,又因为一些关于cache的code,应该比没有cache还慢一点点。