day08 DQL,多表设计
1、DQL是什么?
DQL是指数据库查询语言(Data Query Language),用于从数据库中检索数据。
2、查询语句的完整格式是怎样的?
select * from form表 where 条件
3、条件查询的关键字是什么,常见的运算符有哪些?
等于:=
不等于:<>或!=
大于:>
小于:<
大于等于:>=
小于等于:<=
包含:LIKE
不包含:NOT LIKE
在某个范围内:BETWEEN ... AND ...
在某个集合中:IN
4、如何实现模糊查询?
实现模糊查询可以使用LIKE运算符,配合通配符 %(表示任意字符)和 _(表示单个字符)来匹配模式。
5、怎么实现排序查询?
实现排序查询可以使用ORDER BY关键字,后面跟上要排序的列名和排序方式(升序ASC或降序DESC)。
6、怎么实现分页查询?
实现分页查询可以使用LIMIT关键字,指定返回结果的起始位置和数量。例如,LIMIT 10 OFFSET 20表示从第21行开始,返回10行结果。(n,m) (n-1)*m
7、分页查询中怎么计算某一页开始索引?
分页查询中,某一页的开始索引可以通过公式(页数 - 1) * 每页数量来计算。
8、怎么实现分组查询,分组查询的目的是什么?
实现分组查询可以使用GROUP BY关键字,根据指定的列对结果进行分组。分组查询的目的是为了对数据进行分类汇总,常与聚合函数一起使用。
9、聚合函数有哪些?
COUNT:计算某列的行数
SUM:计算某列的总和
AVG:计算某列的平均值
MAX:找出某列的最大值
MIN:找出某列的最小值
10、怎么实现给查询的值设定新的数据:比例 1变成男,2变成女
实现给查询的值设定新的数据可以使用CASE语句,例如:
SELECT column1, CASE column2
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END AS gender
FROM table_name;
11、表和表之间有哪些关系?
一对一关系:一个实体只能与另一个实体关联一次。
一对多关系:一个实体可以与多个实体关联。
多对多关系:多个实体可以与多个实体关联。
12、不同关系怎么设计外键
一对一关系:在其中一个表中添加外键,指向另一个表的主键。
一对多关系:在多的一方的表中添加外键,指向一的一方的表的主键。
多对多关系:需要创建一个中间表,该表包含两个表的主键作为外键。
13、什么是物理外键,什么是逻辑外键
物理外键是指在数据库中真实存在的外键关系,通过外键约束来保证数据的完整性。逻辑外键是指在应用程序中通过代码来维护的关系,不在数据库层面体现。
14、SQL的执行原理是怎样的?
在 SQL 中,SELECT 语句的执行顺序是:
FROM 子句:从数据源中选择需要查询的表和视图。
WHERE 子句:对查询结果进行过滤,只返回符合条件的行。
GROUP BY 子句:对查询结果进行分组,按照指定的列进行分组。
HAVING 子句:对分组结果进行过滤,只返回符合条件的分组。
SELECT 子句:选择需要返回的列,以及对列进行计算。
ORDER BY 子句:对查询结果进行排序,按照指定的列进行排序。
LIMIT 子句:限制查询结果的数量,只返回指定数量的行。
在执行 SELECT 语句时,会先执行 FROM 子句,从数据源中选择需要查询的表和视图。然后,如果 WHERE 子句存在,会对查询结果进行过滤,只返回符合条件的行。接着,如果 GROUP BY 子句存在,会对查询结果进行分组,按照指定的列进行分组。如果 HAVING 子句存在,会对分组结果进行过滤,只返回符合条件的分组。然后,会执行 SELECT 子句,选择需要返回的列,以及对列进行计算。最后,如果 ORDER BY 子句存在,会对查询结果进行排序,按照指定的列进行排序。如果 LIMIT 子句存在,会限制查询结果的数量,只返回指定数量的行。SELECT 语句的执行原理是基于关系型数据库的查询语言,它可以处理大量的数据,并且可以进行复杂的数据处理和分析。在执行 SELECT 语句时,数据库会读取数据源中的数据,对数据进行过滤、分组、排序和计算,最后返回结果
[ day09 MySQL + Mybatis ]
【多表查询】
1、什么叫做笛卡尔积?笛卡尔积后所有结果都是有效的么?怎么去除无效数据?
2、多表查询有几种方式?各自什么含义?
【事务】
3、事务是什么?举例说明
是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
4、MySQL默认事务是怎么提交的?
自动提交
5、如何自己开启事务,提交事务,回滚事务?
start transaction/begin commit rollback
6、事务的四大特性是什么含义?
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性 :事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
【MyBatis】
7、MyBatis是什么,作用是什么?
8、如果要创建一个SpringBoot项目要处理数据库数据需要哪些依赖?
9、简要描述我们如何创建一个SpringBoot项目支持MyBatis操作?
[day10 Mybatis基础操作]
1、使用注解定义增删改查,分别用什么注解实现?
@Select,@Update,@Delete,@Insert
2、被@Select,@Update,@Delete,@Insert 注解的方法,要放在哪里?
@Mapper
3、在新增数据时,如果想要让id回存到对象中怎么办?
主键返回
@Options(keyProperty = "id", useGeneratedKeys = true)
4、如果表中的字段名称和POJO中属性名称不一样,怎么去实现数据的映射?
起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。
手动结果映射:通过 @Results及@Result 进行手动结果映射。
开启驼峰命名(推荐):如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射。
5、#{} 和 ${} 的区别是什么?
执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。
使用时机:参数传递,都使用#{…}
拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
使用时机:如果对表名、列表进行动态设置时使用。
6、接口中的方法怎么设定参数名,好让SQL语句中能够识别
@param
7、动态SQL中有哪些标签,各有什么作用: where-if set-if foreach sql include
foreach :
collection:集合名称
item:集合遍历出来的元素/项
separator:每一次遍历使用的分隔符
open:遍历开始前拼接的片段
close:遍历结束后拼接的片段
# [day11 SpringBoot案例]
1. 什么是RESTful风格的后端接口?
RESTful风格的后端接口是一种设计和构建网络应用程序的方式,它遵循一组规范和约束,以实现可伸缩性、可靠性和可维护性。
前后端工程在进行交互时,使用统一响应结果 Result。
● GET : 查询
● POST :新增
● PUT :修改
● DELETE :删除
2. 开发一个功能需要经历哪些流程?
● 查询页面原型明确需求
● 阅读接口文档(已提供)
● 思路分析
● 接口开发:就是开发后台的业务功能,一个业务功能,我们称为一个接口。
● 接口测试:功能开发完毕后,先通过Postman进行接口测试,测试通过后,和前端进行联调测试。
● 前后端联调测试:和前端开发人员开发好的前端工程一起测试。
3. 开发分页功能前端至少需要传什么参数过来,后台简化分页开发的插件叫什么?怎么用?
前端在请求服务端时,传递的参数:
● 当前页码 page
● 每页展示记录数 pageSize
PageHelper 是Mybatis的一款功能强大、方便易用的分页插件,支持任何形式的单标、多表的分页查询。
1). pom.xml 引入依赖
2). EmpMapper
3). EmpServiceImpl
4. 部门新增逻辑?
查看资料中提供的,新增部门的接口文档。
功能开发完成后,我们就可以启动项目,然后打开postman。发起POST请求,访问 :http://localhost:8080/depts,然后在请求体中传递json格式的参数。
5. 部门删除逻辑?
接受请求参数id,调用service删除部门,响应
调用mapper接口执行删除操作
delete from dept where id = ?;
6. 部门查询逻辑?
接受请求\,调用service查询部门,响应
调用mapper接口执行接口查询操作
select * from dept;
7. 员工查询逻辑?怎么实现分页查询的?
通过员工管理的页面原型我们可以看到,员工列表页面的查询,不仅仅需要考虑分页,还需要考虑查询条件。 分页查询我们已经实现了,接下来,我们需要考虑在分页查询的基础上,再加上查询条件。
我们看到页面原型及需求中描述,搜索栏的搜索条件有三个,分别是:
● 姓名:模糊匹配
● 性别:精确匹配
● 入职日期:范围匹配
而且上述的三个条件,都是可以传递,也可以不传递的,也就是动态的。 想到这儿,大家马上就想起来了,我们前面在Mybatis中讲解的动态SQL 。
参数名称 是否必须 示例 备注
name 否 张 姓名
gender 否 1 性别 , 1 男 , 2 女
begin 否 2010-01-01 范围匹配的开始时间(入职日期)
end 否 2020-01-01 范围匹配的结束时间(入职日期)
page 是 1 分页查询的页码,如果未指定,默认为1
pageSize 是 10 分页查询的每页记录数,如果未指定,默认为10
8. 员工删除怎么实现?
从接口文档中,我们可以看出在路径参数中,传递过来了多个id,在springboot中,我们可以将这组id值封装到一个集合中,然后在Mybatis中,通过动态SQL来完成批量删除操作。
day11 SpringBoot案例2
1. 用什么注解可以快速获取日志对象?
用@Slf4j注解可以快速获取日志对象。@Slf4j是Lombok库提供的注解,它会在编译时自动生成一个名为log的日志对象,您可以直接在类中使用该对象进行日志记录操作。
2. 文件上传前端表单必须具备哪三个要素?
<form>标签:用于创建表单。
enctype属性:设置表单的编码类型为multipart/form-data,以支持文件上传。
<input type="file">标签:用于选择要上传的文件。
3. 文件上传功能开发时,后台用什么类型的参数来接收文件?
文件上传功能开发时,后台通常使用MultipartFile类型的参数来接收文件。MultipartFile是Spring框架提供的接口,它封装了上传的文件内容和相关信息,可以通过该接口的方法来获取文件的名称、大小、内容等。
4. 请说说你的图片存储方案是怎样的?
本地存储:将图片保存在服务器本地的文件系统中。
第三方云存储服务:使用像Amazon S3、Google Cloud Storage或阿里云OSS等云存储服务来存储图片。
数据库存储:将图片以二进制形式存储在数据库中。
5. 请说说你的员工修改是怎么实现的?
对于员工修改的实现,具体的实现方式会根据系统的需求和架构而有所不同。一般来说,可以通过以下步骤来实现员工修改:
在前端页面上展示员工信息,并提供修改表单或界面。
当用户提交修改后,前端将修改的数据发送到后台。
后台接收到修改请求后,根据员工的唯一标识(如ID)找到对应的员工记录。
根据用户提交的修改数据,更新员工记录的相应字段。