Java常见问题

本文围绕SQL基本语法、多表查询、事务处理、MyBatis操作、SpringBootRESTful接口、文件上传和员工数据管理,提供了一次全面的技术梳理。
摘要由CSDN通过智能技术生成

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)找到对应的员工记录。
根据用户提交的修改数据,更新员工记录的相应字段。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值