工具类aliyun¶
Open: Pasted image 20250610135318.png
引入工具类 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;
}
}
另外,我们仔细读一读工具类的代码,可以看到,它实际上发给阿里云的是一个以时间命名的路径.这样的话,阿里云会根据我们传的路径生成一个文件夹,文件夹里存放图片(如2025/6/1.png)
在事实上,我们在浏览器点击上传并传递图片之后,会自动帮我们向后端发送调用请求.
Open: Pasted image 20250610141457.png
在这之后,我们点击新增员工后,实际上发送的是图片的url.
Open: Pasted image 20250610141905.png
配置文件读写¶
自然,我们需要使用这些配置文件当中.
我们一般放在application.yml当中.
Open: Pasted image 20250610142105.png
注意,value属性是spring当中的,不是lombok当中的.
使用实体类封装¶
我们可以把多个配置项封装到一个实体类当中.

删除员工功能开发¶
我们在这里传递是List这样的复杂参数,因此需要RequestParam这个注解.我们经常使用第二个方法,因为可以使用List当中提供的许多方法.
修改员工接口开发¶
这里我们需要开发两个接口:
我们需要自定义mybatis手动封装的结果集:
每个标签结尾的/ 表示自闭合,也就是这个标签没有内容,这个属于xml语法.
column表示sql语句结果返回的字段,property表示Emp类中对应的字段.
动态sql更新:
set标签:会自动生成set关键字;会自动的删除掉更新字段后多余的逗号.
异常处理¶
向上抛异常,会抛到框架上,框架默认的就是这个状态.
核心注解:RestcontrollerAdvice ExceptionHandler
事实上:
也可以自己单独处理,让前端知道的更加清晰:

信息统计¶
前端可以使用echarts这种开源组件库
case函数
也可以写成:
由于第一种不能匹配范围,因此实用性不强.
处理¶

性别统计¶

if函数:

最后可以回归到JavaWeb15了.