`

mybatis一级缓存

阅读更多

 

mybatis一级缓存: 在同一个sqlsession中,查询语句相同且查询参数相同,第二次查询时取缓存的数据

 

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.mgr.user.po.UserPO;

//mybatis一级缓存
public class SessionTest {

 public static void main(String[] args)throws Exception{
  ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
  DefaultSqlSessionFactory factory = (DefaultSqlSessionFactory)app.getBean("sqlSessionFactory");
  
  mybatisFirstCache(factory); //一级缓存:必须在同一个会话里 
  
  //mybatisFirstCache2(factory); 
  //mybatisFirstCache3(factory);
  
 }
 
 /**
  * mybatis一级缓存: 同一个会话里的sql会缓存:
  * 查询语句相同且查询参数相同,第二次在同一个会话里取缓存的结果
  * @param factory
  */
 static void mybatisFirstCache(DefaultSqlSessionFactory factory){
  SqlSession session = factory.openSession();
  
  String statement = "cn.mgr.user.mapper.UserMapper.findByID";
  UserPO user = new UserPO();
  user.setUserId(100);
  UserPO u = session.selectOne(statement, user);
  System.out.println("第一次查询:"+u.getUserName());
  
  user = new UserPO();
  user.setUserId(100);
  u = session.selectOne(statement, user);
  System.out.println("第二次查询:"+u.getUserName());
  
  session.close();
 }
 
 /**
  * mybatis一级缓存: 同一个会话里的sql会缓存:
  * 查询语句相同且查询参数不同,第二次仍然会查询数据库
  * @param factory
  */
 static void mybatisFirstCache2(DefaultSqlSessionFactory factory){
  SqlSession session = factory.openSession();
  
  String statement = "cn.mgr.user.mapper.UserMapper.findByID";
  UserPO user = new UserPO();
  user.setUserId(100);
  UserPO u = session.selectOne(statement, user);
  System.out.println("第一次查询:"+u.getUserName());
  
  user = new UserPO();
  user.setUserId(101);
  u = session.selectOne(statement, user);
  System.out.println("第二次查询:"+u.getUserName());
  
  session.close();
 }
 
 /**
  * mybatis一级缓存: 不同的会话
  * 查询语句相同且查询参数不同,第二次仍然会查询数据库
  * @param factory
  */
 static void mybatisFirstCache3(DefaultSqlSessionFactory factory){
  SqlSession session = factory.openSession();
  
  String statement = "cn.mgr.user.mapper.UserMapper.findByID";
  UserPO user = new UserPO();
  user.setUserId(100);
  UserPO u = session.selectOne(statement, user);
  System.out.println("第一次查询:"+u.getUserName());
  session.close();
  
  session = factory.openSession();
  user = new UserPO();
  user.setUserId(100);
  u = session.selectOne(statement, user);
  System.out.println("第二次查询:"+u.getUserName());
  
  session.close();
 }
}

0
0
分享到:
评论

相关推荐

    mybatis一级缓存和二级缓存简单示例

    本文将深入讲解 MyBatis 的一级缓存和二级缓存,并通过一个简单的示例进行说明。 ### 一级缓存 一级缓存是 Session 级别的缓存,也称为本地缓存(Local Cache)。每当我们在一个 SqlSession 中执行了 CRUD 操作,...

    深入理解MyBatis中的一级缓存与二级缓存

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    mybatis二级缓存

    MyBatis一级缓存是SqlSession级别的,而二级缓存则是在整个Mapper配置范围内的全局缓存,可以跨SqlSession共享数据。 在MyBatis中,二级缓存的实现原理如下: 1. 数据读取时,如果命中二级缓存,直接从内存中返回...

    MyBatis一级缓存避坑完全指南

    MyBatis一级缓存避坑完全指南 MyBatis一级缓存是MyBatis框架中的一种缓存机制,用于提高数据库查询的性能。缓存的作用域为一次会话中,缓存随着会话(SqlSession)的创建而产生,随着会话结束而释放。在一次会话中,...

    springMybatis+redis三级缓存框架

    如果一级缓存中未找到所需数据,系统会查询二级缓存(Redis)。如果二级缓存中也没有,那么数据将从数据库中获取,并同时存入一级和二级缓存,形成三级缓存机制。 集成Spring和MyBatis可以利用Spring的依赖注入和...

    mybatis二级缓存学习

    MyBatis的一级缓存是SqlSession级别的,同一个SqlSession内的多次查询会复用之前的结果,避免了重复执行SQL。然而,当SqlSession关闭或提交时,一级缓存就会被清空。二级缓存则是在Mapper(或Namespace)级别,跨...

    从0到1项目搭建-集成 Redis 配置MyBatis二级缓存

    基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。

    MyBatis缓存(一级缓存、二级缓存)

    缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...

    mybatis二级缓存扩展-与redis集成

    在大型系统中,为了提高数据访问效率,MyBatis提供了二级缓存机制。本文将深入探讨如何对MyBatis的二级缓存进行扩展,并将其与Redis集成,以充分利用分布式缓存的优势。 MyBatis的二级缓存是基于全局的,它允许不同...

    Mybatis的以及缓存和二级缓存(案例).mhtml

    此文章是对Mybatis框架的一级缓存一级二级缓存的描述,包括他们的作用,案例,以及部分源码分析,对一级缓存以及二级缓存进行了详细的描述以及概括,还有如何使用等内容

    深入理解Mybatis一级缓存

    MyBatis一级缓存是其默认提供的性能优化机制,它主要存在于SqlSession的生命周期内。在SqlSession开启和关闭之间,MyBatis会维护一个本地缓存(Local Cache),用于存储执行的SQL语句和对应的查询结果。当同一个...

    mybatis一二级缓存

    在 MyBatis 中,一级缓存和二级缓存是两个重要的性能优化手段,它们可以有效减少对数据库的访问,提高系统的响应速度。下面将详细阐述这两个缓存机制。 ### 一级缓存 一级缓存是 MyBatis 默认开启的本地会话缓存,...

    MyBatis 二级缓存 关联刷新实现

     Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。  一级缓存只是相对于同一个SqlSession而言。也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一...

    深入了解MyBatis二级缓存

    其中,二级缓存是MyBatis中的一种高级缓存机制,它可以将查询结果缓存在内存中,以便下次查询时直接从缓存中获取结果,减少数据库查询次数,提高应用程序的性能。本文将深入了解MyBatis二级缓存,探索其工作原理、...

    mybatis一级二级缓存流程图.drawio

    mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio

    mybatis+redis缓存配置

    MyBatis提供了两种级别的缓存支持:一级缓存和二级缓存。 - **一级缓存**:也称为本地会话缓存,它的生命周期是伴随着一次会话(SqlSession)的开始和结束。一级缓存默认开启且无法关闭,主要用于减少同一个会话内...

    深入了解MyBatis二级缓存共6页.pdf.zip

    MyBatis的一级缓存默认存在于SqlSession级别,而二级缓存则是一个全局性的缓存,跨会话共享,可以显著提升多用户环境下数据读取的效率。 MyBatis的二级缓存由两个主要组件构成:配置(Configuration)和映射器...

    MyBatis-05 缓存机制

    本篇文章将详细探讨MyBatis的缓存机制,包括一级缓存和二级缓存,以及如何将MyBatis与第三方缓存EhCache进行整合。 首先,我们来了解一级缓存。一级缓存是SqlSession级别的,也称为本地缓存。当我们在一个...

    基于Java的Mybatis二级缓存memcache设计源码

    Mybatis二级缓存memcache项目源码,共20个文件,全部采用Java语言编写,涉及多种文件类型如Java源代码、XML配置...该项目是一个基于Java的Mybatis二级缓存memcache设计,旨在提供一个高效、稳定的二级缓存解决方案。

Global site tag (gtag.js) - Google Analytics