MyBatis详解(6)-- 分页及缓存

MyBatis详解(6)

    • 分页
    • 缓存
        • 特点:
        • 限制:
        • 术语:
        • 加载分类
          • 立即加载:
          • 延迟加载:
          • mybatis缓存:
        • 缓存的适用性
        • MyBatis 缓存分类
        • 一级缓存
          • 注意:
          • 一级缓存未命中
          • 二级缓存
          • 二级缓存的优劣
          • 自定义缓存

分页

方式1:使用limit来分页

方式2:使用Map集合来保存分页需要数据,来进行分页

方式3:使用RowBounds集合来保存分页需要数据,来进行分页

List<Student> list = stuMapper.findStuRowBounds(new RowBounds(2,3));

方式4:使用pageHelper插件

第一步:导包
在这里插入图片描述

第二步:引用插件

<!-- 引用插件 --><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>

第三步:在调用前使用PageHelper.startPage(页码,步长)

//startPage(页码,步长)
PageHelper.startPage(2,3);
List<Student> list = stuMapper.findStudentPageHelger();

缓存

缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲区中,应用程序从缓冲区读取数据。

特点:

数据库取出的数据保存在内存中,具备快速读取和使用。

限制:

读取时无需再从数据库获取,数据可能不是最新的;

术语:

命中:需要的数据在缓存中找到结果。

未命中:需要的数据在缓存中未找到,重新获取。

加载分类
立即加载:

​ 不管用不用信息,只要调用,马上发起查询并进行加载

延迟加载:

​ 在真正使用数据时才发起查询,不用的时候不查询,按需加载(也叫 懒加载)

<!--  <settings>懒加载/延迟加载<setting name="lazyLoadingEnabled" value="true"/>层级加载<setting name="aggressiveLazyLoading" value="false"/></settings>	 -->

如果设置 lazyLoadingEnabled = false,则禁用延迟加载,会级联加载所有关联对象的数据

如果设置 lazyLoadingEnabled = true,默认情况下mybatis 是按层级延时加载的。

aggressiveLazyLoading = true,mybatis 是按层级延时加载

aggressiveLazyLoading = false,mybatis 按需求加载。

mybatis缓存:

减少 Java Application 与数据库的交互次数,从而提升程序的运行效率;

缓存的适用性
  • 适合使用缓存:经常查询并且不经常改变的数据的正确与否对最终结果影响不大的

比如:一个公司的介绍,新闻等

  • 不适合用于缓存:经常改变的数据数据的正确与否对最终结果影响很大

比如:商品的库存,股市的牌价等

MyBatis 缓存分类
一级缓存

会话 session 级别的缓存,针对一次会话操作内;

默认开启,一级缓存只是相对同一个 SqlSession 对象而言。

注意:

当调用sqlsession的修改,添加,删除,commit(),close() 等方法是,就会清空一级缓存

<setting name="localCacheScope" value="SESSION"/>

在这里插入图片描述

一级缓存未命中

在这里插入图片描述

二级缓存

映射器级别的缓存,针对不同Namespace 的映射器;

配置步骤:(xml)
1.在mybatis的sqlMapConfig.xml 中配置

在这里插入图片描述

2.在mybatis的sqlmap中配置(mapper.xml中配置)

在这里插入图片描述

3.在使用的操作中配置(在select标签中配置)

在这里插入图片描述

配置步骤:(注解)
1.在mybatis的sqlMapConfig.xml 中配置

在这里插入图片描述

2.在接口的定义上面直接使用@CacheNamespace 并将blocking设置为true,二级缓存就可以使用了

在这里插入图片描述

二级缓存的优劣
  • Mybatis 的二级缓存相对于一级缓存来说,实现了缓存数据的共享,可控性也更强;

  • 极大可能会出现错误数据,有设计上的缺陷,安全使用的条件比较苛刻;

  • 分布式环境下,必然会出现读取到错误数据,所以不推荐使用

自定义缓存

根据各类不同的缓存机制,自定义缓存的实现方式。

  • 实现 org. apache. ibatis. cache. Cache 接口自定义缓存;

  • 引入 Redis 等第三方内存库作为 MyBatis 缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qq通讯录怎么关闭?QQ好友删除了怎么恢复?

在QQ中&#xff0c;通讯录是我们管理好友和进行聊天的重要工具&#xff0c;但有时候我们可能需要一些隐私保护&#xff0c;不让一些用户通过手机通讯录添加自己。如果您正在思考qq通讯录怎么关闭以及恢复意外删除的好友&#xff0c;本文将为您详细介绍如何关闭QQ通讯录和恢复被…

php实现多进程的几种方式

目录 一&#xff1a;使用pcntl扩展库 二&#xff1a;使用Swoole扩展 三&#xff1a;使用多进程模式PHP-FPM 在PHP中实现多进程主要有以下几种方式&#xff1a; 一&#xff1a;使用pcntl扩展库 pcntl扩展库提供了多线程相关的函数&#xff0c;如pcntl_fork()用于创建子进程…

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录 第三章&#xff1a;死锁资源分配图例一例二 第三章&#xff1a;银行家算法第四章&#xff1a;进程的同步与互斥做题步骤PV操作的代码小心容易和读者写者混 1.交通问题&#xff08;类似读者写者&#xff09;分析代码 2.缓冲区问题&#xff08;第二个缓冲区是复制缓冲区…

RK3568驱动指南|驱动基础进阶篇-进阶6 内核运行ko文件实验——系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试

从零开始做题:逆向 ret2shellcode orw

1.题目信息 BUUCTF在线评测 下载orw时防病毒要关闭 2.题目分析 orw是open、read、write的简写。有时候binary会通过prctl、seccomp进行沙箱保护&#xff0c;并不能getshell。只能通过orw的方式拿到flag。 fdopen&#xff08;‘./flag’); # 打开flag文件&#xff0c;得到fd…

Android MTE技术详解

1.MTE概念 MTE&#xff08;内存标记扩展&#xff09;是ARM v8.5-A新增的一项缓解内存安全的机制。在Android Linux现有的安全机制中&#xff0c;类似的机制有ASAN、HWSAN。但两者因为性能开销代价高昂&#xff0c;不适用于广泛部署&#xff08;仅调试使用&#xff09;。MTE当前…

语义分割 | 基于 VGG16 预训练网络和 Segnet 架构实现迁移学习

Hi&#xff0c;大家好&#xff0c;我是源于花海。本文主要使用数据标注工具 Labelme 对猫&#xff08;cat&#xff09;和狗&#xff08;dog&#xff09;这两种训练样本进行标注&#xff0c;使用预训练模型 VGG16 作为卷积基&#xff0c;并在其之上添加了全连接层。基于标注样本…

【算法专题】动态规划综合篇

动态规划7.0 1. 最长公共子序列2. 不相交的线3. 不同的子序列4. 通配符匹配5. 正则表达式匹配6. 交错字符串7. 两个字符串的最小ASCII删除和8. 最长重复子数组 1. 最长公共子序列 题目链接 -> Leetcode -1143.最长公共子序列 Leetcode -1143.最长公共子序列 题目&#xf…

单张图像三维重建RealFusion 360◦ Reconstruction of Any Object from a Single Image

Luke Melas-Kyriazi&#xff0c; Iro Laina&#xff0c; Christian Rupprecht&#xff0c; Andrea Vedaldi.RealFusion 360◦ Reconstruction of Any Object from a Single Image。RealFusion: 360 Reconstruction of Any Object from a Single Image Abstract We consider th…

升降机SEW MOVIDRIVE变频器设置

SEW变频器Startup 安装好MOVITOOL软件 打开项目开始配置通信连接 以太网连接为例 在此栏输入需要连接的SEW变频器的IP地址,例如:172.25.20.120 设置完成单击“OK” 当设置完成后,请一路OK回到软件管理画面 通信配置正确的软件界面状态 单击红色刷新图标 一切准备就绪后…

DjangoURL调度器(一)

一、介绍 当一个用户请求 Django 站点的一个页面&#xff0c;下面是 Django 系统决定执行哪个 Python 代码使用的算法&#xff1a; Django确定要使用的根URLconf模块&#xff0c;一般是在settings中的ROOT_URLCONF设置的值&#xff0c;但是如果传入 HttpRequest 对象具有一个ur…

Pytest 识别case规则

一、Python测试框架&#xff0c;主要特点有以下几点&#xff1a; 简单灵活&#xff0c;容易上手&#xff1b;支持参数化&#xff1b;能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium/appnium等自动化测试、接口自动化测试&#xff08;pytestrequests…

C#简单使用Yolov5的Onnx格式模型进行目标检测

背景 最近要离职了&#xff0c;同事需要了解一下C#如何使用yolov5系列onnx格式模型进行目标检测&#xff0c;由于其对C#不熟练&#xff0c;可能会影响公司后续的开发进度&#xff0c;所以趁着还在&#xff0c;赶紧把手尾搞好。 方案 1、创建一个C# DotNet 8 控制台项目[可千…

LabVIEW动态数据交换实现数据通信

LabVIEW动态数据交换实现数据通信 介绍了LabVIEW软件在驱动一般多功能接口卡中的应用。LabVIEW作为一种图形化编程平台&#xff0c;被广泛应用于自动测量系统、工业过程自动化等领域。利用LabVIEW驱动实验室中常用的多功能接口卡&#xff0c;以实现数据采集和分析。 系统主要…

bxCAN 主要特性

bxCAN 主要特性 ● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议 ● 比特率高达 1 Mb/s ● 支持时间触发通信方案 发送 ● 三个发送邮箱 ● 可配置的发送优先级 ● SOF 发送时间戳 接收 ● 两个具有三级深度的接收 FIFO ● 可调整的筛选器组&#xff1a; — CAN1 和…

Go语言的100个错误使用场景(一)|代码和项目组织

前言 大家好&#xff0c;这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍&#xff0c;我初步浏览之后&#xff0c;大为惊喜。就像这书中第一章的标题说到的&#xff1a;“Go: Simple to learn but hard to master”&#xff0c;整本书通过分析100…

ASP .NET Core Api 使用过滤器

过滤器说明 过滤器与中间件很相似&#xff0c;过滤器&#xff08;Filters&#xff09;可在管道&#xff08;pipeline&#xff09;特定阶段&#xff08;particular stage&#xff09;前后执行操作。可以将过滤器视为拦截器&#xff08;interceptors&#xff09;。 过滤器级别范围…

MATLAB环境下一种音频降噪优化方法—基于时频正则化重叠群收缩

语音增强是语音信号处理领域中的一个重大分支&#xff0c;这一分支已经得到国内外学者的广泛研究。当今时代&#xff0c;随着近六十年来的不断发展&#xff0c;己经产生了许多有效的语音增强算法。根据语音增强过程中是否利用语音和噪声的先验信息&#xff0c;语音增强算法一般…

基于springboot游戏分享网站源码和论文

网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合&#xff0c;利用java技术建设游戏分享网站&#xff0c;实现游戏分享的信息化。则对于进一步提高游戏分享管理发展&#xff0c;丰富游戏分享管理经验能起到不少的促进作用。 游戏分享网站能够通过互…