Skip to content

工具类aliyun

Open: Pasted image 20250610135318.png 8b012af3f70f35aaeb8b7f50881f9324_MD5 引入工具类 AliyunOSSOperator

package utils;

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@Component
public class AliyunOSSOperator {

    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String bucketName = "java-ai";
    private String region = "cn-beijing";

    public String upload(byte[] content, String originalFilename) throws Exception {
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // 填写Object完整路径,例如202406/1.png。Object完整路径中不能包含Bucket名称。
        //获取当前系统日期的字符串,格式为 yyyy/MM
        String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
        //生成一个新的不重复的文件名
        String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = dir + "/" + newFileName;

        // 创建OSSClient实例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
        } finally {
            ossClient.shutdown();
        }

        return endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + objectName;
    }

}
其中,文件的访问路径是返回值,它是这么组装的: Open: Pasted image 20250610135953.png 734a671a1aa31379d67e273aedc6623d_MD5 另外,我们仔细读一读工具类的代码,可以看到,它实际上发给阿里云的是一个以时间命名的路径.这样的话,阿里云会根据我们传的路径生成一个文件夹,文件夹里存放图片(如2025/6/1.png) 在事实上,我们在浏览器点击上传并传递图片之后,会自动帮我们向后端发送调用请求. Open: Pasted image 20250610141457.png c0d683489b9bd7562fe1b117ca35a5fc_MD5 在这之后,我们点击新增员工后,实际上发送的是图片的url. Open: Pasted image 20250610141905.png

配置文件读写

aff928b3e270e9d820e302fde88242c6_MD5 自然,我们需要使用这些配置文件当中. 我们一般放在application.yml当中. Open: Pasted image 20250610142105.png 5e051a2bd09aff7d4c51f867da51f09e_MD5 注意,value属性是spring当中的,不是lombok当中的.

使用实体类封装

Pasted image 20250610142608 我们可以把多个配置项封装到一个实体类当中. Pasted image 20250610143933

删除员工功能开发

Pasted image 20250610144826 Pasted image 20250610145011 Pasted image 20250610145102 我们在这里传递是List这样的复杂参数,因此需要RequestParam这个注解.我们经常使用第二个方法,因为可以使用List当中提供的许多方法.

修改员工接口开发

这里我们需要开发两个接口: Pasted image 20250610150844 Pasted image 20250610174414 我们需要自定义mybatis手动封装的结果集: Pasted image 20250610175213 Pasted image 20250610175343 每个标签结尾的/ 表示自闭合,也就是这个标签没有内容,这个属于xml语法. column表示sql语句结果返回的字段,property表示Emp类中对应的字段. Pasted image 20250610180940 Pasted image 20250610181108 动态sql更新: Pasted image 20250610182247 Pasted image 20250610182638 set标签:会自动生成set关键字;会自动的删除掉更新字段后多余的逗号.

异常处理

Pasted image 20250610183023 向上抛异常,会抛到框架上,框架默认的就是这个状态. Pasted image 20250610183224 核心注解:RestcontrollerAdvice ExceptionHandler 事实上: Pasted image 20250610184337 也可以自己单独处理,让前端知道的更加清晰: Pasted image 20250610184143

信息统计

Pasted image 20250610185939 前端可以使用echarts这种开源组件库 Pasted image 20250610190051 case函数 Pasted image 20250610190350 Pasted image 20250610190433 Pasted image 20250610190443 也可以写成: Pasted image 20250610190539 由于第一种不能匹配范围,因此实用性不强.

处理

Pasted image 20250610190614

性别统计

Pasted image 20250610193216Pasted image 20250610193327 if函数: Pasted image 20250610193445 Pasted image 20250610194103 Pasted image 20250610194127

最后可以回归到JavaWeb15了.