1.新增员工

image-20230810234234636.png

  • EmpController
@PostMapping
public Result insertEmp(@RequestBody Emp emp){
    empService.insertEmp(emp);
    return Result.success();
}
  • EmpService
void insertEmp(Emp emp);
  • EmpServiceImpl
@Override
public void insertEmp(Emp emp) {
    empMapper.insertEmp(emp);
}
  • EmpMapper
@Insert("insert emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +
        " values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},now(),now())")
void insertEmp(Emp emp);

2.文件上传

2.1、简介

  • 文件上传,是指将本地图片、视频、音频等文件上传倒服务器,供其他用户浏览或下载的过程
  • 文件上传在项目中应用非常广泛

image-20230810234247144.png

通过mutipart/form-data类型传送的file到请求头

image-20230810234307741.png

  • UploadController
@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String username, String age, MultipartFile image) throws IOException {
        return Result.success();
}
  • UUDI
    • 通过该静态类的方法,来拼接一个唯一的ID信息,防止传输的文件名称一致

2.2、本地存储

  • 在服务端,接收到上传上来的文件之后,将文件存储在本地服务器磁盘中
@PostMapping("/upload")
public Result upload(String username, String age, MultipartFile image) throws IOException {
    //获取原始文件名
    String imagePath = image.getOriginalFilename();
    //构建唯一名称文件名
    int lastIndex = imagePath.lastIndexOf(".");
    String newPath = UUID.randomUUID().toString() + imagePath.substring(lastIndex);
    //存储到服务器的磁盘目录上
    image.transferTo(new File("E:\\TestPhoto\\projectImage\\"+newPath));
    return Result.success();
}
  • 可能出现文件过大,而状态码为500

image-20230810234315097.png

在springBoot中,文件上传,默认单个文件允许最大大小为1M,如果需要上传大文件,可以在配置文件中配置

#配置单个文件最大上传大小
logging.logback.rollingpolicy.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB
  • MultipartFile对象中方法
    • String getOriginalFilename(); ——获取原始文件名
    • void transferTo(File dest); ——将接收的文件转存到磁盘文件中
    • long getSize(); ——获取文件的大小,单位:字节
    • byte[] getBytes();——获取文件内容的字节数组
    • InputStream getInputStream(); ——获取接收到的文件内容的输入流

2.3、阿里云OSS

  • 概述

    • 阿里云是阿里巴巴集团下全球领先的云计算公司,也是国内最大的云服务提供段
  • OSS

    • 阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、可靠的云存储服务,使用ODD,可以通过网络随时存储和调用文件、图片、音频和视频等各种文件
  • 登录

  • 开通OSS

image-20230810234332758.png

image-20230810234337344.png

image-20230810234345048.png

开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单击左侧的对象存储OSS菜单进入OSS管理控制台界面

image-20230810234350634.png

  • 快速入门

image-20230810234404977.png

image-20230810234414253.png

image-20230810234420155.png

image-20230810234425310.png

  • 获取AccessKeyId

image-20230810234435287.png

image-20230810234440711.png

  • 阿里云OSS-继承
    • 引入阿里云OSS上传文件工具类
    • 上传图片接口开发

【AliOSSUtils】

@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    private String accessKeyId = "LTAI5tNm2NDzDbJK698NqUT4";
    private String accessKeySecret = "n5RN4vhzrMFncDA3crAdTzF2KVo3gm";
    private String bucketName = "web-demo-quickstart";
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();
        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);
        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

【UploadController】

@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
    String upload = ossUtils.upload(image);
    return Result.success(upload);
}

3.修改员工

3.1、查询回显

image-20230810234503128.png

  • EmpController
@GetMapping("/{id}")
public Result getEmpById(@PathVariable Integer id){
    Emp emp = empService.getEmpById(id);
    return Result.success(emp);
}
  • EmpService
Emp getEmpById(Integer id);
  • EmpServiceImpl
@Override
public Emp getEmpById(Integer id) {
    return empMapper.getEmpById(id);
}
  • EmpMapper
@Select("select * from emp where id = #{id}")
Emp getEmpById(Integer id);

3.2、修改员工

image-20230810234519170.png

  • EmpController
@PutMapping
public Result updateEmpById(@RequestBody Emp emp){
    empService.updateEmpById(emp);
    return Result.success();
}
  • EmpService
void updateEmpById(Emp emp);
  • EmpServiceImpl
@Override
public void updateEmpById(Emp emp) {
    empMapper.updateEmpById(emp);
}
  • EmpMapper
void updateEmpById(Emp emp);

4.配置文件

4.1、参数配置话

image-20230810234543499.png

  • 问题解决

    • application.xml
    #阿里云OSS配置
    aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
    aliyun.oss.accessKeyId=LTAI5tNm2NDzDbJK698NqUT4
    aliyun.oss.accessKeySecret=n5RN4vhzrMFncDA3crAdTzF2KVo3gm
    aliyun.oss.bucketName=web-demo-quickstart
    
    • AliOSSUtils
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
    
  • @Value 注解通常用于外部配置的属性注入,具体用法为:

    • @Value("${配置文件中的key}")
  • 通过@Value注解注入属性

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    

4.2、yml配置文件

  • springBoot提供了多种属性配置方式

    • XML【臃肿】
    <server>
        <port>8080</port>
        <address>127.0.0.1</address>
    </server>
    
    • application.properties【层次结构不清晰】
    server.port=8080
    server.addresss=127.0.0.1
    
    • application.yml/ymal【推荐】
    server:
        port: 8080
        address: 127.0.0.1
    
  • yml/ymal

    • 大小写敏感
    • 数值前面必须有空格,作为分隔符
    • 使用缩进表示层级关系,缩进是,不允许使用Tab键,只能用空格(idea中会自动将Tag转为空格)
    • 缩进的宫格数目不重要,只要相同层级的元素左侧对其即可
    • ”#“ 表示注解,从这个字符一直到行尾,都会被解析器忽略
  • yml/yaml数据可个

    • 对象/Map集合
    #定义对象/Map集合
    user:
      name: Tom
      age: 20
      address: beijing
    
    • 数组/List/Set集合
    #定义数组/List/Set
    hobby:
      - java
      - C
      - game
      - sport
    
  • 在application.xml中的配置转移到application.yml中

#驱动类名称
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/webdemo
    username: root
    password: root
  #配置单个请求最大上传大小
  servlet:
    multipart:
      max-file-size: 10MB
      #配置单个文件最大上传大小
      max-request-size: 100MB

#配置mybatis日志,指定输出控制台
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #开启mybatis驼峰命名自动映射开关
    map-underscore-to-camel-case: true
#阿里云OSS配置
aliyun:
  oss:
    endpoint: https://oss-cn-hangzhou.aliyuncs.com
    accessKeyId: LTAI5tNm2NDzDbJK698NqUT4
    accessKeySecret: n5RN4vhzrMFncDA3crAdTzF2KVo3gm
    bucketName: web-demo-quickstart

4.3、@ConfigurationProperties

  • 问题分析

image-20230810234556155.png

创建pojo类,将aliyun.oss中的属性设置在pojo类内,通过映射文件,将值映射到属性名上

image-20230810234604257.png

  • AliSOOProperties
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}
  • AliSOOUtils
@Autowired
private AliOSSProperties aliOSSProperties;

遇到问题:spring提示

image-20230810234610494.png

解决:添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>                   
    <artifactId>spring-boot-configurationprocessor</artifactId>
</dependency>
  • @ConfigurationProperties 和 @Value
    • 相同点
      • 都是用来注入外部配置的属性
    • 不同点
      • @Value注解只能一个一个的进行外部属性注入
      • @ConfigurationProperties可以批量的将外部的属性配置注入到bean对象当中

results matching ""

    No results matching ""