javaweb学习
五.MySQL
20.多表查询
(7)行子查询
子查询返回的值是一行(可以是多列)
常用的操作符:= <> in not in
(8)表子查询
子查询返回的结果是多行多列,常作为临时表
常用的操作符:in
21.事务
(1)介绍
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败
注意:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐形的提交事务
(2)操作
事务控制:
(3)四大特性(ACID)
原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性:事务完成时,必须所有的数据都保持一致状态
隔离性:数据库系统提供的隔离机制,保证事务在不收外部并发操作影响的独立环境下运行
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
22.索引
(1)介绍
索引是帮助数据库高效获取数据的数据结构
如:
优点:提高查询效率,降低数据库的IO成本,降低CPU消耗
缺点:索引会占用存储空间,降低了insert、update、delete的效率
(2)结构
MySQL数据库支持的索引结构有很多,如:hash索引,full-text索引
默认是B+Tree结构组织的索引
B+Tree(多路平衡搜索树):
特点:
- 每一个节点,可以存储多个key(有n个key,就有n个指针)
- 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据
- 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询
(3)操作语法
语法:
注意:
- 主键字段,在建表时,会自动创建主键索引
- 添加唯一约束时吗,数据库实际上会添加唯一索引
六.Mybatis
1.介绍
mybatis是一款优秀的持久层框架,用于简化JDBC的开发
官网:https://mybatis.net.cn/
2.入门程序
步骤:
①准备工作(创建springboot工程,数据库,实体类):
②引入mybatis的相关依赖,配置mybatis(配置数据库连接信息):
③编写sql语句(注解/XML):
④单元测试:
3.配置SQL提示
默认在mybatis中编写SQL语句是不识别的,可以做以下操作:
问题:表名不被识别
原因:idea和数据库没有建立联系,不识别表信息
解决:在idea中配置MySQL数据库连接
4.JDBC
JDBC:是使用java语言操作关系型数据库的一套API
本质:
- sun公司定义的一套操作所有关系型数据库的规范,即接口
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
5.数据库连接池
数据库连接池是个容器,负责分配,管理数据库连接
它允许应用程序重复使用一个现有的数据库连接,而不是重新创建一个
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
标准接口:DataSource:
- 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口
- 功能:获取连接
常见产品(Hikari是springboot默认的):
切换Druid数据库连接池:
6.lombok工具包介绍
lombok是一个实用的java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并自动生成日志变量,简化java开发:
注意:lombok会在编译时,自动生成java代码,我们使用lombok时,还需要安装一个lombok的插件(idea自带)
7.基础操作-环境准备
- 准备数据库表
- 创建一个新的springboot项目,选择引入对应的起步依赖(mybatis、MySQL)
- application.properties中引入数据库连接信息(数据库四要素)
- 创建对应的实体类
- 准备Mapper接口
8.删除
接口方法:
注意:如果mapper接口方法形参只有一个普通类型的参数,#{…}里面的属性名可以随便写
预编译SQL
日志输出:可以在application.properties中,打开mybatis的日志,并指定输出到控制台:
日志:
其中:?是占位符,具体数据是下面的parameter,update表示改变的数据数
预编译SQL的优势:性能更高,更安全(防止SQL注入)
SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法
参数占位符:
-
#{…}
-
${…}
9.新增
接口方法:
主键返回
描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据
实现:
9.更新
接口方法:
10.查询
(1)根据ID查询
接口方法:
实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装
如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装:
解决方法:
①给字段起别名,让别名与实体类表属性一致:
②通过@Results,@Result注解手动映射封装:
③在application.properties中开启mybatis的驼峰命名自动映射开关:
(2)条件查询
接口方法:
其中:concat是字符串拼接函数
参数名说明:
-
在springboot的2.x版本:
-
在springboot的1.x版本/单独使用mybatis:
11.XML映射文件
规范:
- XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
- XML映射文件的namespace属性为Mapper接口全类名一致
- XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致
xml配置文件(详见mybatis官网):
idea插件:MyBatisX
XML配置文件适用于复杂sql功能