第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Mybatis二級(jí)緩存學(xué)習(xí)入門

標(biāo)簽:
Java SSM 數(shù)據(jù)庫
概述

本文将带你深入了解Mybatis二级缓存的原理与应用,帮助你掌握如何开启和配置二级缓存,提升查询性能。文章详细讲解了二级缓存的工作机制、配置方法以及使用案例,助你轻松应对实际开发中的缓存需求。mybatis二级缓存学习入门教程,带你一步步掌握Mybatis缓存机制的核心知识。

Mybatis缓存简介

Mybatis 是一个优秀的持久层框架,它支持自定义 SQL 查询、存储过程和高级映射。Mybatis 通过 XML 或注解的方式查询数据库,将每一条查询结果映射成 Java 对象,并且将 Java 对象封装成集合返回。Mybatis 是一个半自动化的持久化框架,它可以通过 XML 文件或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Object)类到数据库的列、表和关系。Mybatis 的核心特性之一是缓存机制,它能够提升查询性能,减少数据库的访问次数。缓存机制分为一级缓存和二级缓存。

什么是Mybatis缓存

Mybatis 缓存机制分为一级缓存和二级缓存。一级缓存主要负责缓存用户的单个会话。二级缓存主要负责缓存多个会话的单个命名空间的 SQL 语句查询结果。

Mybatis缓存的分类
  • 一级缓存(Local Cache):Mybatis 为每一个 SqlSession 都有一个与之对应的本地缓存,当 SqlSession 执行查询时,会将返回的结果进行缓存,当下次查询时,如果缓存中存在有效数据,则直接返回,不需要再次查询数据库。
  • 二级缓存(Local Cache):Mybatis 除了提供一级缓存外,还提供二级缓存,它与一级缓存不同,二级缓存是所有 SqlSession 共享的缓存,当 SqlSession 执行查询时,会将返回的结果进行缓存,当下次查询时,如果缓存中存在有效数据,则直接返回,不需要再次查询数据库。二级缓存默认关闭,如果需要使用二级缓存,需要手动开启。
Mybatis一级缓存详解
一级缓存的作用范围

一级缓存是基于 SqlSession 的,也就是说,当一个 SqlSession 执行多个查询时,这些查询的结果将会被缓存。默认情况下,这个 SqlSession 的缓存会被在同一个 SqlSession 中重复的查询所使用,从而避免了多次执行相同 SQL 语句。

一级缓存的工作原理

SqlSession 执行查询时,会将结果集中的数据缓存起来,当下次查询时,如果缓存中存在有效数据,则直接返回缓存中的数据,否则从数据库中查询数据并放入缓存。缓存的失效机制是由 SqlSession 自身控制的,当 SqlSession 关闭后,缓存自动失效。

示例代码

// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("SqlMapConfig.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
List<User> users = sqlSession.selectList("com.itheima.mapper.UserMapper.findAll");
// 将结果存入缓存
for (User user : users) {
    sqlSession.getConfiguration().addMappedStatement("com.itheima.mapper.UserMapper.findAll");
    sqlSession.getConfiguration().getMappedStatement("com.itheima.mapper.UserMapper.findAll").getBoundSql((Object) null);
    sqlSession.getConfiguration().getCache("com.itheima.mapper.UserMapper").putObject(sqlSession, "com.itheima.mapper.UserMapper.findAll", users);
}
// 关闭 SqlSession
sqlSession.close();

示例代码详解

// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("SqlMapConfig.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
List<User> users = sqlSession.selectList("com.itheima.mapper.UserMapper.findAll");
// 将结果存入缓存
for (User user : users) {
    // 获取映射语句配置
    sqlSession.getConfiguration().addMappedStatement("com.itheima.mapper.UserMapper.findAll");
    // 获取映射语句的绑定 SQL
    sqlSession.getConfiguration().getMappedStatement("com.itheima.mapper.UserMapper.findAll").getBoundSql((Object) null);
    // 获取缓存配置
    sqlSession.getConfiguration().getCache("com.itheima.mapper.UserMapper").putObject(sqlSession, "com.itheima.mapper.UserMapper.findAll", users);
}
// 关闭 SqlSession
sqlSession.close();
一级缓存的使用场景

一级缓存主要适用于以下场景:

  • 当一个 SqlSession 中执行多次相同 SQL 语句时,可以使用缓存。
  • 当一个 SqlSession 中执行多次查询操作时,可以使用缓存。
  • 当一个 SqlSession 中执行多次插入、更新、删除操作时,可以使用缓存(但是需要注意,插入、更新、删除操作会影响缓存的有效性,因此需要手动更新缓存)。
Mybatis二级缓存详解
二级缓存的作用范围

二级缓存是基于 Mapper 的,也就是说,当多个 SqlSession 共享同一个命名空间的 Mapper 时,这些 SqlSession 执行的查询结果将会被缓存。二级缓存默认是关闭的,需要手动开启。

二级缓存的工作原理

SqlSession 执行查询时,会将结果集中的数据缓存在二级缓存中,当下次相同的 SqlSession 执行相同的查询时,如果缓存中存在有效数据,则直接返回缓存中的数据,否则从数据库中查询数据并放入缓存。缓存的失效机制是由 SqlSession 自身控制的,当 SqlSession 关闭后,缓存自动失效。

示例代码

<!-- 配置二级缓存 -->
<cache />

二级缓存的默认配置

二级缓存默认是关闭的,需要手动开启。默认情况下,二级缓存存储对象为 Serializable 类型,存储结构为 HashMap,缓存的最大元素数量为 1024,缓存的存活时间为 60 秒。

如何开启二级缓存

为了开启二级缓存,可以在 SqlMapConfig.xml 配置文件中添加 <cache /> 标签,也可以在 Mapper.xml 文件中添加 <cache /> 标签。

示例代码

<!-- SqlMapConfig.xml -->
<configuration>
    <cache />
</configuration>
<!-- Mapper.xml -->
<cache />

示例代码详解

<!-- SqlMapConfig.xml -->
<configuration>
    <cache />
</configuration>
<!-- Mapper.xml -->
<cache />
Mybatis二级缓存的使用案例
实战演示:配置二级缓存

为了演示如何配置和使用二级缓存,我们需要在 SqlMapConfig.xmlMapper.xml 文件中添加 <cache /> 标签。

示例代码

<!-- SqlMapConfig.xml -->
<configuration>
    <cache />
</configuration>
<!-- Mapper.xml -->
<cache />

示例代码详解

<!-- SqlMapConfig.xml -->
<configuration>
    <cache />
</configuration>
<!-- Mapper.xml -->
<cache />
实战演示:测试二级缓存效果

为了测试二级缓存的效果,我们需要编写一个简单的测试用例。

示例代码

// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("SqlMapConfig.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
List<User> users = sqlSession.selectList("com.itheima.mapper.UserMapper.findAll");
// 关闭 SqlSession
sqlSession.close();
// 重新创建 SqlSession
SqlSession sqlSession2 = sqlSessionFactory.openSession();
// 执行查询
List<User> users2 = sqlSession2.selectList("com.itheima.mapper.UserMapper.findAll");
// 关闭 SqlSession
sqlSession2.close();

示例代码详解

// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("SqlMapConfig.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
List<User> users = sqlSession.selectList("com.itheima.mapper.UserMapper.findAll");
// 关闭 SqlSession
sqlSession.close();
// 重新创建 SqlSession
SqlSession sqlSession2 = sqlSessionFactory.openSession();
// 执行查询
List<User> users2 = sqlSession2.selectList("com.itheima.mapper.UserMapper.findAll");
// 关闭 SqlSession
sqlSession2.close();
Mybatis二级缓存的注意事项
常见问题与解决方案

常见问题

  • 二级缓存失效:当多个线程同时访问同一个命名空间的 Mapper 时,如果其中一个线程修改了缓存中的数据,其他线程可能会访问到失效的数据。
  • 二级缓存不生效:当配置文件中没有开启二级缓存,或者配置文件中的命名空间不正确时,二级缓存将不会生效。

解决方案

  • 为每个线程创建一个新的 SqlSession,以避免缓存失效的问题。
  • 检查配置文件中的命名空间是否正确,确保配置文件中已经开启了二级缓存。
二级缓存的局限性
  • 二级缓存默认存储的数据是 Serializable 类型,因此,如果需要存储的数据不是 Serializable 类型时,需要手动配置缓存的存储类型。
  • 二级缓存默认的最大元素数量为 1024,如果需要存储的数据量较大时,需要手动配置缓存的最大元素数量。
  • 二级缓存默认的存活时间为 60 秒,如果需要存储的数据存活时间较长时,需要手动配置缓存的存活时间。
  • 二级缓存默认存储结构为 HashMap,如果需要存储的数据结构较为复杂时,需要手动配置缓存的存储结构。
总结与扩展阅读
Mybatis二级缓存的优势
  • 二级缓存可以提高查询性能,减少数据库的访问次数。
  • 二级缓存可以降低数据库的负载,减轻数据库的压力。
  • 二级缓存可以提高系统的响应速度,提高用户体验。
推荐的学习资源
  • 慕课网:提供 Mybatis 的在线课程,帮助学习者快速掌握 Mybatis 的使用方法。
  • Mybatis 官方文档:提供 Mybatis 的详细配置说明,帮助学习者深入了解 Mybatis 的工作原理。
  • Mybatis GitHub 仓库:提供 Mybatis 的源码,帮助学习者深入了解 Mybatis 的实现细节。
  • Mybatis 问答社区:提供 Mybatis 的问答平台,帮助学习者解决 Mybatis 的使用问题。
  • Mybatis 技术交流群:提供 Mybatis 的技术交流平台,帮助学习者与其他 Mybatis 使用者交流经验。
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消