Mybatis学习(2)

news2024/12/27 13:55:32

分页

目的:减少数据的处理量

方式一:使用limit实现分页,核心SQL

sql语法:select * from user limit startIndex,pageSize;

步骤:

1、接口

2、Mapper.xml

3、测试

方式二:使用注解开发 

1、注解在接口上实现

 Mybatis详细的执行流程

方法存在多个参数,所有的参数前面必须加上@Param(“id”)注解

  • 基本类型的参数或String类型,需要加上
  • 引用类型不需要加
  • 如果只有一个基本类型的话,可以忽略,但是建议大家都加上
  • 我们在SQL中引用的就是我们这里的@Param(“id”)中设定的属性名

 可以在工具类(utils)创建的时候实现自动提交事务

 Lombok

偷懒省事!

1、在IDEA中安装Lombok插件(后来版本自带)

2、在项目中导入lombok的jar包

3、在实体类上加注解即可!

@Data:无参构造、get、set、toString、hashcode、equals

@AllArgsConstructor:有参构造

@NoArgsConstructor:无参构造

多对一处理

多个学生,对应一个老师

对于学生而言【多对一】:关联

对于老师而言【一对多】:集合

测试环境搭建

1、导入lombok

2、新建实体类Teacher、Student

3、建立Mapper接口

4、建立Mapper.xml文件

5、在核心配置文件中绑定注册我们的Mapper接口或者文件(多种方法)

6、测试查询是否能够成功

按照结果嵌套处理(联表查询)

按照查询嵌套处理(子查询)

 

 一对多处理

对于老师而言,就是一对多的关系

按照结果嵌套处理

按照查询嵌套处理

 小结

1、关联-association【多对一】

2、集合-collection【一对多】

3、javaType  &  ofType

    ①javaType用来指定实体类中属性的类型

    ②ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型!

动态SQL 

  • 根据不同的条件生成不同的SQL语句
  • 所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL的层面,去执行一个逻辑代码
  • 动态SQL就是在拼接SQL语句

创建一个基础工程

1、导包

2、编写配置文件

3、编写实体类

4、编写实体类对应Mapper接口和Mapper.xml文件

if

choose(when,otherwise)

trim(where,set)

 

foreach

SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用!

1、使用SQL标签抽取公共的部分

2、在需要使用的地方使用Include标签引用即可

缓存

一级缓存

  • 一级缓存也叫本地缓存:SqlSession级别
  • 与数据库同一次会话期间查询到的数据会放在本地缓存中
  • 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库

缓存失效的情况:

1、查询不同的东西

2、增删改操作,可能会改变与原来的数据,所以必定会刷新缓存!

3、查询不同的Mapper.xml

4、手动清理缓存!sqlSession.clearCache();

小结:一级缓存是默认开启的,只在一次SqlSession中有效,也就是拿到连接到关闭连接这个区间段!

二级缓存 

步骤:

1、开启全局缓存

2、在要使用二级缓存的Mapper中开启,也可以自定义参数

3、测试

遇到的问题:需要将实体类序列化,不然会报错!

小结:

  • 只要开启了二级缓存,在同一个Mapper下就有效
  • 所有数据都会先放在一级缓存中
  • 只有当会话提交,或者关闭的时候,才会提交到二级缓存中!

 缓存原理

缓存顺序:

1、先看二级缓存中有没有

2、再看一级缓存中有没有

3、都没有再查询数据库

 

自定义缓存(ehcache) 

是一种开源Java分布式缓存

步骤:

1、导包

2、在mapper中指定用ehcache缓存

3、ehcache.xml

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

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

相关文章

Java同城货运搬家货运车小程序系统源码

🚚同城搬家不头疼!揭秘“同城货运搬家货运车小程序”的省心秘籍 📱开篇:一键下单,搬家新风尚 告别传统搬家的繁琐与不便,今天给大家种草一款超实用的生活神器——“同城货运搬家货运车小程序”&#xff0…

【设计模式:工厂模式】

目录 工厂模式的特点: 工厂模式种类 简单工厂模式: 简单工厂模式的创建步骤: 简单工厂代码: 工厂模式 : 特点: 工厂模式代码: 抽象工厂模式 抽象工厂的主要组成部分: 抽象…

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…

二维码门楼牌管理应用平台建设:实有单位采集管理

文章目录 前言一、实有单位信息采集:构建城市信息基石二、快速查询功能:精准定位,一触即达三、单位详情全面展示:历史轨迹,一目了然四、信息核实机制:确保数据准确无误五、单位注销流程:灵活管理…

Jenkins保姆笔记(1)——基于Java8的Jenkins安装部署

前言 记录分享下Jenkins的相关干货知识。分2-3篇来介绍Jenkins的安装部署以及使用。还是和以前一样,文章不介绍较多概念和细节,多介绍实践过程,以战代练,来供大家学习和理解Jenkins 概念 Jenkins是一个开源的自动化服务器&…

7.31 Day13 DHCP服务器的配置与管理

DHCP服务及其工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)提供了动态配置IP地址的功能。在DHCP网络中,客户端不再需要自行输入网络参数,而是由DHCP服务器向客户端自动分配。 DHCP服务工作端…

拓扑未来物联网平台简介

拓扑未来物联网平台是基于Thingsboard二次开发的面向产业互联和智慧生活应用的物联网PaaS平台,支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入。有效降低物联网应用开发和部署成本,满足物联网领域设备连接、智能化改造…

day27——homework

1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <fcntl.h> #include <uni…

释放自动化测试潜能:性能优化策略与实战技巧!

引言 在当今追求软件快速迭代的环境下&#xff0c;自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践&#xff0c;优化自动化测试的性能&#xff0c;实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先&#xff0c;识别并…

Day4

请求与响应 请求和响应是Web应用的基本组成部分&#xff0c;它们处理客户端&#xff08;通常是浏览器&#xff09;和服务器之间的交互。 注意三个常见的请求和响应就行&#xff1a; 【注意】&#xff1a; 关于重定向&#xff1a; 浏览器向某个网站发来请求&#xff0c;该网…

在Windows系统上生成SSH秘钥

SSH秘钥是指在SSH协议中使用的加密密钥&#xff0c;用于实现安全认证和数据加密。SSH秘钥通常指的是一对密钥&#xff1a;公钥&#xff08;Public Key&#xff09;和私钥&#xff08;Private Key&#xff09;。 使用以下命令生成SSH密钥 输入下面命令行生成SSH秘钥&#xff0c…

slot 插槽的方式

当组件作为标签使用时&#xff0c;子组件中用slot标签占一个位置&#xff0c;父组件可以在此填充数据&#xff0c;父组件未填充数据&#xff0c;有默认数据 则显示默认数据 具名插槽&#xff1a;子组件中slot标签有name属性&#xff0c;如name“title”&#xff0c;父组件可以用…

Spring面试篇章——Spring基本概述

Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC&#xff1a;控制反转&#xff0c;可以管理 Java 对象AOP&#xff1a;切面编程JDBCTemplate&#xff1a;是Spring提供一套访问数据库的技术&#xff0c;应用性强&#xff0c;相对好理解声明式事务&#xff1a;基于IOC …

操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥

进程调度算法你了解多少&#xff1f; 答&#xff1a; 先来先服务&#xff1a;按照请求的顺序进行调度。 这种调度方式简单&#xff0c;但是能导致较长作业阻塞较短作业。最短作业优先&#xff1a;非抢占式的调度算法&#xff0c;按估计运行时间最短的顺序进行调度。 但是如果…

selenium之批量上传文件

在UI自动化测试过程经常会有上传附件的操作&#xff0c;针对附件上传的场景&#xff0c;通常可以归为几类&#xff1a; 场景一&#xff1a;只上传一个附件场景二&#xff1a;上传固定几个附件场景三&#xff1a;上传动态数量的附件 2.针对以上几种场景&#xff0c;以动态文件数…

【iOS】APP仿写——学生管理系统

前言 学生管理系统和C语言学生管理系统要求相似&#xff0c;需要实现增删改查排序功能&#xff0c;这个仿写比较简单&#xff0c;但通过这个仿写中的限制输入的要求&#xff0c;初步了解了正则表达式。 注册、登陆界面 这个界面和3G share相同&#xff0c;这里就不多做解释了…

C语言 | Leetcode C语言题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; int maxProfit(int* prices, int pricesSize) {if (pricesSize 0) {return 0;}int f0 -prices[0];int f1 0;int f2 0;for (int i 1; i < pricesSize; i) {int newf0 fmax(f0, f2 - prices[i]);int newf1 f0 prices[i];int newf2…

芋道源码yudao-cloud 二开笔记(Feign服务调用,如何定义一个 API 接口)

在yudao-cloud如何定义一个Api接口&#xff0c;提供给另一个服务去调用&#xff1f;下面是 yudao-module-syetem系统服务 调用 yudao-module-infra文件服务的示例&#xff1a; 首先需要在服务提供者yudao-module-infra定义好对应的api&#xff0c; 第1步&#xff1a; cn.iocod…

c++中的Stack与Queue

目录 一queue与stack&#xff1a; 1.queue介绍&#xff1a; 2.queue模拟实现&#xff1a; 3stack介绍&#xff1a; 4stack模拟实现&#xff1a; 二priority_queue&#xff08;优先队列&#xff09;&#xff1a; 1介绍&#xff1a; 2仿函数&#xff1a; 3模拟实现&#…

学懂C语言(三十三):C语言 递归详解

目录 一、C语言递归 1、语法格式 2、流程图 示例1&#xff1a;数的阶乘 示例2&#xff1a;斐波那契数列 二、递归的基本要素 三、递归的工作原理 四、递归的优势与劣势 五、递归的应用示例 六、递归与非递归&#xff08;迭代&#xff09;的比较 一、C语言递归 递归指…