JavaWeb——后端案例
五、案例
1. 开发规范—Restful
REST(Representational State Transfer),表述性状态转换,是一种软件架构风格

注:
- REST是风格,是约定方式,不是规定,可以打破
- 描述模块的功能通常使用复数,表示此类资源,而非单个资源。如:users、emps、books
2. 部门管理的查询、删除、新增以及前后端联调
体会:🌅
- 虽然之前的学习过程中已经跟着视频教程一边敲了代码,但是实际案例会把之前学习的内容连贯起来,自己再写的时候还是不是很熟悉,多多练习
- 注解可以简化代码,要牢记;每个注解的英文也对应着其功能的语义
本质:三层架构+IOC(控制反转)+DI(依赖注入)
新知识:
- @Slf4j/@Xslf4j可以代替创建日志对象,直接使用
- @RequestMapping(“父级”);如果后面的方法上的都要调用这级,可以把他单另出来,注解在类的上方
- @Mapping()可以根据请求类型,细分为@GetMapping()、@PostMapping、@DeleteMapping()等
流程:
Controller接受请求(,以及参数)——>Service处理数据(修改格式或者添加一些字段)——>Mapper与数据库交互(增删改查)——>Serveive——>Controller响应请求
3. 员工管理
分页查询
普通实现以及PageHelper分页插件实现
分页插件引入依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>
@Mapper
public interface EmpMapper {
// // 查询总记录数
// @Select("select count(*) from emp")
// public long count();
//
// // 分页查询获取列表数据
//
// @Select("select * from emp limit #{start}, #{pageSize}")
// public List<Emp> page(Integer start, Integer pageSize);// 使用分页插件实现@Select("select * from emp")public List<Emp> list();
}
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;// @Override
// public PageBean page(Integer page, Integer pageSize) {
// // 1. 获取总记录数
// long count = empMapper.count();
// // 2. 获取分页查询结果列表
Integer start = (page - 1) * pageSize;
List<Emp> empList = empMapper.page(start, pageSize);
// List<Emp> empList = empMapper.page((page - 1) * pageSize, pageSize);
// // 3. 封装PageBean对象
// PageBean pageBean = new PageBean(count, empList);
// return pageBean;
// }@Overridepublic PageBean page(Integer page, Integer pageSize) {//1. 设置分页参数PageHelper.startPage(page, pageSize);//2. 执行查询List<Emp> empList = empMapper.list();Page<Emp> p = (Page<Emp>) empList;// 3. 封装PageBean对象PageBean pageBean = new PageBean(p.getTotal(), p.getResult());return pageBean;}
}
@RestController
public class EmpController {@Autowiredprivate EmpService empService;// 分页查询@GetMapping("/emps")public Result page(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize) {// 调用service分页查询PageBean pageBean = empService.page(page, pageSize);return Result.success(pageBean);}
}
分页条件查询——只要把select放在xml文件中,进行相应的修改就可以
删除员工——数组<foreach>遍历
新增员工——没有特殊的点
注意: 熟悉三层架构的流程就好
4. 文件上传
概念: 文件上传是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程
前端准备工作:

后端准备工作:
Controller中参数添加MultipartFile image(MutipartFile是类型,image是名字,与前端一致,不一致的话使用@RequestParam)
MultiPartfile常用方法

错误:
Whitelabel Error Page
解决:
<dependency><groupId>org.apache.portals.pluto.templating</groupId><artifactId>thymeleaf-mvc-portlet-api</artifactId><version>3.1.1</version>
</dependency>
注意:
在SpringBoot中,文件上传,默认单个文件允许最大大小为1M。如需上传大文件,可以进行如下配置
# 配置单个文件文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
# 配置单个请求最大大小的限制(一次请求中上传的多个文件)
spring.servlet.multipart.max-request-size=100MB
1)本地存储上传文件的实例
@RestController
public class UploadController {@PostMapping("/upload")public Result uploda(String username, Integer age, MultipartFile image) throws Exception {log.info("文件上传:{},{},{}", username, age, image);// 使用MutiparFile中的方法获取文件的名字String originalFilename = image.getOriginalFilename();// 构造唯一的文件名(不能重复)——uuid(通用唯一识别码,长度固定的字符串)// 首先获取原始文件的扩展名int index = originalFilename.lastIndexOf(".");String extname = originalFilename.substring(index);// 其次生成UUID并与原始文件后缀名进行拼接String newFileName = UUID.randomUUID().toString() + extname;// 将文件存储在服务器的磁盘目录中E:\want\JAVA\tempImageimage.transferTo(new File("E:\\want\\JAVA\\tempImage\\" + newFileName));return Result.success();}
}
2)阿里云OSS(对象存储服务,Object Storage Service)
概念: 云存储服务
作用: 通过网络随时存储和调用包括文本、图片、音频和视频在内的各种文件
使用第三方服务的通用思路:
- 准备
- 参照官方SDK编写入门程序(Software Development Kit,软件开发工具包),包括辅助软件开发的依赖(jar包)、代码示例等,都可以叫做SDK。Bucket:存储空间,就是个存储东西的容器
- 集成使用
5. 配置文件
1)properties配置文件
原问题: 参数属于硬编码——如果有需求要修改,需要修改源代码,然后重新编译,不便于维护及管理
解决:

2)yml配置文件(.yml/.yaml)

对比不同的配置文件格式:
- XML:臃肿
- properties:层次结构不清晰
- yml:简洁、数据为中心——推荐
yml基本语法:
- 大小写敏感
- 数值前面必须有空格作为分隔符
- 使用缩进表示层级关系,缩进时不能用Tab,只能用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐
- #表示注释,从这个字符一直到行尾,都会被解析器忽略
属性的自动注入:
@ConfigurationProperties(prefix=“属性的前缀”)
使用前需要引入依赖(可选)

过程:
- 将属性封装成一个实体类,加入注解@Data、@Component、@ConfigurationProperties
- 在工具类中@Autowired自动注入一个对象就可
相关文章:
JavaWeb——后端案例
五、案例 1. 开发规范—Restful REST(Representational State Transfer),表述性状态转换,是一种软件架构风格 注: REST是风格,是约定方式,不是规定,可以打破描述模块的功能通常使…...
【CSS】浅学一下filter
目录 1、基本概念 2、用法 3、应用案例 更加智能的阴影效果: 元素、网页置灰 元素强调、高亮 毛玻璃效果 调整网页sepia 褐色值可以实现护眼效果 1、基本概念 CSS filter 属性将模糊或颜色偏移等图形效果(对比度、亮度、饱和度、模糊等等&#…...
Commander One for Mac:强大的双窗格文件管理器,让你的工作效率倍增!
Commander One for Mac是一款功能强大的文件管理工具,具有以下主要功能: 双窗格设计:主界面分为两个窗格,用户可以在左侧窗格中导航和浏览文件系统的目录结构,在右侧窗格中查看文件和文件夹的内容。文件操作ÿ…...
leetcode09-机器人能否返回原点
题目链接: https://leetcode.cn/problems/robot-return-to-origin/?envTypestudy-plan-v2&envIdprogramming-skills 思路: 循环遍历,模拟即可 代码: class Solution {public boolean judgeCircle(String moves) {int n m…...
sublim安装Autoprefixer插件
有时候在写css样式的时候,分不清哪些属性需要前缀,哪些不需要写前缀,sublime text这款编辑器下安装autoprefixer这款插件可以省去很多问题,写起来也很方便。1 确保系统已经安装node.js 可直接去官网上下载并安装,我的系…...
虚拟机Linux硬盘扩容
扩容前(20G): 扩容后(60G): 步骤: 1. 点击 虚拟机 -> 设置 -> 硬件 -> 硬盘(SCSI) -> 扩展(E)... -> 输入想要扩容大大小 -> 扩展(E) 2. 运行虚拟机,查看根目录属于那个文件系统,我的是 /dev/sda1…...
设计模式④ :分开考虑
一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。 …...
独占锁ReentrantLock的原理
类图结构 ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。 首先看下ReentrantLock的类图以便对它的实现有个大致了解。 从类图可以看到,ReentrantLock最终还是使…...
影响代理IP稳定性的因素有哪些?
代理IP作为一种网络服务,在生活中扮演着各种各样的角色。它们可以用于保护隐私、突破访问限制、提高网络安全性等。代理IP的稳定性受到多种因素的影响,下面和大家探讨一下影响代理IP稳定性的因素。 1、网络环境:代理IP所处的网络环境对它的稳…...
使用Docker-compose快速构建Nacos服务
在微服务架构中,服务的注册与发现扮演着至关重要的角色。Nacos(Naming and Configuration Service)是阿里巴巴开源的服务注册与发现组件,致力于支持动态配置管理和服务发现。最近,一位朋友表达了对搭建一套Nacos开发环…...
【Python】不一样的Ansible(一)
不一样的Ansible——进阶学习 前言正文概念Ansible CorePlugins和Modules 插件插件类型编写自定义插件基本要求插件选项文档标准编写插件 添加一个本地插件注册为内置插件指定插件目录 其他一些技巧更改Strategy 结语 前言 Ansible 是一个极其简单的 IT 自动化引擎,…...
分布式图文详解!
分布式理论 1. 说说CAP原则? CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这3个基本…...
Unity SRP 管线【第五讲:自定义烘培光照】
文章目录 一、自定义烘培光照1. 烘培光照贴图2. 获取光照贴图3. 获取物体在光照贴图上的UV坐标4. 采样光照贴图 二、自定义光照探针三、 Light Probe Proxy Volumes(LPPV)四、Meta Pass五、 自发光烘培 一、自定义烘培光照 细节内容详见catlikecoding.c…...
CentOS快速安装Mysql5.7(Alibaba Cloud Linux兼容)
1、安装 在线下载 http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 下载rpm安装包 [roottheo bin]# cd /usr/local [roottheo local]# wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装rpm [roottheo local]# rpm -iv…...
【css】快速实现鼠标悬浮变色效果
<div class"nav-item"><div class"ic-img"></div><div>切换</div> </div>.nav-item {width: 100rem;height: 45rem;line-height: 45rem;display: flex;text-align: center;justify-content: center;align-items: cent…...
21. Mysql 事件或定时任务,解放双手,轻松实现自动化
文章目录 概念常见操作事件调度器操作查看事件创建事件删除事件启动与关闭事件 精选示例构造实时数据定时统计数据 总结参考资料 概念 Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除…...
Apache Doris 2.0.2 安装步骤 Centos8
Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1:使用命令行 打开终端或…...
Java学习苦旅(二十五)——哈希表
本篇博客将详细讲解哈希表。 文章目录 哈希表概念冲突概念避免冲突哈希函数设计常见哈希函数 负载因子调节解决冲突闭散列开散列(哈希桶) 和java类集的关系 结尾 哈希表 概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关…...
性能分析与调优: Linux 实现 CPU剖析与火焰图
目录 一、实验 1.环境 2.CPU 剖析 3.CPU火焰图 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter192…...
leetcode动态规划问题总结 Python
目录 一、基础理论 二、例题 1. 青蛙跳台阶 2. 解密数字 3. 最长不含重复字符的子字符串 4. 连续子数组的最大和 5. 最长递增子序列 6. 最长回文字符串 7. 机器人路径条数 8. 礼物的最大价值 一、基础理论 动态规划其实是一种空间换时间的基于历史数据的递推算法&…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
