【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.rhkb.cn/news/119066.html

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

相关文章

Spring-Kafka生产者源码分析

文章目录 概要初始化消息发送小结 概要 本文主要概括Spring Kafka生产者发送消息的主流程 代码准备&#xff1a; SpringBoot项目中maven填加以下依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent&…

大数据技术原理与应用学习笔记第1章

黄金组合访问地址&#xff1a;http://dblab.xmu.edu.cn/post/7553/ 1.《大数据技术原理与应用》教材 官网&#xff1a;http://dblab.xmu.edu.cn/post/bigdata/ 2.大数据软件安装和编程实践指南 官网林子雨编著《大数据技术原理与应用》教材配套大数据软件安装和编程实践指…

Liunx系统编程:信号量

一. 信号量概述 1.1 信号量的概念 在多线程场景下&#xff0c;我们经常会提到临界区和临界资源的概念&#xff0c;如果临界区资源同时有多个执行流进入&#xff0c;那么在多线程下就容易引发线程安全问题。 为了保证线程安全&#xff0c;互斥被引入&#xff0c;互斥可以保证…

Java-泛型

文章目录 Java泛型什么是泛型&#xff1f;在哪里使用泛型&#xff1f;设计出泛型的好处是什么&#xff1f;动手设计一个泛型泛型的限定符泛型擦除泛型的通配符 结论 Java泛型 什么是泛型&#xff1f; Java泛型是一种编程技术&#xff0c;它允许在编译期间指定使用的数据类型。…

操作视频的开始与暂停

调用 ref.current.play() 方法来播放视频&#xff1b; 如果视频需要暂停&#xff0c;我们调用 ref.current.pause() 方法来暂停视频。 通过 useRef 创建的 ref 操作视频的开始与暂停 当用户点击按钮时&#xff0c;根据当前视频的状态&#xff0c;我们会开始或暂停视频&…

ip地址、LINUX、与虚拟机

子网掩码&#xff0c;是用来固定网络号的&#xff0c;例如255&#xff0c;255,255,0&#xff0c;表明前面三段必须为网络号&#xff0c;后面必须是主机号&#xff0c;那么怎么实现网络复用呢&#xff0c;例如使用c类地址&#xff0c;但是正常子网掩码是255&#xff0c;255,255,…

GB28181学习(二)——注册与注销

概念 使用REGISTER方法进行注册和注销&#xff1b;注册和注销应进行认证&#xff0c;认证方式应支持数字摘要认证方式&#xff0c;高安全级别的宜支持数字证书认证&#xff1b;注册成后&#xff0c;SIP代理在注册过期时间到来之前&#xff0c;应向注册服务器进行刷新注册&…

vue从零开始学习

npm install慢解决方法:删掉nodel_modules。 5.0.3:表示安装指定的5.0.3版本 ~5.0.3:表示安装5.0X中最新的版本 ^5.0.3: 表示安装5.x.x中最新的版本。 yarn的优点: 1.速度快,可以并行安装 2.安装版本统一 项目搭建: 安装nodejs查看node版本:node -v安装vue clie : np…

C语言练习8(巩固提升)

C语言练习8 编程题 前言 奋斗是曲折的&#xff0c;“为有牺牲多壮志&#xff0c;敢教日月换新天”&#xff0c;要奋斗就会有牺牲&#xff0c;我们要始终发扬大无畏精神和无私奉献精神。奋斗者是精神最为富足的人&#xff0c;也是最懂得幸福、最享受幸福的人。正如马克思所讲&am…

明厨亮灶监控实施方案 opencv

明厨亮灶监控实施方案通过pythonopencv网络模型图像识别算法&#xff0c;一旦发现现场人员没有正确佩戴厨师帽或厨师服&#xff0c;及时发现明火离岗、不戴口罩、厨房抽烟、老鼠出没以及陌生人进入后厨等问题生成告警信息并进行提示。OpenCV是一个基于Apache2.0许可&#xff08…

01-虚拟机安装Windows Server操作系统

1、创建并配置虚拟机 2、安装操作系统 找到windows Server镜像 等待安装 3、设置密码

数据结构之单链表java实现

基本概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中指针链接次序实现的。和数组相比较&#xff0c;链表不需要指定大小&#xff0c;也不需要连续的地址。 单链表的基本设计思维是&#xff0c;利用结构体的设置&#xff0c…

滑动窗口实例5(水果成篮)

题目&#xff1a; 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c;你必须按…

垃圾回收 - 引用计数法

GC原本是一种“释放怎么都无法被引用的对象的机制”。那么人们自然而然就会想到&#xff0c;可以让所有对象事先记录下“有多少程序引用了自己”。让各对象知道自己的“人气指数”&#xff0c;从而让没有人气的对象自己消失&#xff0c;这就是引用计数法。 1、计数器 计数器表…

使用MATLAB解算炼油厂的选址

背景 记得有一年的数据建模大赛&#xff0c;试题是炼油厂的选址&#xff0c;最后我们采用MATLAB编写&#xff08;复制&#xff09;蒙特卡洛算法&#xff0c;还到了省级一等奖&#xff0c;这里把仅有一些记忆和材料&#xff0c;放到这里来&#xff0c;用来纪念消失的青春。 本…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本&#xff0c;它提供了许多工具和API&#xff0c;可以与浏览器交互&#xff0c;模拟用户操作&#xff0c;检查网页的各个方面。下面是一些步骤&#xff0c;可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

Redis布隆过滤器原理

其实布隆过滤器本质上要解决的问题&#xff0c;就是防止很多没有意义的、恶意的请求穿透Redis&#xff08;因为Redis中没有数据&#xff09;直接打入到DB。它是Redis中的一个modules&#xff0c;其实可以理解为一个插件&#xff0c;用来拓展实现额外的功能。 可以简单理解布隆…

Educational Codeforces Round 154 (Rated for Div. 2)

Educational Codeforces Round 154 (Rated for Div. 2) A. Prime Deletion 思路&#xff1a; 因为1到9每个数字都有&#xff0c;所以随便判断也质素即可 代码 #include<bits/stdc.h> using namespace std; #define int long long #define rep(i,a,n) for(int ia;i<…

数学建模-点评笔记 9月3日

1.摘要&#xff1a;关键方法和结论&#xff08;精炼的语言&#xff09;要说明&#xff0c;方法的合理性和意义也可以说明。 评委先通过摘要筛选&#xff08;第一轮&#xff09; 2.时间序列找异常值除了3西格玛还有针对时间序列更合适寻找的方法 3.模型的优缺点要写的详细一点…

vue3 页面显示中文,分页显示中文

vue3 分页默认为英文 &#xff0c;但想要中文显示 那么在App.vue中的代码为三步即可&#xff0c;引入中文&#xff0c;声明中文 &#xff0c;绑定中文&#xff1b; 1. import zhCn from element-plus/es/locale/lang/zh-cn&#xff1b; 2. let locale zhCn; 3. :locale&q…