Ibatis缓存技术详解与实战

5星 · 超过95%的资源 需积分: 9 13 下载量 195 浏览量 更新于2024-07-25 1 收藏 103KB DOC 举报
"Java Ibatis 缓存技术文档" 在Java开发中,Ibatis是一个轻量级的持久层框架,它提供了灵活的SQL映射机制,同时也支持缓存功能,以提高应用程序的性能。缓存机制使得数据库查询结果可以被存储在内存中,避免了频繁的数据库访问,从而减少了系统的响应时间。 Ibatis的缓存分为两种级别:一级缓存和二级缓存。一级缓存是SqlSession级别的,也就是说同一个SqlSession内的相同SQL查询会复用之前的结果,而不同SqlSession之间的查询结果不会共享。一级缓存默认是开启的,但当SqlSession关闭或者提交时,一级缓存会被清空。 二级缓存则是全局的,它是基于namespace(映射文件)的,可以在多个SqlSession之间共享。二级缓存的配置和使用更加复杂,但能够提供更高效的缓存效果。二级缓存的开启需要在配置文件中进行设置,并且需要在映射文件中启用对应的cache元素。 在Ibatis的配置文件中,`<cacheModel>`元素是定义缓存模型的关键,它包含了一些重要的属性,如: - `id`:缓存模型的唯一标识,用于引用。 - `type`:指定缓存实现的类,Ibatis提供了内存实现(`LRU`、`FIFO`等)和序列化实现(`PERPETUAL`)。 - `readOnly`:默认为true,表示缓存是只读的,如果设置为false,那么允许更新缓存。 - `serialize`:是否对缓存的数据进行序列化,如果设置为true,那么在缓存溢出时会进行序列化操作。 此外,`<cacheModel>`还可以包含以下子元素: - `flushInterval`:设置缓存刷新间隔,可以通过`milliseconds`、`seconds`、`minutes`或`hours`定义。 - `flushOnExecute`:指定某些SQL执行后立即触发缓存刷新,通过`statement`属性指定SQL语句ID。 - `property`:自定义属性,用于配置缓存实现的特定参数。 在实际应用中,开发者可以根据需求选择合适的缓存策略,例如设置缓存大小、刷新间隔,或者针对特定的SQL语句开启或关闭缓存。同时,需要注意的是,缓存可能会带来数据一致性的问题,因此在更新数据库后,需要正确地管理和清理缓存,以确保数据的准确无误。 理解并掌握Ibatis的缓存技术,对于优化Java应用程序的性能,减少数据库负载具有重要意义。通过合理配置和使用缓存,开发者可以显著提升系统的响应速度,同时需要考虑如何处理缓存与数据一致性的平衡,以保证系统的稳定性和可靠性。

org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因。 org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121) org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因。 org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory.setProperties(UnpooledDataSourceFactory.java:55) org.apache.ibatis.builder.xml.XMLConfigBuilder.dataSourceElement(XMLConfigBuilder.java:326) org.apache.ibatis.builder.xml.XMLConfigBuilder.environmentsElement(XMLConfigBuilder.java:280) org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:116) org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

2023-05-10 上传