教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

Mybatis一级缓存、二级缓存

更新时间:2023年04月20日14时50分 来源:传智教育 浏览次数:

好口碑IT培训

  Mybatis 是一个流行的Java ORM(Object-Relational Mapping)框架,用于将数据库和Java对象之间进行映射。Mybatis框架提供了一级缓存和二级缓存,以提高应用程序的性能。

  一级缓存:

  Mybatis的一级缓存是默认开启的,它是指在同一个SqlSession对象中,如果执行了相同的查询语句,那么第二次执行时,Mybatis将会从缓存中获取查询结果,而不是再次去执行SQL语句。这可以显著提高查询的性能。一级缓存是作用于SqlSession级别的,也就是在同一个SqlSession中执行的查询语句才会使用相同的缓存。

  下面是一个简单的代码演示:

SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 第一次查询
User user1 = userMapper.selectById(1);
// 第二次查询,从缓存中获取结果
User user2 = userMapper.selectById(1);

  在上面的代码中,第一次查询时,Mybatis会执行SQL语句并将结果存入缓存。第二次查询时,Mybatis会从缓存中获取结果,而不是再次执行SQL语句。

  二级缓存:

  Mybatis的二级缓存是作用于Mapper级别的。它可以将同一个Mapper下的查询结果缓存到内存中,以减少对数据库的访问次数。当多个SqlSession对象都使用同一个Mapper时,它们可以共享这个缓存。二级缓存默认是关闭的,需要手动进行配置。

  下面是一个简单的代码演示:

// 配置 UserMapper.xml 文件
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

// 在 Mybatis 配置文件中启用二级缓存
<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

SqlSession sqlSession1 = sqlSessionFactory.openSession();
UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
// 第一次查询,从数据库中获取结果
User user1 = userMapper1.selectById(1);

// 开启新的 SqlSession
SqlSession sqlSession2 = sqlSessionFactory.openSession();
UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
// 第二次查询,从缓存中获取结果
User user2 = userMapper2.selectById(1);

  在上面的代码中,第一次查询时,Mybatis会执行SQL语句并将结果存入缓存。第二次查询时,Mybatis会从缓存中获取结果,而不是再次执行SQL语句。这是因为第二个SqlSession对象与第一个SqlSession对象共享同一个Mapper的二级缓存。需要注意的是,为了使用二级缓存,需要将Mapper对象进行序列化,否则会出现序列化异常。

0 分享到:
和我们在线交谈!