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 {
    @Autowired
    private 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;
//    }
    @Override
    public 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 {
    @Autowired
    private 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\tempImage
        image.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自动注入一个对象就可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatglm部署问题

问题&#xff1a; ModuleNotFoundError: No module named ‘transformers_modules.’ 解决方法&#xff1a; 卸载重装 pip uninstall transformerspip install transformers -i https://mirror.baidu.com/pypi/simple

java内存屏障

参考&#xff1a;https://blog.csdn.net/weixin_73077810/article/details/132804522 内存屏障主要用于解决线程的可见性、有序性问题 代码案例&#xff1a; ReentrantLock保证可见性的原理 在 lock.lock() 和 lock.unlock() 时&#xff0c;都会操作 AbstractQueuedSy…

Linux命令入门及ls命令

由于大家第一次接触到Linux命令&#xff0c;故此篇会详细讲述什么是命令&#xff0c;什么又是命令行&#xff1f;Linux命令的基础结构&#xff0c;什么是工作目录&#xff0c;什么又是HOME目录&#xff1f;并且带大家熟悉ls命令的基础使用。 1.命令和命令行 命令行&#xff1a…

mybatisPlus CodeGenerator 代码生成

在 test 目录下新建 CodeGenerator 类&#xff0c;用于 mybatis-plus 自动生成 java 代码 package com.edward;import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplu…

Git 实战指南:常用指令精要手册(持续更新)

&#x1f451;专栏内容&#xff1a;Git⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、Git 安装过程1、Windows 下安装2、Cent os 下安装3、Ubuntu 下安装 二、配置本地仓库1、 初始化 Git 仓库2、配置 name 和 e…

数字系统课程设计与VHDL报告

获“优”&#xff0c;含实验结果视频、代码、报告&#xff0c;99.99%原创&#xff0c;配置环境太复杂不包跑通&#xff0c;要的私信。

听GPT 讲Rust源代码--compiler(30)

File: rust/compiler/rustc_const_eval/src/transform/promote_consts.rs 在Rust的编译器源代码中&#xff0c;rust/compiler/rustc_const_eval/src/transform/promote_consts.rs文件的作用是执行常量传播和优化的转换过程。 该文件中的PromoteTemps结构体是一个转换器&#xf…

【教学类-45-02】X-Y之间的三连减题(a-b-c=)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-45-01】X-Y之间的三连加题(abc)-CSDN博客文章浏览阅读5次。【教学类-45-01】X-Y之间的三连加题(abc)https://blog.csdn.net/reasonsummer/article/details/135436915 有了三连加怎么能没有三连减&#xff0c;修改参数&am…

SpringIOC之support模块FileSystemXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

应用OpenCV绘制箭头

绘制箭头函数 方法&#xff1a;函数cv2.arrowedLine( ) 语法格式&#xff1a;cv2.arrowedLine(img, pt1, pt2, color[, thickness[, line_type[, shift[, tipLength]]]]) 参数说明&#xff1a; img&#xff1a;要画的直线所在的图像&#xff0c;也称为画布。。 pt1&#x…

BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【1】

预训练模型:A pre-trained model is a saved network that was previously trained on a large dataset, typically on a large-scale image-classification task. You either use the pretrained model as is or use transfer learning to customize this model to a given t…

查找的数据结构实验报告(哈希表)

目录 一、实验目的&#xff1a; 二、实验内容&#xff08;实验题目与说明&#xff09; 三、算法设计&#xff08;核心代码或全部代码&#xff09; 四、运行与测试&#xff08;测试数据和实验结果分析&#xff09; 五、总结与心得 一、实验目的&#xff1a; (1)理解查找表…

windows 查看所有端口占用情况

winR&#xff0c;调出cmd窗口&#xff1a; 输入命令 netstat -ano 内容太多&#xff0c;显示不全&#xff0c;怎么办? 输入下面命令 netstat -ano > d:\1.log 在d盘根目录下就产生了 输出文件 打开可以看到如下内容 活动连接协议 本地地址 外部地址 状…

小家电type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

密码学入门 古老的围栏密码技术

1、简述 由于隐私和安全的重要性不断增加&#xff0c;已经开发了多种加密方法和技术来保护我们的敏感数据。随着时间的推移而演变&#xff0c;从经典密码学发展到现代密码学。 在本文中&#xff0c;我们将了解一种被称为围栏密码技术的技术&#xff0c;涵盖其加密和解密过程及其…

【IC设计】移位寄存器

目录 理论讲解背景介绍什么是移位寄存器按工作模式分类verilog语法注意事项 设计实例循环移位寄存器算术双向移位寄存器5位线性反馈移位寄存器伪随机码发生器3位线性反馈移位寄存器32位线性反馈移位寄存器串行移位寄存器&#xff08;打4拍&#xff09;双向移位寄存器&#xff1…

Java研学-web操作crud

一 思路 1 组件 页面显示&#xff1a;JSP   接受用户请求&#xff1a;Servlet   和数据库交互&#xff1a;MyBatis 2 基础准备 ① 创建 web 项目&#xff0c;导入需要依赖的 jar 包,放入 web/WEB-INF/lib目录中 ② 创建数据库表 CREATE TABLE employee( id bigint(11)…

八大算法排序@归并排序(C语言版本)

目录 归并排序概念算法思想第一步第二步第三步 算法步骤代码实现代码1代码优化 时间复杂度空间复杂度特性总结 归并排序 概念 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治策略的经典排序算法。它的基本思想是将待排序的数组划分成两个子数组&#xff0c;分别对…

响应式布局 Bootstrap

响应式开发 原理&#xff1a;就是根据媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。 原理&#xff1a;就是在不同屏幕下&#xff0c;通过媒体查询来改变这…