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自动注入一个对象就可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604456.shtml

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

相关文章

RA4000CE (RTC模块)适用于汽车,工作温度范围宽,稳定性高

RA4000CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块&#xff0c;适用于汽车&#xff0c;工作温度范围宽&#xff0c;稳定性高。它包括各种功能&#xff0c;如具有闰年校正的秒到年时钟/日历&#xff0c;时间警报&#xff0c;唤醒计时器&#xff0c;时间更新…

P4994 终于结束的起点————C

目录 终于结束的起点题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示样例 1 解释数据范围提示 解题思路Code运行结果 终于结束的起点 题目背景 终于结束的起点 终于写下句点 终于我们告别 终于我们又回到原点 …… 一个个…

stable diffusion 进阶教程-controlnet详解(持续更新中)

说明 插件下载链接:https://pan.baidu.com/s/1-qmJzqcB72nTv_2QLmR-gA?pwd=8888 提取码: 8888 讨论Q群:830970289 个人微信:mindcarver 如果在按着教程尝试的过程中有错误或问题,可以上面询问讨论,或者评论区留言 如果教程有什么问题,请帮忙纠正,持续更新(部分控制插件…

Android WiFi 连接

Android WiFi 连接 1、设置中WiFi显示2、WiFi 连接流程2.1 获取PrimaryClientModeManager2.2 ClientModeImpl状态机ConnectableState2.3 ISupplicantStaNetworkCallback 回调监听 3、 简要时序图4、原生低层驱动5、关键日志 1、设置中WiFi显示 Android WiFi基础概览 packages/a…

关于对象存储的若干事

引言 最近在阅读鸣嵩的一篇文章&#xff0c;数据库的下一场革命&#xff1a;S3 延迟已降至原先的 10%&#xff0c;云数据库架构该进化了 收获很多&#xff0c;过去时间也基于对象存储做过一些功能实现&#xff0c;特记录下。关于鸣嵩&#xff1a; 曹伟&#xff0c;花名鸣嵩&am…

用友NC word.docx 任意文件读取漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC 系统word.docx等接口存在任意文件…

JavaScript 基础二part1.运算符:赋值、一元、比较、逻辑运算符

JavaScript 基础二 1.1 赋值运算符1.2 一元运算符自增运算符的用法&#xff1a;例题 1.3 比较运算符不同类型间的比较严格相等对 null 和 undefined 进行比较 1.4 逻辑运算符例题 1.5 运算符优先级 1.1 赋值运算符 赋值运算符&#xff1a;对变量进行赋值的运算符 已经学过的赋…

光速爱购--靠谱的SpringBoot项目

简介 这是一个靠谱的SpringBoot项目实战&#xff0c;名字叫光速爱购。从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目。 教程路线是&#xff1a;搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Java代码&g…

HarmonOS 通用组件(Checkbox)

本文中 我们来说 通用组件中的 Checkbox 我们先搭起一个基本的架子组件 Entry Component struct Index {build() {Row() {Column() {Row() {}}.width(100%)}.height(100%)} }我们可以在Row 行组件中加入代码 Checkbox({name: "age"}) Text("年龄")这样 就…

专为Mac用户设计的思维导图软件MindNode 2023 for Mac助您激发创意!

在现代快节奏的生活中&#xff0c;我们经常需要整理思绪、规划项目、记录灵感。而思维导图作为一种高效的思维工具&#xff0c;能够帮助我们更好地整理和展现思维。现在&#xff0c;我们介绍一款强大而直观的思维导图软件——MindNode 2023 for Mac&#xff0c;助您拓展思维边界…

计算机毕业设计 基于Javaweb的城乡居民基本医疗信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

log4cpp日志库使用

Log4cpp是一个开源的C类库&#xff0c;它提供了C程序中使用日志和跟踪调试的功能&#xff0c;它提供了应用程序运行上下文&#xff0c;方便跟踪调试&#xff1b;可扩展的、多种方式记录日志&#xff0c;包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等&#xf…

【EAI 004】LLM+P:借助LLM和PDDL赋予机器人最优规划能力

论文标题&#xff1a;LLMP: Empowering Large Language Models with Optimal Planning Proficiency 论文作者&#xff1a;Bo Liu, Yuqian Jiang, Xiaohan Zhang, Qiang Liu, Shiqi Zhang, Joydeep Biswas, Peter Stone 作者单位&#xff1a;Department of Computer Science, Th…

安科瑞电力物联网系统在电力设备在线监测中的应用——安科瑞 顾烊宇

摘要&#xff1a;近年来&#xff0c;社会经济发展速度不断提升&#xff0c;对电力能源的需求大幅增加&#xff0c;为保障变电站等电力设备合理发挥功能&#xff0c;保障供电安全性和稳定性&#xff0c;应当加强对电力设备的监测和管理。而电力物联网技术是现代一种安全工器具的…

记一个React组件入参不当导致页面卡死的问题

一、问题描述 1.1 触发现象 点击按钮后页面卡死 1.2 最小 Demo CodeSandBox&#xff1a;https://codesandbox.io/p/sandbox/react-hook-component-stuck-755wcyinscode&#xff1a;https://inscode.csdn.net/ import ./App.css; import React, { useState, useEffect } f…

JVM中对象的创建

一.JVM运行流程 JVM向操作系统申请内存&#xff0c;初始化运行时数据区&#xff0c;接下来装载使用的类&#xff0c;执行类里面相应方法的时候为当前虚拟机栈压入一个栈帧&#xff0c;方法执行完成后栈帧出栈&#xff0c;进行垃圾回收。 二.JVM中对象的创建过程 符号引用&…

第03章_运算符与流程控制

第03章_运算符与流程控制 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题脉络 1. 运算符&#xff08;Operator&#xff09; 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋…

CSS基础笔记-04cascade-specificity-inheritance

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》CSS基础笔记-03选择器 前言 Cascading Style Sheets&#xff0c;关键就在于这个cascading&#xff0c;对于这个术语理解&#xff0c;感觉对于我这种CSS新手有点儿不太friendly。本文记录下我对这个术语的理…

互联网分布式应用之SpringCloud

SpringCloud Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 微服务项目介绍 2. Eure…

kafka-zookeeper集群架构可视化监控,Kafka-Eagle安装部署

1、简介 在 kafka-zookeeper 集群架构下&#xff0c;zookeeper 管理 kafka 的元数据信息&#xff0c;如何监控这些信息&#xff0c;并且能够直观查看和管理 kafka 一些具体 主题、分区等参数信息&#xff0c;是非常便于开发的&#xff0c;因此 Kafka-Eagle 是一个为监控 kafka …