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分页插件实现

分页插件引入依赖

xml 复制代码
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
java 复制代码
@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();
}
java 复制代码
@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;
    }
}
java 复制代码
@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

解决:

xml 复制代码
<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)本地存储上传文件的实例

java 复制代码
@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自动注入一个对象就可
相关推荐
一只叫煤球的猫1 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9652 小时前
tcp/ip 中的多路复用
后端
bobz9652 小时前
tls ingress 简单记录
后端
皮皮林5513 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友3 小时前
什么是OpenSSL
后端·安全·程序员
bobz9653 小时前
mcp 直接操作浏览器
后端
前端小张同学6 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook6 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康7 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在7 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net