Jersey restful Web服务中的ibatis/mybatis缓存

Jersey restful Web服务中的ibatis/mybatis缓存,jersey,ibatis,mybatis,Jersey,Ibatis,Mybatis,我在Jax-RS(Jersey)restfulweb应用程序中使用mybatis。因此,自动地,我没有会话或状态管理 问题是如何使用mybatis的缓存功能?mybatis中的缓存非常简单。根据文件(用户手册第42页) 默认情况下,除了本地会话缓存之外,没有启用缓存,本地会话缓存可以提高性能,并且是解决循环依赖关系所必需的。要启用第二级缓存,只需在SQL映射文件中添加一行: MyBatis 3-用户指南 2011年6月6日43 字面上就是这样 我在这样做时遇到的常见陷阱: 在映射器上添加缓存

我在Jax-RS(Jersey)restfulweb应用程序中使用mybatis。因此,自动地,我没有会话或状态管理


问题是如何使用mybatis的缓存功能?

mybatis中的缓存非常简单。根据文件(用户手册第42页)

默认情况下,除了本地会话缓存之外,没有启用缓存,本地会话缓存可以提高性能,并且是解决循环依赖关系所必需的。要启用第二级缓存,只需在SQL映射文件中添加一行: MyBatis 3-用户指南 2011年6月6日43


字面上就是这样

我在这样做时遇到的常见陷阱:

在映射器上添加缓存元素;如果有依赖实体,请确保在需要时显式刷新缓存。即使在为已设置缓存元素的映射中的元素插入、更新、删除时已为您完成刷新,但有时由于在不同的xml映射中定义了更新/删除/etc,您必须刷新缓存

基本上,当您考虑缓存时,您应该问自己,“当这个实体被更改时,我是否希望它刷新另一个映射中的实体的缓存?”如果答案是肯定的,则使用cache ref元素,而不仅仅是cache

文件第45页中的Ex:

<cache-ref namespace=”com.someone.application.data.SomeMapper”/>

MyBatis中的缓存非常简单。根据文件(用户手册第42页)

默认情况下,除了本地会话缓存之外,没有启用缓存,本地会话缓存可以提高性能,并且是解决循环依赖关系所必需的。要启用第二级缓存,只需在SQL映射文件中添加一行: MyBatis 3-用户指南 2011年6月6日43


字面上就是这样

我在这样做时遇到的常见陷阱:

在映射器上添加缓存元素;如果有依赖实体,请确保在需要时显式刷新缓存。即使在为已设置缓存元素的映射中的元素插入、更新、删除时已为您完成刷新,但有时由于在不同的xml映射中定义了更新/删除/etc,您必须刷新缓存

基本上,当您考虑缓存时,您应该问自己,“当这个实体被更改时,我是否希望它刷新另一个映射中的实体的缓存?”如果答案是肯定的,则使用cache ref元素,而不仅仅是cache

文件第45页中的Ex:

<cache-ref namespace=”com.someone.application.data.SomeMapper”/>


是的,但这是一个无状态的Web服务,不是MVC应用程序。我没有会话。MyBatis中的缓存都是在内部完成的;不管你决定把它放在什么环境中。因此,只要您遵循“范围和生命周期”部分(第10页)中的指导原则,就不重要了;缓存应该可以正常工作。因此,请使用SqlSessionFactoryBuilder创建SqlSessionFactory。确保您的SqlSessionFactory实例是一个单例,并使用它为每个请求创建一个新的SqlSession。是的,但这是一个无状态Web服务,而不是MVC应用程序。我没有会话。MyBatis中的缓存都是在内部完成的;不管你决定把它放在什么环境中。因此,只要您遵循“范围和生命周期”部分(第10页)中的指导原则,就不重要了;缓存应该可以正常工作。因此,请使用SqlSessionFactoryBuilder创建SqlSessionFactory。确保您的SqlSessionFactory实例是单例,并使用它为每个请求创建新的SqlSession。