接网站开发做多少钱,百度统计数据,做网站开发公司,站群seo文章目录 一、需求开发流程二、环境搭建数据库准备三、部门管理四、员工管理4.1 分页(条件)查询4.2 批量删除员工 五、文件上传5.1 介绍5.2 本地存储5.3 阿里云OSS1. 开通OSS2. 创建存储空间Bucket 5.4 OSS快速入门5.5 OSS上传显示文件 六、配置文件6.1 yml配置6.2 C… 文章目录 一、需求开发流程二、环境搭建数据库准备三、部门管理四、员工管理4.1 分页(条件)查询4.2 批量删除员工 五、文件上传5.1 介绍5.2 本地存储5.3 阿里云OSS1. 开通OSS2. 创建存储空间Bucket 5.4 OSS快速入门5.5 OSS上传显示文件 六、配置文件6.1 yml配置6.2 ConfigurationProperties 总结第三方服务-通用思路 SDKyml配置文件全 一、需求开发流程
Github项目Springboot3Mybatis 基础管理系统
部门管理 查询部门列表删除部门新增部门修改部门 员工管理 查询员工列表(分页、条件)删除员工新增员工修改员工 文件上传 查看页面原型明确需求 根据页面原型和需求进行表结构设计、编写接口文档 阅读接口文档 思路分析 功能接口开发 就是开发后台的业务功能一个业务功能我们称为一个接口 功能接口测试 功能开发完毕后先通过Postman进行功能接口测试测试通过后再和前端进行联调测试 前后端联调测试 和前端开发人员开发好的前端工程一起测试
二、环境搭建数据库准备 实体类
Data
AllArgsConstructor
NoArgsConstructor
public class Dept implements Serializable {private Integer id;private String name;private LocalDateTime createTime;private LocalDateTime updateTime;private static final long serialVersionUID 1L;
}Data
AllArgsConstructor
NoArgsConstructor
public class Emp implements Serializable {private Integer id;private String username;private String password;private String name;private Integer gender;private String image;private Integer job;private LocalDate entrydate; //LocalDateprivate Integer deptId;private LocalDateTime createTime;//LocalDateTime private LocalDateTime updateTime;//LocalDateTime private static final long serialVersionUID 1L;
}步骤 【SpringBoot3Mybatis】框架快速搭建
准备数据库表(dept、emp)创建springboot工程引入对应的起步依赖web、mybatis、mysql驱动、lombok准备基本工具类 utils.配置文件application.properties中引入mybatis的配置信息准备对应的实体类准备对应的Mapper、Service(接口、实现类)、Controller基础结构
接口使用REST风格:【SpringMVC】RESTFul风格设计和实战 第三期
http://localhost:8080/users/1 GET查询id为1的用户
http://localhost:8080/users POST新增用户
http://localhost:8080/users PUT修改用户
http://localhost:8080/users/1 DELETE删除id为1的用户通过URL定位要操作的资源通过HTTP动词(请求方式)来描述具体的操作。 注意事项 REST是风格是约定方式约定不是规定可以打破描述模块的功能通常使用复数也就是加s的格式来描述表示此类资源而非单个资源。如users、emps、books… 三、部门管理
原型和需求 LocalDateTime
四、员工管理
4.1 分页(条件)查询
Vo
Data
AllArgsConstructor
NoArgsConstructor
public class EmpVo {private String name;private Short gender;private LocalDate begin;//LocalDate 2024-01-01private LocalDate end;//LocalDateprivate Integer page;private Integer pageSize;
}controller
RestController
RequestMapping(emps)
public class EmpController {Autowiredprivate EmpService empService;GetMappingpublic Result queryPage(EmpVo empVo){Result result empService.queryPage(empVo);return result;}
}service:
Service
public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;Overridepublic Result queryPage(EmpVo empVo) {if (empVo.getPage() null || empVo.getPageSize() null) {PageHelper.startPage(1, 10);}else{PageHelper.startPage(empVo.getPage(),empVo.getPageSize());}ListEmp empList empMapper.selectBySelective(empVo);PageInfoEmp empPageInfo new PageInfo(empList);Map map new HashMap();map.put(total,empPageInfo.getTotal());map.put(rows,empList);if (empList.isEmpty()){return Result.error(无);}return Result.success(map);}
}mapperxml select idselectBySelective resultTypecom.wake.pojo.Empselect *from empwhereif testempVo.name ! nullname like concat(%,#{empVo.name},%)/ifif testempVo.gender ! nulland gender#{empVo.gender}/ifif testempVo.end ! null and empVo.begin ! null and entrydate between #{empVo.begin} and #{empVo.end}/if/where/select4.2 批量删除员工 controller /*** 批量删除员工的数据信息* param ids* return*/DeleteMapping({ids})public Result deleteByIds(PathVariable Integer[] ids){Result result empService.deleteByIds(ids);return result;}service Overridepublic Result deleteByIds(Integer[] ids) {int rows empMapper.deleteByIds(ids);if (rows 0) {return Result.success(null);}return Result.error(为空);}mapperxml delete iddeleteByIdsdelete from emp where id inforeach collectionids open( close) separator, itemid#{id}/foreach/delete五、文件上传
5.1 介绍
Spring中提供了一个APIMultipartFile使用这个API就可以来接收到上传的文件
5.2 本地存储 MultipartFile 常见方法 Slf4j
RestController
public class UploadController {PostMapping(/upload)public Result upload(String username, Integer age, MultipartFile image) throws IOException {log.info(文件上传{},{},{},username,age,image);//获取原始文件名String originalFilename image.getOriginalFilename();//构建新的文件名String extname originalFilename.substring(originalFilename.lastIndexOf(.));//文件扩展名String newFileName UUID.randomUUID().toString()extname;//随机名文件扩展名//将文件存储在服务器的磁盘目录image.transferTo(new File(E:/images/newFileName));return Result.success();}
}上传大文件时报错 添加文件上传的容量配置
spring:servlet:multipart:max-file-size: 10MB #配置单个文件最大上传大小max-request-size: 100MB #配置单个请求最大上传大小(一次请求可以上传多个文件)本地存储的问题
如果直接存储在服务器的磁盘目录中存在以下缺点
不安全磁盘如果损坏所有的文件就会丢失容量有限如果存储大量的图片磁盘空间有限(磁盘不可能无限制扩容)无法直接访问
为了解决上述问题呢通常有两种解决方案
自己搭建存储服务器如fastDFS 、MinIO使用现成的云服务如阿里云腾讯云华为云
5.3 阿里云OSS 1. 开通OSS
阿里云——官网
2. 创建存储空间Bucket 5.4 OSS快速入门
阿里云OSS使用官方文档
阿里依赖具体看官方使用文档 dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion3.15.1/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version/dependency!-- no more than 2.3.3--dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion2.3.3/version/dependency案例代码
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.File;public class Demo {public static void main(String[] args) throws Exception {// Endpoint以华东1杭州为例其它Region请按实际情况填写。String endpoint https://oss-cn-hangzhou.aliyuncs.com;// 从环境变量中获取访问凭证。运行本代码示例之前请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称例如examplebucket。String bucketName examplebucket;// 填写Object完整路径完整路径中不能包含Bucket名称例如exampledir/exampleobject.txt。String objectName exampledir/exampleobject.txt;// 填写本地文件的完整路径例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径则默认从示例程序所属项目对应本地路径中上传文件。String filePath D:\\localpath\\examplefile.txt;// 创建OSSClient实例。OSS ossClient new OSSClientBuilder().build(endpoint, credentialsProvider);try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest new PutObjectRequest(bucketName, objectName, new File(filePath));// 如果需要上传时设置存储类型和访问权限请参考以下示例代码。// ObjectMetadata metadata new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传文件。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();}}}
}5.5 OSS上传显示文件
在新增员工的时候上传员工的图像而之所以需要上传员工的图像是因为将来我们需要在系统页面当中访问并展示员工的图像。而要想完成这个操作需要做两件事
需要上传员工的图像并把图像保存起来存储到阿里云OSS访问员工图像通过图像在阿里云OSS的存储地址访问图像 OSS中的每一个文件都会分配一个访问的url通过这个url就可以访问到存储在阿里云上的图片。所以需要把url返回给前端这样前端就可以通过url获取到图像。
工具类引入外部文件注入调用get
package com.wake.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;Component
public class AliOSSUtils {//注入配置参数实体类对象Autowiredprivate AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile multipartFile) throws IOException {// 获取上传的文件的输入流InputStream inputStream multipartFile.getInputStream();// 避免文件覆盖String originalFilename multipartFile.getOriginalFilename();String fileName UUID.randomUUID().toString() originalFilename.substring(originalFilename.lastIndexOf(.));//上传文件到 OSSOSS ossClient new OSSClientBuilder().build(aliOSSProperties.getEndpoint(),aliOSSProperties.getAccessKeyId(), aliOSSProperties.getAccessKeySecret());ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);//文件访问路径String url aliOSSProperties.getEndpoint().split(//)[0] // aliOSSProperties.getBucketName() . aliOSSProperties.getEndpoint().split(//)[1] / fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}
}controller:
RestController
public class UploadController {Autowiredprivate AliOSSUtils aliOSSUtils;PostMapping(/upload)public Result upload(MultipartFile image) throws IOException {//调用阿里云OSS工具类将上传上来的文件存入阿里云String url aliOSSUtils.upload(image);//将图片上传完成后的url返回用于浏览器回显展示return Result.success(url);}
}六、配置文件
6.1 yml配置
yml配置文件中
aliyun: #以下参数全部修改成自己的oss:endpoint: https://oss-cn-fuzhou.aliyuncs.comaccessKeyId: LTAI5t6Av5GLDxX #假的修改accessKeySecret: C1IrHzKZKvcotD4d5Tc #假的修改bucketName: web-wake-work创建实体类存放字段属性 直接使用注解 ConfigurationProperties(prefix aliyun.oss) 实体类中的属性名和配置文件当中key的名字必须要一致
package com.wake.utils;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;Data
Component
ConfigurationProperties(prefix aliyun.oss) //这样不用一个一个属性挂载Value
public class AliOSSProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}6.2 ConfigurationProperties
添加注解出现红色提示添加依赖即可 !-- ConfigurationProperties 注解--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactId/dependencyValue注解只能一个一个的进行外部属性的注入。ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。通过 configuration properties 批量的将外部的属性配置直接注入到 bin 对象的属性当中。在其他的类当中我要想获取到注入进来的属性我直接注入 bin 对象然后调用 get 方法就可以获取到对应的属性值了 总结 第三方服务-通用思路 SDK SDKSoftware Development Kit 的缩写软件开发工具包包括辅助软件开发的依赖jar包、代码示例等都可以叫做SDK。 . 简单说sdk中包含了我们使用第三方云服务时所需要的依赖以及一些示例代码。我们可以参照sdk所提供的示例代码就可以完成入门程序。 yml配置文件全
server:servlet:context-path: /spring:datasource:# 连接池类型type: com.alibaba.druid.pool.DruidDataSource # 使用Druid连接池# Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下!druid:url: jdbc:mysql://localhost:3306/db01_mybatisusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverservlet:multipart:max-file-size: 10MB #配置单个文件最大上传大小max-request-size: 100MB #配置单个请求最大上传大小(一次请求可以上传多个文件)mybatis:configuration: # setting配置auto-mapping-behavior: full # 开启resultMap自动映射 设置映射等级full 复杂情况也能映射 多表联查相关map-underscore-to-camel-case: true # true开启属性字段驼峰命名自动映射将xxx_xxx这样的列名自动映射到xxXxx这样驼峰式命名的属性名log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpltype-aliases-package: com.wake.pojo # 配置别名 批量将包下的类设置别名都为首字母小写mapper-locations: classpath:/mappers/*.xml # mapperxml位置aliyun: #以下参数全部修改成自己的oss:endpoint: https://oss-cn-fuzhou.aliyuncs.comaccessKeyId: LTAI5t9ZK8iq5T2Av6GLDxX #假的修改accessKeySecret: C0IrHKqU8S8YQcevcotD3Zd5Tc #假的修改bucketName: web-wake-work