基于Spring Boot的员工与部门信息管理系统:增删改查全攻略

news2024/11/6 19:28:01

介绍项目的搭建过程,包括依赖管理、数据库设计、实体类的创建、控制器的编写以及前端的简单实现。希望通过本项目的学习,能够加深大家对Spring Boot及相关技术的理解,为后续的开发奠定基础。

文章目录

前言

环境搭建

开发规范

 查询部门

删除部门

​编辑 新增部门

分页查询

分页插件PageHelper

条件分页查询

删除员工

新增员工

文件上传

本地存储

​编辑 阿里云OSS

修改员工

 查询回显

修改员工

 配置文件

配置格式

 yml

总结


前言

在现代企业管理中,员工和部门信息的有效管理至关重要。随着信息技术的不断发展,传统的手工管理方式已经逐渐无法满足企业对效率和准确性的要求。Spring Boot作为一种简化的Java开发框架,以其快速开发和易于配置的特性,成为构建企业级应用的热门选择。本博客将为大家展示一个基于Spring Boot的员工和部门信息管理系统,通过实现增删改查(CRUD)功能,帮助大家理解如何利用Spring Boot快速构建RESTful API,并实现数据的持久化管理。

我们将逐步介绍项目的搭建过程,包括依赖管理、数据库设计、实体类的创建、控制器的编写以及前端的简单实现。希望通过本项目的学习,能够加深大家对Spring Boot及相关技术的理解,为后续的开发奠定基础。


提示:以下是本篇文章正文内容,下面案例可供参考

环境搭建

  • 准备数据库表(dept、emp)
  • 创建springboot工程,引入对应的起步依赖(web、mybatis、mysql驱动、lombok)
  • 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类
  • 准备对应的Mapper、Service(接口、实现类)、Controller基础结构

 

开发规范

REST(REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。

注意事项

  • REST是风格,是约定方式,约定不是规定,可以打破。
  • 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books…

前后端交互统一响应结果 Result

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据
    public static Result success(){ //增删改 成功响应
        return new Result(1,"success",null);
    }
    public static Result success(Object data){ //查询 成功响应
        return new Result(1,"success",data);
    }
    public static Result error(String msg){ //失败响应        return new Result(0,msg,null);
    }
}

 查询部门

 

DeptController

  • 接收请求
  • 调用service查询部门
  • 响应

DeptService

  • 调用mapper接口查询 

DeptMapper

  • select * from dept 

 

删除部门

DeptController

  • 接收请求参数id
  • 调用service删除部门
  • 响应 @DeleteMapping @PathVariable

DeptService

  • 调用mapper接口执行删除操作

DeptMapper

  • delete from dept where id = ? 

 新增部门

DeptController

  • 接收请求参数
  • 调用service新增部门
  • 响应

DeptService

  • 补充基础属性
  • 调用mapper接口执行新增操作

DeptMapper

  • insert into dept values(?,?,?);

 注意事项

  • 一个完整的请求路径,应该是类上的 @RequestMapping 的value属性 + 方法上的 @RequestMapping的value属性。

分页查询

 

 

 

EmpController

  • 接收分页参数page、pageSize
  • 调用service进行分页查询,获取PageBean
  • 响应

 EmpService

  • 调用mapper接口查询总记录数
  • 调用mapper接口获取数据列表
  • 封装PageBean对象,返回

EmpMapper

  • select count(*) from emp;
  • select * from emp limit ?,? ; 

 

@RequestParam 的属性defaultValue可以来设置参数的默认值

 

分页插件PageHelper

 

 

条件分页查询

EmpController

  • 接收参数(分页参数、查询条件)
  • 调用service进行分页条件查询,获取PageBean
  • 响应

 EmpService

  • 使用PageHelper完成分页条件查询
  • 封装PageBean对象,返回

 EmpMapper

  • select * from emp where name like concat('%', ?, '%') and gender = ? and entrydate between ? and ?  order by update_time desc;

 

 

删除员工

EmpController

  • 接收路径参数id数组
  • 调用service进行批量删除
  • 响应 @DeleteMapping @PathVariable

EmpService

  • 调用mapper接口进行批量删除操作

EmpMapper

  • delete from emp where id in (?,?,?);

 

新增员工

EmpController

  • 接收并封装参数
  • 调用service方法保存数据
  • 响应

EmpService

  • 补充实体基础属性
  • 调用mapper接口进行保存数据操作

 EmpMapper

insert into emp(….) values(?,?,?);

 

 

文件上传

  •  文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
  • 文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

<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>

 

@RestController
public class UploadController {
    @PostMapping("/upload")  
    public Result upload( String username , Integer age,@RequestParam("image")MultipartFile file) {
        return Result.success();
    }
}

本地存储

 在服务端,接收到上传上来的文件之后,将文件存储在本地服务器磁盘中。

@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        //获取原始文件名
        String originalFilename = image.getOriginalFilename();
        //构建新的文件名
        String newFileName = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
        //将文件保存在服务器端 E:/images/ 目录下
        image.transferTo(new File("E:/images/"+newFileName));
        return Result.success();
    }
}

 在SpringBoot中,文件上传,默认单个文件允许最大大小为 1M。如果需要上传大文件,可以进行如下配置:

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

 阿里云OSS

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

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

 

 

 

Bucket:存储空间是用户用于存储对象(Object,就是文件)的容器,所有的对象都必须隶属于某个存储空间。

SDK:Software Development Kit 的缩写,软件开发工具包,包括辅助软件开发的依赖(jar包)、代码示例等,都可以叫做SDK。 

 

步骤

  • 引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)
  • 上传图片接口开发 
@RestController
public class UploadController {
    @Autowired
    private AliOSSUtils aliOSSUtils;
    @PostMapping(“/upload”)
    public Result upload(MultipartFile image) throws IOException {
	String url = aliOSSUtils.upload(image); //调用阿里云OSS工具类,将上传上来的文件存入阿里云
	return Result.success(url); //将图片上传完成后的url返回,用于浏览器回显展示
    }
}

 

修改员工

 查询回显

EmpController

  • 接收路径参数id
  • 调用service方法查询数据
  • 响应  @GetMapping @PathVariable

EmpService

  • 调用mapper接口查询数据 

EmpMapper

  • select * from emp where id = ?;

 

修改员工

 

EmpController

  • 接收请求参数并封装
  • 调用service方法执行修改操作
  • 响应  @PutMapping @RequestBody

EmpService

  • 补充基础数据
  • 调用mapper接口修改数据 

EmpMapper

  • update emp set username=?, name=?, gender=? …. where id = ?; 

 

 配置文件

 

@Value 注解通常用于外部配置的属性注入,具体用法为: @Value("${配置文件中的key}")

 

配置格式

SpringBoot提供了多种属性配置方式

application.properties

server.port=8080
server.address=127.0.0.1

application.yml

server:
   port:  8080
   address: 127.0.0.1

 application.yaml

erver:
   port:  8080
   address: 127.0.0.1

 

 yml

基本语法:

  • 大小写敏感
  • 数值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略
#配置服务器相关信息
server:
   port:  8080
   address:  127.0.0.1

对象/Map集合:

user:
   name: zhangsan
   age: 18
   password: 123456

 数组/List/Set集合:

hobby:
  - java
  - game
  - sport

在application.yml中的配置案例相关的配置项

 

 

 

@ConfigurationProperties 与 @Value 

相同点

  • 都是用来注入外部配置的属性的。

不同点

  •  @Value注解只能一个一个的进行外部属性的注入。
  • @ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。

总结

通过本项目的实现,我们成功构建了一个基本的员工和部门信息管理系统,掌握了Spring Boot的基本使用方法和开发流程。在项目中,我们学习了如何设计数据库表、创建实体类、编写控制器以及进行数据的增删改查操作。同时,我们也了解了Spring Boot的自动配置特性、依赖注入以及RESTful API的设计理念。

本项目不仅提升了我们的编程能力,也为我们在实际工作中解决类似问题提供了参考。在未来的开发中,我们可以在此基础上进一步扩展功能,如实现用户认证、数据验证、接口文档生成等。希望大家能够将所学知识运用到实际项目中,不断提升自己的技术水平。

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

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

相关文章

深度学习优化器【学习率调整和梯度修正,Optimizer】

文章目录 一、学习率调整1 余弦退火&#xff08;1&#xff09;Warm up&#xff08;2&#xff09;Cosine Anneal 2 AdaGrad3 RMSprop算法4 AdaDelta算法 二、梯度估计修正1 动量法2 Nesterov加速梯度3 Adam修正的原因 4 AdamW 三、总结参考资料 在当今快速发展的人工智能领域&am…

在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

1. 引言 随着网络视频平台的发展&#xff0c;用户对于4K高清画质的需求日益增长。然而&#xff0c;许多用户发现&#xff0c;即使购买了视频平台的会员&#xff0c;观看4K内容时画质却不如预期&#xff0c;有时甚至还会出现模糊、卡顿的情况。这种现象背后涉及到视频编码、网络…

项目复盘:TapTap聚光灯Gamejam

前言 三周的开发终于落下帷幕&#xff0c;其实我个人还是对结果很满意的&#xff0c;虽然作品不及他人的万分之一&#xff0c;不过主要目的还是以熟悉Godot引擎本身为主。这次我做的事情其实主要还是把在Unity那边学到的东西Copy到Godot来&#xff0c;仅此而已&#xff0c;几乎…

WPF自定义日历控件Calendar 的方法

推荐下载地址 https://www.haolizi.net/example/view_2107.html <UserControl.Resources><local1:DayConverter x:Key"DayConverter"/><!--导入转换器--><Style x:Key"CalendarStyle1"TargetType"{x:Type Calendar}">&…

《ToDesk云电脑vs青椒云性能测试,谁更能实现游戏自由?》

ToDesk云电脑vs青椒云性能测试 【前言】【使用云电脑的意义】【实测软件】【性能参数对比】1. 硬件配置2.游戏兼容性3. 延迟、流畅度与画面清晰度4. 用户体验5. 价格对比6. 附加功能 【游戏性能测试】《游戏一 黑悟空》《游戏二 赛博朋克 2077》《游戏三 CS反恐精英》 【本文小…

ctfshow文件包含web78~81

目录 web78 方法一&#xff1a;filter伪协议 方法二&#xff1a;input协议 方法三&#xff1a;data协议 web79 方法一:input协议 方法二&#xff1a;data协议 web80 方法一&#xff1a;input协议 方法二&#xff1a;日志包含getshell web81 web78 if(isset($_GET[file]…

动态IP是什么?

随着互联网成为人们生活的重要组成部分&#xff0c;以信息传递为主导的时代种&#xff0c;网络连接质量对我们的工作效率、学习进度以及娱乐体验等方面都有很大影响。 动态IP&#xff0c;作为网络连接中的一种重要IP代理形式&#xff0c;越来越受到用户的欢迎。本文将深入解析…

vue下载安装

目录 vue工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装 vue 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源&#xff08;永久&#xff09;&#xff…

在JAVA中使用Paho MQTT客户端

1.在maven里面配置好依赖 <dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.2</version> </dependency> 2.创建APP类 package com.leo;import org.e…

Django+websocket实现一个简单聊天

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它由IETF在2011年定为标准RFC 6455&#xff0c;并由RFC7936补充规范&#xff0c;同时WebSocket API也被W3C定为标准。 1、定义与原理 WebSocket是独立的、创建在TCP上的协议&#xff0c;它使用HTTP/1.1协议的101状态码进…

MATLAB实现人类学习优化算法HLO

1.算法简介 人类学习优化算法&#xff08;Human Learning-based Optimization&#xff0c;HLO&#xff09;是一种基于人类学习过程开发的启发式算法。HLO算法的设计灵感来源于人类的智慧和经验&#xff0c;特别是人类在学习和调整过程中展现出的适应性、学习能力和创新思维。该…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;通过收集了12种常见的水果和蔬菜&#xff08;‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’&#xff09;…

Android 策略设计模式的使用:使用设计模式,减少烂代码,让项目更好维护

目录 大家好呀~&#xff0c;我是前期后期&#xff0c;在网上冲浪的一名程序员&#xff0c;分享一些自己学到的知识&#xff0c;希望对大家有所帮助 前言&#xff1a;为什么要使用设计模式 在项目开发过程中&#xff0c;我们会对接很多种支付&#xff1a;国内&#xff08;微信…

uniapp和vite项目配置多环境编译,增加测试环境变量配置--mode test

如果你的项目是使用vite和uniapp配置开发的&#xff0c;就可以在代码里面获取到这些变量&#xff0c;但是开发&#xff0c;测试和发布是不同的请求地址&#xff0c;所以需要配置。Vite 使用 dotenv 从你的 环境目录 中的下列文件加载额外的环境变量&#xff1a; .env …

动态规划 - 编辑距离

115. 不同的子序列 困难 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 10^9 7 取模。 算法思想&#xff1a;利用动态规划&#xff0c;分s[i - 1] 与 t[j - 1]相等&#xff0c;s[i - 1] 与 t[j - 1] 不相等两种情况具…

sudo apt install jupyter-notebook安装notebook失败E: Aborting install.

问题&#xff1a; sudo apt install jupyter-notebook安装notebook失败E: Aborting install. ~/jie/mywork/PointNetCFD$ sudo apt install jupyter-notebook --fix-missing Reading package lists... Done Building dependency tree Reading state information... Do…

第16课 核心函数(方法)

掌握常用的内置函数及其用法。 数学类函数&#xff1a;abs、divmod、max、min、pow、round、sum。 类型转换函数&#xff1a;bool、int、float、str、ord、chr、bin、hex、tuple、list、dict、set、enumerate、range、object。 序列操作函数&#xff1a;all、any、filter、m…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第2天,启动项目

24.11.01 下面讲一下如何通过USB连接手机然后启动app实现真机测试&#xff0c;还是有一些坑的。 调整电脑的驱动程序&#xff0c;完成USB的连接 在启动项目的第一步我就遇见了问题&#xff0c;那就是插入usb线以后没有检测到设备。想要完成连接需要2个步骤&#xff0c;第一步…

使用Mac如何才能提高OCR与翻译的效率

OCR与截图大家都不陌生&#xff0c;或许有的朋友对于这两项功能用到的不多&#xff0c;但是如果经常会用到的话&#xff0c;那你就该看看了 iOCR&#xff0c;快捷键唤出翻译窗口&#xff0c;不论是截图翻译、划词翻译、输入翻译、剪切板翻译&#xff0c;统统快捷键完成&#x…

Etsy又被封号了!这次我终于搞懂了原因...

你是否真的了解在Etsy开店有哪些红线不能踩&#xff1f;你是否真的知道Etsy被封号后如何解决&#xff1f;本文我将探讨Etsy账号被封的常见原因&#xff0c;以及卖家可以采取的应对策略&#xff0c;以期减轻对跨境业务的伤害程度&#xff0c;感兴趣的商家速速码住&#xff0c;不…