【javaweb】学习日记Day8 - Mybatis入门 Mysql 多表查询 事务 索引

之前学习过的SQL语句笔记总结戳这里→【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用_Roye_ack的博客-CSDN博客

【数据库原理与应用 - 第八章】数据库的事务管理与并发控制_一级封锁协议_Roye_ack的博客-CSDN博客

目录

一、多表查询

1、概述

(1)笛卡尔积

(2)查询分类

2、连接查询 

(1)内连接

① 隐式内连接

② 显示内连接

(2)外连接

① 左外连接

② 右外连接

3、子查询

(1)标量子查询 - 子查询返回的结果为单个值

(2)列子查询 - 子查询返回的结果是一列

(3)行子查询 - 子查询返回的结果是一行

(4)表子查询 - 子查询返回的结果是多行多列

4、案例

二、事务

 1、事务的四大特性

三、索引

四、Mybatis

1、入门

(1)准备工作 

(2)配置Mybatis

(3)定义mapper接口

(4)定义测试类

2、JDBC介绍

3、数据库连接池

(1)定义 

(2)优势

(3)接口 

4、lombook


一、多表查询

1、概述

(1)笛卡尔积

两个集合A B的所有组合情况

select * from tb_emp,tb_dept;

(2)查询分类

  • 1、连接查询
    • 内连接:相当于A,B交集部分
    • 外连接
      • 左外连接:查询左表的所有数据(包括AB交集部分)
      • 右外连接:查询右表的所有数据(包括AB交集部分)

  • 2、子查询 

2、连接查询 

(1)内连接

① 隐式内连接

-- A. 查询员工的姓名 , 及所属的部门名称 (隐式内连接实现)
select tb_emp.name, tb_dept.name
from tb_dept,tb_emp
where tb_dept.id = tb_emp.dept_id;
-- 起别名
select e.name, d.name
from tb_emp e,tb_dept d
where e.dept_id = d.id;

② 显示内连接

-- B. 查询员工的姓名 , 及所属的部门名称 (显式内连接实现)
select tb_emp.name, tb_dept.name
from tb_dept inner join tb_emp on tb_dept.id = tb_emp.dept_id;

(2)外连接

① 左外连接

-- A. 查询员工表 所有 员工的姓名, 和对应的部门名称 (左外连接)
select e.name, d.name
from tb_emp eleft join tb_dept d on e.dept_id = d.id;

② 右外连接

-- B. 查询部门表 所有 部门的名称, 和对应的员工名称 (右外连接)
select e.name,d.name
from tb_emp eright join tb_dept d on e.dept_id = d.id;

3、子查询

(1)标量子查询 - 子查询返回的结果为单个值

-- 标量子查询
-- A. 查询 "教研部" 的所有员工信息
select *
from tb_emp
where dept_id = (select idfrom tb_deptwhere name = '教研部');-- B. 查询在 "方东白" 入职之后的员工信息
select *
from tb_emp A
where A.entrydate > (select B.entrydatefrom tb_emp Bwhere B.name = '方东白');

(2)列子查询 - 子查询返回的结果是一列

innot in

-- A. 查询 "教研部" 和 "咨询部" 的所有员工信息
select *
from tb_emp
where dept_id in (select idfrom tb_deptwhere name in ('教研部', '咨询部'));

(3)行子查询 - 子查询返回的结果是一行

-- A. 查询与 "韦一笑" 的入职日期 及 职位都相同的员工信息 ;
select *
from tb_emp
where (entrydate, job) in (select entrydate, jobfrom tb_empwhere name = '韦一笑')

(4)表子查询 - 子查询返回的结果是多行多列

-- A. 查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门名称
select t.*, d.name
from (select * from tb_emp where entrydate > '2016-01-01') t,tb_dept d
where t.dept_id = d.id;

4、案例

-- 1. 查询价格低于 10元 的菜品的名称 、价格 及其 菜品的分类名称 .
select dish.name, price, category.name
from dishinner join category on dish.category_id = category.id
where price < 10;-- 2. 查询所有价格在 10元(含)到50元(含)之间 且 状态为'起售'的菜品名称、价格 及其 菜品的分类名称 (即使菜品没有分类 , 也需要将菜品查询出来).
select dish.name, price, category.name
from dishleft join category on dish.category_id = category.id
where price between 10 and 50and dish.status = 1;-- 3. 查询每个分类下最贵的菜品, 展示出分类的名称、最贵的菜品的价格 .
select category.name, max(price)
from dishinner join category on dish.category_id = category.id
group by category.id;-- 4. 查询各个分类下 状态为 '起售' , 并且 该分类下菜品总数量大于等于3 的 分类名称 .
select category.name
from dishinner join category on dish.category_id = category.id
where dish.status = 1
group by category.id
having count(*) >= 3;-- 5. 查询出 "商务套餐A" 中包含了哪些菜品 (展示出套餐名称、价格, 包含的菜品名称、价格、份数).
select s.name, s.price, d.name, d.price, sd.copies
from dish d,setmeal s,setmeal_dish sd
where d.id = sd.dish_idand s.id = sd.setmeal_idand s.name = '商务套餐A'-- 6. 查询出低于菜品平均价格的菜品信息 (展示出菜品名称、菜品价格).
select name, price
from dish
where price < (select avg(price)from dish)

二、事务

Day08-08. MySQL-事务-介绍与操作_哔哩哔哩_bilibili

事务是一组操作的集合,这些操作要么同时成功,要么同时失败

-- 开启事务
start transaction ;-- 删除部门
delete from tb_dept where id = 2;-- 删除部门下的员工
delete from tb_emp where dept_id = 2;-- 提交事务
commit;-- 回滚事务
rollback ;

 1、事务的四大特性

  •  原子性:事务中一系列操作是不可再分的工作单位
  • ② 一致性:事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态
  •  隔离性:一个事务的执行不能被其他事务所干扰
  • ④ 持续性:一个事务一旦提交,该事务的操作结果永久有效

三、索引

索引是帮助数据库高效获取数据的数据结构

数据结构:B+树

 

-- 创建索引
create [unique] index 索引名 on 表名(字段名);-- 查看索引
show index from 表名;-- 删除索引
drop index 索引名 on 表名;

四、Mybatis

解决在idea中构建项目出现不能创建java类,只能创建文件的问题~_从未止步..的博客-CSDN博客

1、入门

(1)准备工作 

 

 (2)配置Mybatis

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/db01
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=244537

 (3)定义mapper接口

@Mapper //运行时会自动生成该接口的实现类对象(代理对象),并将该对象交给IOC容器管理
public interface Usermapper {//查询全部用户信息@Select("select * from user")public List<User> list();
}

(4)定义测试类

@SpringBootTest
class MybatisApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testusermapper() {List <User> userList = userMapper.list();userList.stream().forEach(user -> {System.out.println(user);});}
}

2、JDBC介绍

一套操作关系型数据库的API

SpringBoot+Mybatis 完胜 JDBC

3、数据库连接池

(1)定义 

  • 数据库连接池是个容器,负责分配管理数据库连接
  • 允许应用程序重复使用一个现有的数据库连接,不用重新建立
  • 释放【空闲时间 > 最大空闲时间】的连接,避免因为没有释放连接而引起的数据库连接遗漏

(2)优势

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏

(3)接口 

切换Druid连接池:在pom.xml文件中添加依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version>
</dependency>

4、lombook

Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率
 

注解作用
@Getterl / @Setter为所有的属性提供 get/set 方法
@Tostring会给类自动生成易阅读的toString方法
@EqualsAndHashCode根据类所拥有的非静态字段自动重写equals方法和 hashcode方法
@Data提供了更综合的生成代码功能(@Getter +@Setter +@ToString +@EqualsAndHashcode)
@NoArgsConstructor为实体类生成无参构造器方法
@AllArgsConstructor为实体类生成除了static修饰的字段之外带有各参数的构造器方法
import lombok.Data;@Data
public class user {private Integer id;private String name;private Short age;private Short gender;private String phone;
}

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

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

相关文章

【大数据实训】基于Hive的北京市天气系统分析报告(二)

博主介绍&#xff1a;✌全网粉丝6W,csdn特邀作者、博客专家、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于大数据技术领域和毕业项目实战✌ &#x1f345;文末获取项目联系&#x1f345; 目录 1. 引言 1.1 项目背景 1 1.2 项目意义 1 2.…

Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

腾讯云国际代充-GPU服务器安装驱动教程NVIDIA Tesla

腾讯云国际站GPU 云服务器是基于 GPU 的快速、稳定、弹性的计算服务&#xff0c;主要应用于深度学习训练/推理、图形图像处理以及科学计算等场景。 GPU 云服务器提供和标准腾讯云国际 CVM 云服务器一致的方便快捷的管理方式。 GPU 云服务器通过其强大的快速处理海量数据的计算性…

尚硅谷SpringMVC (5-8)

五、域对象共享数据 1、使用ServletAPI向request域对象共享数据 首页&#xff1a; Controller public class TestController {RequestMapping("/")public String index(){return "index";} } <!DOCTYPE html> <html lang"en" xmln…

腾讯云、阿里云、华为云便宜云服务器活动整理汇总

云服务器的选择是一个很重要的事情&#xff0c;避免产生不必要的麻烦&#xff0c;建议选择互联网大厂提供的云计算服务&#xff0c;腾讯云、阿里云、华为云就是一个很不错的选择&#xff0c;云服务器稳定性、安全性以及售后各方面都更受用户认可&#xff0c;下面小编给大家整理…

word导出为HTML格式教程,同时也导出图片

在写文档教程时&#xff0c;有时需要借鉴人家的专业文档内容&#xff0c;一般都是word格式文档。word直接复制里面的内容&#xff0c;帐帖到网站编辑器会有很多问题&#xff0c;需要二次清楚下格式才行&#xff0c;而且图片是没办法直接复制到编辑器内的。所以最方便的办法是将…

51单片机项目(7)——基于51单片机的温湿度测量仿真

本次做的设计&#xff0c;是利用DHT11传感器&#xff0c;测量环境的温度以及湿度&#xff0c;同时具备温度报警的功能&#xff1a;利用两个按键&#xff0c;设置温度阈值的加和减&#xff0c;当所测温度大于温度阈值的时候&#xff0c;蜂鸣器就会响起&#xff0c;进行报警提示。…

Simulink建模与仿真(3)-Simulink 简介

分享一个系列&#xff0c;关于Simulink建模与仿真&#xff0c;尽量整理成体系 1、Simulink特点 Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。使用Simulink来建模、分析和仿真各种动态系统(包括连续系统、离散系统和混合系统)&#xff0c;将是一件非常轻松的事…

ELK原理和介绍

为什么用到ELK&#xff1a; 一般我们需要进行日志分析场景&#xff1a;直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中&#xff0c;此方法效率低下&#xff0c;面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化…

C++ Primer 第3章 字符串、向量和数组

C Primer 第3章 字符串、向量和数组 3.1 命名空间的using声明一、每个名字都需要独立的using声明二、头文件不应包含using声明三、一点注意事项 3.2 标准库类型string3.2.1 定义和初始化string对象一、直接初始化和拷贝初始化 3.2.2 string对象上的操作一、读写string对象二、读…

ARDUINO STM32 SSD1306

STM32F103XX系列SPI接口位置 在ARUDINO 下&#xff0c;&#xff08;不需要设置引脚功能&#xff0c;不需要开启时钟设置&#xff0c;ARDUINO已经帮我们处理了&#xff09; stm32f103c6t6 flash不足&#xff0c;不足以运行U8G2,产生错误 改用U8X8&#xff0c;后将字体改为u8x8_…

完全平方数

题目链接 完全平方数 题目描述 注意点 返回 和为 n 的完全平方数的最少数量 解答思路 初始想到使用动态规划&#xff0c;后续数字的完全平方数可以由前面数字的完全平方数求得&#xff0c;对于任意数字&#xff0c;可以计算其减去从1…i之间&#xff08;保证做减操作后的值…

Ansible学习笔记11

Command和Shell模块&#xff1a; 两个模块都是用于执行Linux命令的&#xff0c;这个对于命令熟悉的工程师来说&#xff0c;用起来非常high。 Shell模块跟Command模块差不多&#xff08;Command模块不能执行一类$HOME、> 、<、| 等符号&#xff0c;但是Shell是可以的。&…

【Java 基础篇】Java StringBuffer详解:更高效的字符串处理

在Java编程中&#xff0c;字符串是一个常见的数据类型&#xff0c;用于存储文本信息。然而&#xff0c;与字符串相关的操作可能会导致性能问题&#xff0c;因为字符串是不可变的&#xff0c;每次对字符串进行操作都会创建一个新的字符串对象。为了解决这个问题&#xff0c;Java…

C# 获取Windows系统版本注意事项

首先通过微软官方文档&#xff1a;https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号 下面介绍3种获取版本号的方式及弊端 1. Environment.OSVersion.Version OperatingSystem os Environment.OSVersion;// 判断…

Mybatis学习|日志工厂、分页

1.日志工厂 如果一个数据库操作&#xff0c;出现了异常&#xff0c;我们需要排错。日志就是最好的助手! 曾经: sout、debug 现在:日志工厂! 我们主要掌握STDOUT_LOGGING 和LOG4j 在Mybatis中具体使用哪个一日志实现&#xff0c;在设置中设定! 在mybatis核心配置文件中&#…

day-07 I/O复用(select)

一.I/O复用 &#xff08;一&#xff09;基于I/O复用的服务器端 1.多进程服务器 每次服务都需要创建一个进程&#xff0c;需要大量的运算和内存空间 2.复用 只需创建一个进程。 3.复用技术在服务器端的应用 &#xff08;二&#xff09;select函数实现服务器端 &#xff08;…

Linux安装Nginx

文章目录 一、前言二、Nginx相关概念1、Nginx简介2、Nginx工作原理3、Nginx主要功能 三、安装Nginx1、安装依赖包2、准备nginx安装包3、解压4、安装前的准备&#xff08;重要&#xff09;5、安装6、启动 一、前言 本文将详细介绍在Linux系统下如何安装nginx 二、Nginx相关概念…

深度学习推荐系统(五)DeepCrossing模型及其在Criteo数据集上的应用

深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用 在2016年&#xff0c; 随着微软的Deep Crossing&#xff0c; 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出&#xff0c; 推荐系统全面进入了深度学习时代&#xff0c; 时至今日&am…

AAC之处理码流分析工具(三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…