mybatis分页、延迟加载、立即加载、一级缓存、二级缓存

mybatis分页、延迟加载、立即加载、一级缓存、二级缓存

    • 分页
    • 延迟加载和立即加载
    • 缓存
      • 一级缓存
      • 二级缓存

分页

分类

  1. 使用Limit,来进行分页;物理分页
  2. 使用RowBounds集合来保存分页需要数据,来进行分页;逻辑分页;本质是全查,只是显示部分
  3. 使用分页插件来进行分页;物理分页

方式一:

//limit分页@Select("select * from student limit #{arg0},#{arg1}")public List<Student> selectStudentLimit(int sp,int cp);//获取数据
List<Student> slist = sm.selectStudentLimit((1-1)*3,3);

方式二:

//RowBounderspublic List<Student> selectStudentRB(RowBounds rb);//获取数据
List<Student> slist = sm.selectStudentRB(new RowBounds(2,3));

方式三:

首先导入两个jar包:

在这里插入图片描述

配置插件:

<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>

在这里插入图片描述

//分页@Select("select * from student")public List<Student> selectStudentPageHelper();

调用:

Page<Object> page = PageHelper.startPage(1, 3);
List<Student> list = mapper.selectStudentPageHelper();
list.forEach(System.out::println);//page对象可以获取
System.out.println(page);
//详细分页对象
PageInfo<Studnet> pageinfo = new PageInfo<Student>(list,3);
System.out.println(pageinfo);

在这里插入图片描述

字段含义
pageNum当前页的页码
pageSize每页显示的条数
size当前页显示的真实条数
total总记录数
pages总页数
prePage上一页的页码
nextPage下一页的页码
isFirstPage / isLastPage是否为第一页/是否为最后一页
hasPrevivousPage / hasNextPage是否存在上一页/是否存在下一页
navigatePagesd导航分页的码数
navigatepageNumsd导航分页的页码,[1,2,3,4…]

延迟加载和立即加载

立即加载:不管用不用信息,只要调用,马上发起查询并进行加载;通常,当 一对一或者多对一的时候需要立即加载

比如:当我们查询学生信息时,就需要知道学生在哪个班级中,所以就需要立马去查询班级的信息

延迟加载:在真正使用数据时才发起查询,不用的时候不查询,按需加载(也叫 懒加载);通常, 一对多,或者多对多的是需要使用延迟加载

比如:在查询班级信息,每个班级都会有很多的学生(假如每个班有100个学生),如果我们只是查看班级信息,但是学生对象也会加载到内存中,会造成浪费。所以我门需要进行懒加载,当确实需要查看班级中的学生信息,我门在进行加载班级中的学生信息。

延迟加载的配置

在这里插入图片描述

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

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

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

aggressiveLazyLoading = false,mybatis 按需求加载。

sqlmapper中:

在这里插入图片描述

注解方式开启

//开启二级缓存
@CacheNamespace(blocking = true)
public interface StudentMapper {...
}

缓存

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

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

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

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

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

适合使用缓存:经常查询并且不经常改变的 、数据的正确与否对最终结果影响不大的 。比如:一个公司的介绍,新闻等

不适合使用缓存:经常改变的数据、数据的正确与否对最终结果影响很大。比如商品的库存,股市的牌价等

数据的正确与否对最终结果影响很大

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

一级缓存

一级缓存会话 session 级别的缓存,针对一次会话操作内,默认开启

在这里插入图片描述

public static void main(String[] args) {SqlSession sqlSession = DaoUtil.getSqlSession();StudentMapper stuMapper = sqlSession.getMapper(StudentMapper.class);Student s = stuMapper.findStudentBySid(1);//SqlSession sqlSession2 = DaoUtil.getSqlSession();//StudentMapper stuMapper2 = sqlSession2.getMapper(StudentMapper.class);Student s2 = stuMapper2.findStudentBySid(1);System.out.println(s == s2);//true//		DaoUtil.closeResource(sqlSession);// 1. 不同的SqlSessionSqlSession sqlSession2 = DaoUtil.getSqlSession();StudentMapper stuMapper2 = sqlSession2.getMapper(StudentMapper.class);		Student s2 = stuMapper2.findStudentBySid(1);System.out.println(s2);System.out.println(s == s2);//falseDaoUtil.closeResource(sqlSession2);// 2. 在同一个sqlSession中进行增删改操作int ret = stuMapper.addStudent(new Student());System.out.println(ret);// 3. 主动的清空缓存sqlSession.clearCache();// 4. sql语句不同Student s2 = stuMapper.findStudentBySid(1);System.out.println(s2);System.out.println(s == s2);DaoUtil.closeResource(sqlSession);	}

一级缓存失效的四种情况

  1. 不同SqlSession对应不同的一级缓存
  2. 同一个SqlSession单查询条件不同
  3. 同一个SqlSession两次查询期间执行了任何一次增删改操作
  4. 同一个SqlSession两次查询期间手动清空了缓存

二级缓存

不会用的

在这里插入图片描述

在这里插入图片描述

特点:

  1. Mybatis的二级缓存相对于一级缓存来说,实现了缓存数据的共享,可控性也更强;
  2. 极大可能会出现错误数据,有设计上的缺陷, 安全使用的条件比较苛刻;
  3. 分布式环境下,必然会出现读取到错误 数据,所以不推荐使用。

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

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

相关文章

Linux/Networked

Enumeration nmap 网站更新之后有了一个引导模式&#xff0c;更利于学习了&#xff0c;之前看ippsec的视频&#xff0c;要不总是没有思路&#xff0c;现在出现的问题多了提示也更多了&#xff0c;还没有使用&#xff0c;一会用用再说 首先&#xff0c;第一个问题是“目标上正…

大数据毕业设计:基于python美食推荐系统+爬虫+Echarts可视化+协同过滤推荐算法+Django框架(源码)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

数据结构和算法的部分例题(力扣)

1.数组 1.1 合并一个数组的两个有序区间 public class MargTwo {public static void main(String[] args) {int[] arr1{1,5,6,2,4,10,11};int[] arr2new int[arr1.length];marg2(arr1,0,2,3,6,arr2);}private static void marg2(int[]arr1,int iStar,int iEnd,int jStar,int j…

嵌入式-Stm32-江科大基于标准库的GPIO4个小实验

文章目录 一 、硬件介绍二 、实验&#xff1a;LED闪烁、LED流水灯、蜂鸣器提示2.1 需求1&#xff1a;面包板上的LED以1s为周期进行闪烁。亮0.5s,灭0.5s.....2.2 需求2: 8个LED实现流水灯 三、硬件介绍-按键开关、光敏电阻四、 实验 按键控制LED、光敏传感器控制蜂鸣器4.1 需求1…

【MYSQL】存储引擎MyISAM和InnoDB

MYSQL 存储引擎 查看MySQL提供所有的存储引擎 mysql> show engines; mysql常用引擎包括&#xff1a;MYISAM、Innodb、Memory、MERGE 1、MYISAM&#xff1a;全表锁&#xff0c;拥有较高的执行速度&#xff0c;不支持事务&#xff0c;不支持外键&#xff0c;并发性能差&#x…

ubuntu18.04 安装mysql(命令)

1.安装MySQL #命令1 sudo apt-get update #命令2 sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 2.2 检查mysql服务状态 systemctl status mysql.service 3.配置远程访问 在Ubuntu下MySQL缺省是只允许本地访问的 3.1 首先用根用户进入…

深度学习记录--梯度检验

数值逼近 为了对梯度进行检验&#xff0c;需要计算近似误差值来接近梯度 对于单边误差和双边误差公式&#xff0c;其中双边误差与真实梯度相差更小&#xff0c;故一般采用双边误差公式 双边误差 公式&#xff1a; 梯度检验(gradient checking) 对于成本函数&#xff0c;求出…

2018年认证杯SPSSPRO杯数学建模A题(第一阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 探究海豚猎捕时沙丁鱼群的躲避运动模型 A题 海豚与沙丁鱼 原题再现&#xff1a; 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗&#xff0c;所以在距离较远时&#xff0c;海豚只能使用回声定位方法来判断鱼群的整体位置&#xf…

旅游平台day02

1. 用户注册 概述&#xff1a; 常见的注册方式&#xff1a;邮箱注册、手机号注册、昵称注册、或者以上几种同时支持 本项目仅仅支持手机号注册 需求&#xff1a; 项目启动后&#xff0c;访问regist.html进入注册页面 手机号校验 前后台都需要对手机号进行校验 前端校验&am…

iOS上h5长按识别图片二维码,图片会默认放大,禁用这一默认行为

iOS上h5长按识别图片二维码&#xff0c;图片会默认放大&#xff0c;禁用这一默认行为 测试代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

ES可视化工具--ElasticHD

说明 ElasticHD 是 github 上的一个开源的项目&#xff0c;所以他没有官方网站&#xff0c;但 github 上的项目界面也可称为是它的官方界面了。 在 github 上直接搜索 ElasticHD 即可找到它&#xff0c;下面我将留下它的直接跳转链接。ElasticHD 下载 在 github 上搜索到之后…

[Error]连接iPhone调试时提示Failed to prepare the device for development.

环境&#xff1a; iPhone 7 Plus iOS 15.8 Xcode14.2 问题&#xff1a; 连接iPhone设备运行时&#xff0c;设备旁提示如下文案。 Failed to prepare the device for development. 这时强行点击运行按钮&#xff0c;会弹窗提示如下文案。 The run destination ZDMiPhone is n…

Apache Doris (六十四): Flink Doris Connector - (1)-源码编译

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. Flink与Doris版本兼容

CTF CRYPTO 密码学-3

题目名称&#xff1a;反编译 题目描述&#xff1a; 分析 题目给出一个pyc后缀的文件&#xff0c;需要使用uncompyle6模块去还原成py文件 uncompyle6简介 uncompyle6 是一个 Python 反编译器&#xff0c;它能够将 Python 字节码&#xff08;.pyc 文件&#xff09;转换回源代码&…

【征服redis7】谈谈Redis的RDB持久化方式

从现在开始&#xff0c;我们来探讨redis的一个非常重要的问题——集群&#xff0c;要讨论集群&#xff0c;我们需要先理解redis持久化数据的方法&#xff0c;因为集群本质上就是将一个集群的数据同步到其他机器上。 Redis 6的持久化机制主要有两种&#xff1a;RDB&#xff08;…

springboot开启HTTPS

目录 一、前言 HTTP和HTTPS的含义以及区别 二、域名映射 三、添加SSL证书 四、Http转Https 五、内网穿透 一、前言 我们平常写完一个接口&#xff0c;其访问一般都是使用http协议 我们最终想要的结果是使用安全的HTTPS来访问 在我们开始实现之前&#xff0c;我们要先搞明…

烟火识别视频分析系统的应用-河北消防机器人项目

在当前的智能化、信息化时代背景下&#xff0c;河北省消防部门采纳了一项革命性的技术方案 —— 烟火识别视频分析系统&#xff0c;结合消防机器人的使用&#xff0c;大幅提升了火灾预防与应急处理能力。该项目的核心在于通过高精度的视频监控&#xff0c;实时分析识别潜在的火…

【笔记】Helm-3 主题-6 Chart仓库指南

Chart仓库指南 本节介绍如何创建和使用chart仓库。在高层级中&#xff0c;chart仓库是打包的chart存储和分享的位置。 社区的Helm chart仓位于 Artifact Hub &#xff0c;欢迎加入。不过Helm也可以创建并运行您自己的chart仓库。该指南将介绍如何操作。 Artifact Hub 先决条…

Microsoft Word 设置底纹

Microsoft Word 设置底纹 References 打开文档页面&#xff0c;选中特定段落或全部文档 在“段落”中单击“边框”下三角按钮 在列表中选择“边框和底纹”选项 在“边框和底纹”对话框中单击“底纹”选项卡 在图案样式和图案颜色列表中设置合适颜色的底纹&#xff0c;单击“确…

S32K3系列 --- 硬件I2C Mcal配置

前言 网上看到很多I2C的教程,基本都是模拟I2C,现在S32K3的芯片支持硬件I2C,我想着就配一个硬件的出来吧,这边记录一下,供大家学习。 一、I2C原理 这里主要教大家如何去配置,去使用。 原理的话可以参考这篇文章: 一文搞懂I2C通信总线_i2c通信的详细讲解-CSDN博客 I2…