当前位置: 首页 > news >正文

缓存、注解、分页

 一.缓存

        作用:应用查询上,内存中的块区域

              缓存查询结果,减少与数据库的交互,从而提高运行效率。

       1.SqlSession 缓存

1. 又称为一级缓存,mybatis自动开启

2. 作用范围:同一个session对象调用同一个<select>,

            第一次访问数据库,缓存到session缓存区。

   示例

//获取学生的Mapper对象
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
//调用方法,获取所有的学生信息
List<Student> list=studentMapper.selectAll();
for (Student stu:list) {
    System.out.println(stu);
}
System.out.println("----------------------------------------------");
//调用方法,获取所有的学生信息
List<Student> list2=studentMapper.selectAll();
for (Student stu:list2) {
    System.out.println(stu);
}

效果:

      2.SqlSessionFactory 缓存

1. 又称为二级缓存,mybatis 不自动开启

2. 作用范围:同一个SqlSessionFactory对象中所有session都可以获取。

3. 打开mapper.xml配置开启二级缓存

      <cache readOnly="true"></cache>

4.只有当session.close()或commit()时,

   才会将session缓存的数据刷新到factory二级缓存中。

5. 适用于:频繁查询,很少被修改。

     实例

SqlSession session=sessionFactory.openSession();
//获取学生的Mapper对象
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
//调用方法,获取所有的学生信息
List<Student> list=studentMapper.selectAll();
for (Student stu:list) {
    System.out.println(stu);
}
//只有当session.close()commit(),才会将session缓存的数据刷新到factory二级缓存中
session.close();
System.out.println("----------------------------------------------");
SqlSession session2=sessionFactory.openSession();
StudentMapper studentMapper2=session2.getMapper(StudentMapper.class);
//调用方法,获取所有的学生信息
List<Student> list2=studentMapper2.selectAll();
for (Student stu:list2) {
    System.out.println(stu);
}

效果:

二.Mybatis注解

      作用:简化mapper.xml配置,mapper.xml配置和注解可以共存

                 一般动态sql或复杂的sql语句,推荐使用mapper.xml配置

       1. 常用注解

@Delete(delete语句)

等价于<delete>标签

@Insert(insert语句)

等价于<insert>标签

@Update(update语句)

等价于<update>标签

@Select(select语句)

等价于<select>标签

        示例:

@Delete("delete from student where sid=#{id}")
public int deleteById(int id);

@Select("select * from student")
public List<Student> selectAll();

@Insert("insert into student values(#{sid},#{stuName},#{age},#{tid})")
public int  add(Student stu);

@Update("update student set stu_name=#{stuName},age=#{age},tid=#{tid} where sid=#{sid} ")
public int  update(Student stu);

三.PageHelper 分页插件

     PageHelper 是 MyBatis 中比较著名的分页插件,它提供了多种分页方式(例如 MySQL 和 Oracle 分页方式),支持多种数据库,并且使用非常简单。

   下面就介绍一下 PageHelper 的使用方式。

     1.pom.xml引入依赖

<!--分页-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.11</version>
</dependency>

      2.mybatis.xml配置文件中添加 PageHelper 的插件

<!--添加 PageHelper 分页插件-->
<!--com.github.pagehelper.PageInterceptor  PageHelper 插件的名称,
   dialect 属性用于指定数据库类型(支持多种数据库)-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="helperDialect" value="mysql"/>
    </plugin>
</plugins>

     3.查询所有的老师信息的mapper

public interface TeacherMapper {
    @Select("select * from teacher")
    List<Teacher> selectAll();
}

      4.在查询方法中使用分页插件查询当前页的商品信息

@Test
public void testTeacherPage() {
    TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
    //开启分页功能,在查询之前设置分页的当前页以及每页的条数
    PageHelper.startPage(2,2);
    //执行查询操作,获取查询数据

    List<Teacher> allTeachers = teacherMapper.selectAll();
    //通过PageInfo封装查询的list数据集合以及分页相关的数据
    PageInfo<Teacher> pageInfo = new PageInfo<>(allTeachers);
    System.out.println("pageInfo = " + pageInfo);
    long total = pageInfo.getTotal(); // 获取总记录数
    System.out.println("total = " + total);
    int pages = pageInfo.getPages();  // 获取总页数
    System.out.println("pages = " + pages);
    int pageNum = pageInfo.getPageNum(); // 获取当前页码
    System.out.println("pageNum = " + pageNum);
    int pageSize = pageInfo.getPageSize(); // 获取每页显示记录数
    System.out.println("pageSize = " + pageSize);
    List<Teacher> list = pageInfo.getList(); //获取查询页的数据集合
    for (Teacher t:list) {
        System.out.println(t);
    }
}

PageInfo对象获取分页相关信息的属性

方法名

描述

pageNum

当前页的页号

pageSize

每页显示的条数

size

当前页的实际条数

total

总条数

pages

总页数

prePage

上一页的页号

nextPage

下一页的页号

isFirstPage

是否为第一页

isLastPage

是否为最后一页

hasPreviousPage

是否存在上一页

hasNextPage

是否存在下一页

navigatePages

导航分页的页码数

navigatepageNums

导航分页的页码,[1,2,3,4,5]

相关文章:

缓存、注解、分页

一.缓存 作用&#xff1a;应用查询上&#xff0c;内存中的块区域。 缓存查询结果&#xff0c;减少与数据库的交互&#xff0c;从而提高运行效率。 1.SqlSession 缓存 1. 又称为一级缓存&#xff0c;mybatis自动开启。 2. 作用范围&#xff1a;同一…...

【数据结构与算法】第9课—数据结构之二叉树(链式结构)

文章目录 1. 二叉树的性质2. 链式结构二叉树3. 二叉树链式结构的4种遍历方式4. 二叉树节点个数5. 二叉树的叶子节点个数6. 二叉树第k层节点个数7. 二叉树的高度/深度8. 二叉树查找值为x的节点9. 二叉树的销毁10. 判断是否为完全二叉树11. 二叉树练习题11.1 单值二叉树11.2 相同…...

【CSS】居中样式

对于行内元素&#xff0c;使用 text-align: center。对于已知宽度的块级元素&#xff0c;使用 margin: 0 auto。对于需要灵活布局的元素&#xff0c;使用 Flexbox 或 Grid。 flex .parent {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂…...

Vite环境下uniapp Vue 3项目添加和使用环境变量的完整指南

一、引言 在uniapp项目中&#xff0c;合理配置环境变量对于提高开发效率和保障项目安全至关重要。Vite作为新一代的前端构建工具&#xff0c;为环境变量的管理提供了简洁而强大的支持。下面&#xff0c;我们将一步步学习如何在Vite环境下为uniapp Vue 3项目添加和使用环境变量…...

mysql-springboot netty-flink-kafka-spark(paimon)-minio

1、下载spark源码并编译 mkdir -p /home/bigdata && cd /home/bigdata wget https://archive.apache.org/dist/spark/spark-3.4.3/spark-3.4.3.tgz 解压文件 tar -zxf spark-3.4.3.tgz cd spark-3.4.3 wget https://raw.githubusercontent.com/apache/incubator-celeb…...

讨论一个mysql事务问题

最近在阅读一篇关于隔离级别的文章&#xff0c;文章中提到了一种场景&#xff0c;我们下面来分析一下。 文章目录 1、实验环境2、两个实验的语句执行顺序3、关于start transaction和start transaction with consistent snapshot4、实验结果解释4.1、实验14.2、实验24.3、调整实…...

pytest插件精选:提升测试效率与质量

pytest作为Python生态系统中备受推崇的测试框架&#xff0c;以其简洁、灵活和可扩展性赢得了广泛的认可。通过合理使用pytest的各种插件&#xff0c;可以显著提升测试效率、增强测试的可读性和可维护性。 pytest-sugar&#xff1a;提升测试体验 pytest-sugar是一款增强版的py…...

HTB:Sightless[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 继续使用nmap对靶机开放的TCP端口进行脚本、服务扫描 首先尝试对靶机FTP服务进行匿名登录 使用curl访问靶机80端口 使用浏览器可以直接访问该域名 使用浏览器直接访问该子域 Getshell 横向移动 查…...

国产化浪潮下,高科技企业如何选择合适的国产ftp软件方案?

高科技企业在数字化转型和创新发展中&#xff0c;数据资产扮演着越来越重要的角色。在研发过程中产生的实验数据、设计文档、测试结果等&#xff0c;专利、商标、版权之类的创新成果等&#xff0c;随着信息量急剧增加和安全威胁的复杂化&#xff0c;传统的FTP软件已经不能满足这…...

自注意力机制

当输入一系列向量&#xff0c;想要考虑其中一个向量与其他向量之间的关系&#xff0c;决定这个向量最后的输出 任意两个向量之间的关系计算 计算其他向量对a1的关联性 多头注意力机制 图像也可以看成一系列的向量&#xff0c;交给自注意力机制处理&#xff0c;CNN是特殊的自注意…...

抽象工厂模式详解

1. 引言 1.1 设计模式概述 设计模式&#xff08;Design Patterns&#xff09;是软件开发中解决常见问题的一种最佳实践。它们通过总结经验&#xff0c;提供了一套被验证有效的代码结构和设计原则&#xff0c;帮助开发者提高代码的可维护性、可重用性和可扩展性。 设计模式主…...

【Linux】软硬链接和动静态库

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…...

HarmonyOS入门 : 获取网络数据,并渲染到界面上

1. 环境搭建 开发HarmonyOS需要安装DevEco Studio&#xff0c;下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手&#xff0c;比如获取网络数据&#xff0c;并将其渲染到界面上。 本文就是基于…...

【贪心】【哈希】个人练习-Leetcode-1296. Divide Array in Sets of K Consecutive Numbers

题目链接&#xff1a;https://leetcode.cn/problems/divide-array-in-sets-of-k-consecutive-numbers/description/ 题目大意&#xff1a;给出一个数组nums[]和一个数k&#xff0c;求nums[]能否被分成若干个k个元素的连续的子列。 思路&#xff1a;比较简单&#xff0c;贪心就…...

【数据库实验一】数据库及数据库中表的建立实验

目录 实验1 学习RDBMS的使用和创建数据库 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六、实验结果 七、评价分析及心得体会 实验2 定义表和数据库完整性 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六…...

Web服务nginx基本实验

安装软件&#xff1a; 启动服务&#xff1a; 查看Nginx服务器的网络连接信息&#xff0c;监听的端口&#xff1a; 查看默认目录&#xff1a; 用Windows访问服务端192.168.234.111的nginx服务&#xff1a;&#xff08;防火墙没有放行nginx服务&#xff0c;访问不了&#xff09; …...

Ubuntu实现双击图标运行自己的应用软件

我们知道在Ubuntu上编写程序&#xff0c;最后编译得到的是一个可执行文件&#xff0c;大致如下 然后要运行的时候在终端里输入./hello即可 但是这样的话感觉很丑很不方便&#xff0c;下边描述一种可以类似Windows上那种双击运行的实现方式。 我们知道Ubuntu是有一些自带的程序…...

js id字符串转数组

将一个逗号分隔的字符串&#xff08;例如 "12,123,213,"&#xff09;转换为一个 JavaScript 数组&#xff0c;并去除多余的逗号&#xff0c;可以使用以下几种方法。这里我将展示几种常见的方式&#xff1a; 方法 1: 使用 split 和 filter 你可以使用 split 方法将字…...

《手写Spring渐进式源码实践》实践笔记(第十八章 JDBC功能整合)

文章目录 第十八章 JDBC功能整合背景技术背景JDBC JdbcTemplate关键特性 用法示例业务背景 目标设计实现代码结构类图实现步骤 测试事先准备属性配置文件测试用例测试结果&#xff1a; 总结 第十八章 JDBC功能整合 背景 技术背景 JDBC JDBC&#xff08;Java Database Conne…...

边缘计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 引言 边缘计算概述 定义与原…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...