案例(部门管理和员工管理)-(2)

news2024/9/25 3:21:27

一、新增员工

1.Controller层

 @PostMapping
    public Result save(@RequestBody Emp emp){
    log.info ( "新增员工,emp:{}",emp );
    empService.save(emp);


        return Result.success ();
    }

2.Service层

    @Override
    public void save(Emp emp) {
        emp.setCreateTime ( LocalDateTime.now ()  );
        emp.setUpdateTime ( LocalDateTime.now () );
        empMapper.save(emp);
    }

3.Mapper层

 /**
     * 添加员工
     * @param emp
     */
    @Insert ( "insert into emp(username,name,gender,image,job,entrydate,dept_id,create_time,update_time)" +
            "values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime })" )
    void save(Emp emp);

二、文件上传

   与表单的文字项不同时的解决办法

1.Controller层

import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image){
        log.info ( "文件上传:{},{},{}",username,age,image );

        return Result.success ();
    }
}

2.网页代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>

    <form action="/upload" method="post" enctype="multipart/form-data">
        姓名: <input type="text" name="username"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="image"><br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

三、文件上传-本地存储

 1.Controller层

import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
        log.info ( "文件上传:{},{},{}",username,age,image );
        //获取原始的文件名
        String originalFilename = image.getOriginalFilename ();
        //可能会产生覆盖(新上传的文件和其他文件重复)
        //构造唯一的文件名 不能重复 --uuid(通用唯一识别码)b423d96c-14f0-46a3-a8a3-2a364ce4aa94
        int index = originalFilename.lastIndexOf ( "." );
        //截取得到文件的拓展名
        String extname = originalFilename.substring ( index );
        String newFileName = UUID.randomUUID ().toString () + extname;
        log.info ( "新的文件名:{ }",newFileName );


        //将文件存储在服务器的磁盘目录中
        image.transferTo ( new File ( "E:\\images\\"+newFileName ) );
        return Result.success ();
    }
}

2.文件大小配置

# 配置单个文件的上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大大小的显示(一次请求中是可以上传多个文件的)
spring.servlet.multipart.max-request-size=100MB

四、阿里云OSS

1.编写入门程序

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "hzleadnews-01";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "1.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        String filePath= "E:\\images\\66.jpg";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            InputStream inputStream = new FileInputStream(filePath);
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 

2.需要加入的依赖

<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- no more than 2.3.3-->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>

3.需要设置本地环境变量

OSS_ACCESS_KEY_ID,OSS_ACCESS_KEY_SECRET

4.运行程序上传文件到阿里云

会自动为文件赋值一个URL(可以直接通过网络来访问的URL)

五、案例集成阿里云OSS

1.引入aliOOSUtils(为aliOOSUtils添加@Component 交给IOC容器管理)

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String bucketName = "hzleadnews-01";


    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws Exception {
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

2.注入依赖,完成文件上传云端的功能

import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
public class UploadController {
    /**
     * 本地存储文件的方法
     */
 @Autowired
 private AliOSSUtils aliOSSUtils;

//    @PostMapping("/upload")
//    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
//        log.info ( "文件上传:{},{},{}",username,age,image );
//        //获取原始的文件名
//        String originalFilename = image.getOriginalFilename ();
//        //可能会产生覆盖(新上传的文件和其他文件重复)
//        //构造唯一的文件名 不能重复 --uuid(通用唯一识别码)b423d96c-14f0-46a3-a8a3-2a364ce4aa94
//        int index = originalFilename.lastIndexOf ( "." );
//        //截取得到文件的拓展名
//        String extname = originalFilename.substring ( index );
//        String newFileName = UUID.randomUUID ().toString () + extname;
//        log.info ( "新的文件名:{ }",newFileName );
//
//
//        //将文件存储在服务器的磁盘目录中
//        image.transferTo ( new File ( "E:\\images\\"+newFileName ) );
//        return Result.success ();
//    }
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws Exception {
        log.info ( "文件上传,文件名:{}",image.getOriginalFilename () );
        //调用阿里云OSS工具类进行文件上传
        String url = aliOSSUtils.upload ( image );
        log.info ( "文件上传完成,文件的访问路径的url:{}",url );
        return Result.success (url);

    }
}

六、修改员工

1.查询回显

1.Controller 层

    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info ( "根据id 查询员工信息,id:{}",id );
       Emp emp  =  empService.getById(id);
       return    Result.success (emp);


    }

2.Service层

    /**
     * 根据ID查询员工信息
     * @param id
     * @return
     */

    @Override
    public Emp getById(Integer id) {
    return empMapper.getById(id);
    }

3.Mapper层

      /**
     * 根据id查询员工信息
     * @param id
     * @return
     */
    @Select ( "select * from emp where id = #{id}" )
    Emp getById(Integer id);

2.修改员工

 1.Controller层


    @PutMapping
    public Result update(@RequestBody Emp emp){
        log.info ( "更新员工信息:{}",emp );
        empService.update(emp);
        return Result.success ();
    }

2.Service层


    /**
     * 更新员工
     * @param emp
     */
    @Override
    public void update(Emp emp) {
        emp.setUpdateTime ( LocalDateTime.now () );
        empMapper.update(emp);
    }

3.Mapper层

<!--    更新员工-->
    <update id="update">
update emp
    <set>
    <if test="username!=null and username!=''">username=#{username},</if>
    <if test="password!=null and password!=''">password=#{password},</if>
    <if test="name!=null and name!=''">name =#{name},</if>
    <if test="gender!=null ">gender=#{gender},</if>
    <if test="image!=null and image!=''"> image=#{image},</if>
    <if test="job!=null ">job=#{job},</if>
    <if test="entrydate!=null "> entrydate=#{entrydate},</if>
    <if test="deptId!=null ">dept_id=#{deptId},</if>
    <if test="updateTime!=null ">update_time=#{updateTime}</if>
    </set>
    where id =#{id}

    </update>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手如何快速上手HTTP爬虫IP?

对于刚接触HTTP爬虫IP的新手来说&#xff0c;可能会感到有些困惑。但是&#xff0c;实际上HTTP爬虫IP并不复杂&#xff0c;只要掌握了基本的操作步骤&#xff0c;就可以轻松使用。本文将为新手们提供一个快速上手HTTP爬虫IP的入门指南&#xff0c;帮助您迅速了解HTTP爬虫IP的基…

mysql面试题36:MySQL的binlog有几种录入格式?分别有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL的binlog有几种录入格式?分别有什么区别 MySQL的binlog(二进制日志)是用于记录数据库的更改操作的一种机制,它可以用于数据恢复、数据复…

linux安装filebeat并收集日志到elasticsearch

摘要&#xff1a; 通过filebeat收集服务器上各个应用的日志到elasticsearch&#xff0c;通过tags区分不同的应用创建不同的索引保存日志。 官网地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases#filebeat 安装步骤&#xff1a; 1&#xff1a;下载并解…

【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

文章目录 【LeetCode高频SQL50题-基础版】打卡第5天&#xff1a;第26~30题⛅前言超过5名学生的课&#x1f512;题目&#x1f511;题解 求关注者的数量&#x1f512;题目&#x1f511;题解 只出现一次的最大数字&#x1f512;题目&#x1f511;题解 买下所有产品的客户&#x1f…

vue踩的坑:属性报undefined错误问题汇总

问题 在一个组件里&#xff0c;通过props传值进去对象&#xff0c;在控制台打印报错误信息&#xff0c;提示某属性不存在。 例如&#xff1a; <div>{{data.param.aaa}}</div> 类似这种的&#xff0c;取对象子级下面的值&#xff0c;就报了undefined。 原因应该…

机器学习(21)---召回率(recall)、精度(precision)和准确率(accuracy)

文章目录 1. 分布不平衡的数据集2. TP、TN 、FP 、FN3. 混淆矩阵4. 各自的计算公式5. 例题应用 1. 分布不平衡的数据集 1. 精度&#xff08;precision&#xff09;和召回率&#xff08;recall&#xff09;是衡量机器学习模型性能的重要指标&#xff0c;特别是数据集分布不平衡的…

Ubuntu 20.04LTS环境下替换Vivado 2019.2代码编辑器

Ubuntu使用 打开 tools-settings-Text Editor 参考 打开 tools-settings-Text Editor 选中Custom Editor&#xff0c;然后点击右边的三个点&#xff0c;弹出这个界面 然后切换到linux 终端&#xff0c;安装xterm 然后在下面编辑框里输入&#xff1a; xterm -geometry 100x60 …

苹果电脑用什么清理软件比较好?

很多人都会有这样的误解&#xff1a;mac系统不用清理。实际上mac只是将系统垃圾隐藏了&#xff0c;并且需要通过特定的方式打开。但其实在我们日常工作不用这么麻烦&#xff0c;我们只需用苹果电脑专业的清理软件就好了。今天小编就给大家分享一下mac用什么清理软件好 一、mac用…

nvm: node版本管理工具

有时候需要新旧项目一起开发&#xff0c;但是旧的项目用的node版本比较低&#xff0c;也不好升级&#xff0c;所以我们可以使用nvm 来进行node版本管理 1. 准备工作 先删除掉原来的nodejs 下载nvm: 官网地址&#xff1a;Releases coreybutler/nvm-windows GitHub 百度网盘…

Apollo版本变迁里程碑:从诞生到巅峰的无人驾驶之路

特点与改进 概述里程碑版本变迁6.0特点及改进7.0特点及改进8.0特点及改进代码差异 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xf…

为啥 Erlang 没有像 Go、Scala 语言那样崛起?

为啥 Erlang 没有像 Go、Scala 语言那样崛起&#xff1f; - 知乎 问&#xff1a; 成熟的杀手级产品&#xff0c;技术栈完整&#xff0c;社区活跃&#xff0c;易上手使用的人比较多。 scala 目前业界应用广泛&#xff0c;技术栈完整&#xff0c;社区活跃&#xff0c;还有 spar…

Bun v1.0.3 发布,Zig 编写的 JavaScript 运行时

导读Bun 发布了其最新版本 v1.0.3&#xff0c;这是一个集 JavaScript 运行时、打包器、转译器和包管理器于一体的工具。这次的更新不仅修复了众多已知的问题&#xff0c;还引入了一系列令人期待的新功能。 首先&#xff0c;Bun 在这个版本中增加了对 TypeScript 的 emitDecora…

C++ 重载运算符在HotSpot VM中的应用

C支持运算符重载&#xff0c;对于Java开发者来说&#xff0c;这个可能比较陌生一些&#xff0c;因为Java不支持运算符重载。运算符重载本质上来说就是函数重载。下面介绍一下HotSpot VM中的运算符重载。 1、内存分配与释放 在C中可以通过new运算符创建一个C的类实例&#xff…

整车热管理「升温」,哪些厂商排名电子风扇市场份额TOP10

作为整车热管理系统的关键组成部分&#xff0c;风扇在传统燃油车时代主要是帮助发动机、空调系统进行散热冷却&#xff1b;同时&#xff0c;产品也经历了从硅油风扇到电子风扇&#xff08;从有刷电机到无刷电机的演进&#xff09;的升级。 而在新能源汽车的架构中&#xff0c;…

安防监控视频汇聚平台EasyCVR视频广场搜索异常,报错“通道未开启”的问题排查与解决

安防视频监控系统EasyCVR视频汇聚平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、…

arcgis添加天地图山东wtms服务

arcgis添加天地图wtms服务 首先打开天地图山东网站&#xff0c;进入首页![天地图山东首页](https://img-blog.csdnimg.cn/89df69e1c3d645b4a9e9652a08580342.png)然后点击开发资源进入开发页面点击成为开发者&#xff0c;进入申请秘钥页面&#xff0c;申请秘钥&#xff1b;![在…

Axure常用技巧及问题

以下内容将持续更新 目录 一、技巧1、版本选择2、快捷键3、定制工具栏 二、问题1、无法在浏览器预览2、发布到本地的HTML无法查看 一、技巧 1、版本选择 2、快捷键 3、定制工具栏 上方菜单栏-右键-自定义工具栏 二、问题 1、无法在浏览器预览 需要更改Axure配置 点击发布-…

win11无法打开chm格式的文件

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

NPM 常用命令(十一)

目录 1、npm shrinkwrap 1.1 使用语法 1.2 描述 2、npm star 2.1 使用语法 2.1 描述 3、npm stars 3.1 使用语法 3.2 描述 4、npm start 4.1 使用语法 4.2 描述 5、npm stop 5.1 使用语法 5.2 描述 6、npm team 6.1 使用语法 6.2 描述 6.3 详情 7、npm test…

MES系统电子秤数据采集

一、MES系统电子秤数据采集的意义&#xff1a; 电子秤数据采集是指利用电子秤设备对生产过程中的物料重量进行实时监测和记录。MES系统电子秤数据采集的意义在于提供一个集中管理和监控生产过程中物料重量的工具&#xff0c;使企业能够实现以下目标&#xff1a; 1. 质量控制&…