标王2.0中用到了ibatis内置的缓存机制,昨天在自测时发现缓存不起作用,其实以前在bp和bss中都有遇到过这种情况,但一直都没太在意。今天仔细查下原因,发现了问题。
下面是bp中cacheMode的配置
<cacheModel id="MEMORY-CACHE" type="MEMORY" readOnly="true"
serialize="false">
<flushInterval hours="24" />
<property name="STRONG" value="STRONG" />
</cacheModel>
问题出现在<property name="STRONG" value="STRONG" />中,property name的配置中没有strong这个属性,所以这么配相当于是无效的。
正确的配置应该是<property name="reference-type" value="STRONG" /> 或 <property name=" referenceType " value="STRONG" />
再来看ibatis源码中是怎么读取这个配置的
private MemoryCacheLevel cacheLevel = MemoryCacheLevel.WEAK;
private Map cache = Collections.synchronizedMap(new HashMap());
public void configure(Properties props) {
String refType = props.getProperty("reference-type");
if (refType == null) {
refType = props.getProperty("referenceType");
}
if (refType != null) {
cacheLevel = MemoryCacheLevel.getByReferenceType(refType);
}
}
public void putObject(CacheModel cacheModel, Object key, Object value) {
Object reference = null;
if (cacheLevel.equals(MemoryCacheLevel.WEAK)) {
reference = new WeakReference(value);
} else if (cacheLevel.equals(MemoryCacheLevel.SOFT)) {
reference = new SoftReference(value);
} else if (cacheLevel.equals(MemoryCacheLevel.STRONG)) {
reference = new StrongReference(value);
}
cache.put(key, reference);
}
从以上代码中可以看到,当出现错误的配置时,cacheLevel使用了默认的 MemoryCacheLevel.WEAK,而weak类型的内存管理机制是只要jvm启动了垃圾
回收机制,缓存所使用的内存就被回收,相当于这种错误的配置使用ibatis缓存基本上是失效的。
目前bp、bss中好几处地方都用了这样的配置,包括违禁词、地区省市编号。
分享到:
相关推荐
这不仅避免了因缓存错误而导致的查询失败,还确保了程序能够灵活地处理动态表名和字段名。同时,需要注意的是,在实际开发过程中还需要结合具体的业务需求来制定更合理的缓存策略,以提高应用程序的整体性能。
9. **错误处理与调试**:分享如何排查和解决iBATIS在实际使用过程中遇到的问题。 10. **最佳实践**:提供一些关于如何优化iBATIS使用的建议,以提高性能和代码质量。 《iBATIS-SqlMaps》则可能更侧重于实战和案例...
8. **最佳实践**:指南中还给出了许多使用IBATIS的最佳实践,帮助开发者避免常见错误,提高代码质量。 总的来说,IBATIS API和开发文档是学习和使用IBATIS不可或缺的资源,它们涵盖了IBATIS的所有关键特性和用法,...
5. **缓存机制**:为了提高性能,Ibatis.net内置了缓存机制,允许在一定范围内缓存查询结果,减少对数据库的重复访问。 6. **存储过程的支持**:除了普通的SQL语句,Ibatis.net还支持调用数据库的存储过程,方便...
7. **缓存**:了解iBatis的一级和二级缓存机制,提高性能。 深入理解iBatis的源码可以帮助你更好地理解和解决问题,例如当遇到SQL执行效率低、参数绑定错误或结果映射异常时。同时,结合《Thinking in Java》这样的...
iBatis 提供了缓存机制,可以在一定程度上提高查询效率。同时,通过合理设计SQL语句,避免全表扫描,使用索引等方法,也能有效提升性能。 10. **错误处理与调试**: 在开发过程中,iBatis的异常信息通常很详细,...
iBatis的异常体系主要由SqlMapException、SQLException等组成,提供了丰富的错误信息,便于调试和问题定位。 10. **最佳实践** - 避免过度使用动态SQL,保持SQL语句的简洁性和可读性。 - 合理利用缓存,但要注意...
下面,我们将详细探讨Ibatis的配置文件、映射文件以及其在实际应用中的使用。 一、Ibatis配置文件 Ibatis的主要配置文件是`mybatis-config.xml`,它是整个系统的全局配置文件。这个文件中包含了数据源、事务管理器...
- **iBATIS缓存机制**: - 一级缓存: 自动启用,存储在会话级别,用于存储SQL执行的结果。 - 二级缓存: 需要手动启用,存储在映射文件级别,可以在多个会话之间共享数据。 - **缓存配置**: - 在`SqlMapConfig.xml`...
通过对iBATIS内置别名列表的学习,我们不仅能够更好地理解iBATIS的工作原理,还能在实际项目中更加高效地使用该框架。此外,掌握这些内置别名也有助于提高配置文件的可读性和可维护性,减少因错误配置导致的问题。...
9. **Error Handling and Logging**: iBATIS 提供了错误处理和日志记录机制,帮助开发者调试和诊断问题。通过配置,可以选择不同的日志实现,如 Log4j 或 JDK 自带的日志。 10. **Batch Operations**: iBATIS 支持...
《iBATIS in Action》是一本专注于讲解iBATIS框架使用的专业书籍,它为开发者提供了深入浅出的指导,帮助他们有效地在项目中应用这一强大的持久层解决方案。iBATIS,一个由Apache软件基金会维护的开源项目,是Java...
6. **缓存机制**:为了提高性能,iBATIS提供了本地缓存和二级缓存功能,文档会介绍如何配置和使用缓存,以及缓存策略。 7. **异常处理**:iBATIS的异常处理机制也是文档的一部分,包括SQL执行错误、数据转换错误等...
Ibatis,全称为MyBatis,是一个...对于大型项目,掌握如何优雅地进行分页、事务控制、缓存管理和错误处理也非常重要。总之,Ibatis是一个强大且灵活的工具,通过深入学习和实践,可以极大地提高开发效率和代码质量。
7. 性能优化:通过合理设计SQL,避免N+1查询问题,使用缓存提高性能。 总之,iBATIS作为一个轻量级的持久层框架,通过提供SQL Maps和Mapped Statements,降低了数据库操作的复杂性,使得开发者可以专注于业务逻辑而...
8. **Cache**:iBATIS的缓存机制可以提高数据读取效率,减少不必要的数据库访问。 9. **Exception Handling**:iBATIS抛出的异常体系,如`SqlMapException`,`DataIntegrityViolationException`等,可以帮助开发者...
5. **缓存支持**:Ibatis的本地缓存机制部分实现位于此包中,它可以提高数据读取速度,减少对数据库的访问。 `ibatis-sqlmap-2.jar`是Ibatis的核心组件,主要负责SQL映射和执行。其中的关键知识点有: 1. **XML...
通过将SQL语句与Java代码分离,iBatis可以避免传统的JDBC代码中常见的错误,并提供了更灵活的数据库访问方式。 2. **配置iBatis** 在使用iBatis时,首先需要配置SqlMapConfig.xml文件,该文件是iBatis的核心配置...
- 使用版本控制工具,如Git,进行代码管理,便于回滚错误的改动。 - 配置热部署工具,如JRebel,可以自动跟踪代码和配置文件的变化,实现无缝更新。 - 在测试环境中进行修改,以避免影响生产环境的稳定。 - 保持良好...