介绍项目的搭建过程,包括依赖管理、数据库设计、实体类的创建、控制器的编写以及前端的简单实现。希望通过本项目的学习,能够加深大家对Spring Boot及相关技术的理解,为后续的开发奠定基础。
前言
在现代企业管理中,员工和部门信息的有效管理至关重要。随着信息技术的不断发展,传统的手工管理方式已经逐渐无法满足企业对效率和准确性的要求。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的设计理念。
本项目不仅提升了我们的编程能力,也为我们在实际工作中解决类似问题提供了参考。在未来的开发中,我们可以在此基础上进一步扩展功能,如实现用户认证、数据验证、接口文档生成等。希望大家能够将所学知识运用到实际项目中,不断提升自己的技术水平。
版权归原作者 程序猿零零漆 所有, 如有侵权,请联系我们删除。