行业知识
字母哥毕业后端项目介绍方案(SpringBoot版)
文章目录
- 前言
- 学习视频[日更新 必看]
- 环境安装部署教学视频
- 系统的环境
- 系统架构设计
- 系统架构图
- 系统完整架构文件目录图
- 系统必须掌握架构文件目录图
- 系统前后端数据交互的细节
- 系统设计架构图
- 代码翻译(如果有看不懂的代码如何进行自救看懂)
- 如何进行有效的提问
- 1.看不懂某个方法 如何进行提问
- 2.如何提问某个文件的作用是干嘛的
- 系统技术清单
- Springboot
- Mybatis
- Lombok
- Jwt
- POI
- MySql
- 序列化与反序列化
- 拉姆达表达式
- 全局过滤器
- 文件上传与下载
- 该系统核心(必看)
- 系统配置文件application.yml
- 如何找到本项目的数据库配置地址
- 如何启动项目
- 如何判断项目启动成功
- 如何找到文件上传的代码
- 系统是如何操作数据库的 增删改查(必看)
- Mybatis
- 如何执行增删改查操作的
- 保存方法
- 删除方法
- 修改方法
- 查询方法
- Java高级知识
- 配置前后端分离的项目 出现跨域问题如何解决
- 如何暴露该系统上传的文件(图片资源)
- Java基础知识
- Java时间类的一些操作(必看)
- 系统开发工具以及环境安装
- 第一步如果你有idea 判断自己的idea是不是满足条件
- 使用原因
- 第二步使用idea打开项目打开Maven配置
前言
感谢支持字母哥 此文档将会持续性更新
如有同学不明白 可以直接找我 蟹蟹支持
学习视频[日更新 必看]
学习资料
验证码
y94a
环境安装部署教学视频
环境安装以及启动流程看这里
系统的环境
后端语言: Java
后端框架: Spring Boot
服务器:Tomcat
Jdk版本:17
数据库:Mysql5.7或者更高都可
操作系统和内存: windows10以上都可,内存大于8GB
软件的编译环境:Java17
开发工具:Idea
系统架构设计
本系统采用B/S模式,将系统划分为三层,分为客户端、服务器端、数据库三个层次。其中:
- 客户端:采用html、css、js、vue、elementui等开发技术,提供友好的操作界面。
- 服务器端:使用Tomcat服务器,通过HTTP协议与客户端通信,负责系统逻辑处理。
- 数据库:使用MySQL数据库进行数据存储,保证数据的可靠性和安全性。
系统架构图
系统完整架构文件目录图
├─HELP.md├─pom.xml # 系统安装其他的依赖的包 里面可能包括springboot、mybatis、lombok、jwt、poi等库├─src#源文件| ├─test #测试文件 | | ├─java| | | ├─com| | | | ├─example| | | | | ├─web| | | | | | └WebApplicationTests.java| ├─main #主要代码| | ├─resources| | | ├─application.yml #项目配置文件| | | ├─static #系统上传资源文件目录| | | | ├─images #上传图片存在的地方| | ├─java | | | ├─com| | | | ├─example| | | | | ├─web| | | | | | ├─SysConst.java #系统常量| | | | | | ├─WebApplication.java #系统启动文件| | | | | | ├─tools #工具库| | | | | | | ├─BaseContext.java #请求上下文| | | | | | | ├─CollaborativeFiltering.java #协同过滤算法| | | | | | | ├─CurrentUserInterceptor.java #当前请求的用户截面| | | | | | | ├─Extension.java #扩展帮助类| | | | | | | ├─GlobalExceptionHandler.java #全局异常处理类| | | | | | | ├─GlobalResponseAdvice.java #全局返回结果处理类| | | | | | | ├─HttpUtils.java #http网络请求工具类| | | | | | | ├─InterceptorConfig.java #mybatis截面类| | | | | | | ├─JWTInterceptor.java #jwt截面类| | | | | | | ├─JWTUtils.java #jwt工具类| | | | | | | ├─LocalDateTimeConfig.java #本地事件配置类| | | | | | | ├─MybatisPlusConfig.java #mybatis分页配置类| | | | | | | ├─MyMetaObjectHandler.java #mybatis操作数据之前处理类| | | | | | | ├─QRCodeTools.java #二维码识别工具类| | | | | | | ├─wx #微信类| | | | | | | | └WeiXinUtils.java #微信扩展方法| | | | | | | ├─exception #异常处理目录| | | | | | | | └CustomException.java #异常报错基类| | | | | | | ├─dto #基础模型目录| | | | | | | | ├─BaseDto.java #基本模型父类| | | | | | | | ├─CurrentUserDto.java #当前用户信息类| | | | | | | | ├─FileResultDto.java #文件上传结果存储类| | | | | | | | ├─IdInput.java #基础单id查询模型类| | | | | | | | ├─IdsInput.java #基础多id查询模型类| | | | | | | | ├─PagedInput.java #基础分页查询模型类| | | | | | | | ├─PagedResult.java #基础分页查询结果模型类| | | | | | | | ├─ResponseData.java #基础响应结果包装模型类| | | | | | | | ├─SelectResult.java #基础下拉框包装模型类| | | | | | | | └UserCalculateCosineSimilarity.java #协同过滤算法包装类| | | | | | | ├─amap # 高德地图扩展类| | | | | | | | ├─MapUtils.java | | | | | | | | ├─dto| | | | | | | | | ├─AddressComponent.java| | | | | | | | | ├─DrivingResultDto.java| | | | | | | | | ├─Paths.java| | | | | | | | | ├─Regeocode.java| | | | | | | | | ├─RegeoInput.java| | | | | | | | | ├─RegeoResultDto.java| | | | | | | | | ├─Route.java| | | | | | | | | ├─RoutePlanningResultDto.java| | | | | | | | | ├─Steps.java| | | | | | | | | └Tmcs.java| | | | | | ├─service# 业务类*| | | | | | | ├─AppUserService.java# 用户业务声明类| | | | | | | ├─impl#业务实现目录| | | | | | | | ├─AppUserServiceImpl.java #用户业务实现类| | | | | | ├─mapper#mapper目录 | | | | | | | ├─AppUserMapper.java#用户CRUD类| | | | | | ├─entity#数据库对应实体类| | | | | | | ├─AppUser.java #用户表实体类| | | | | | | ├─BaseEntity.java#基础实体类| | | | | | | ├─Enums.java#枚举类| | | | | | ├─dto#前后盾传输模型目录| | | | | | | ├─AppUserDto.java #用户模型| | | | | | | ├─query#查询模型目录| | | | | | | | ├─AppUserPagedInput.java#用户分页查询模型类| | | | | | ├─controller#控制器目录| | | | | | | ├─AppUserController.java#用户控制器类
系统必须掌握架构文件目录图
├─HELP.md├─pom.xml # 系统安装其他的依赖的包 里面可能包括springboot、mybatis、lombok、jwt、poi等库├─src#源文件| ├─main #主要代码| | ├─resources| | | ├─application.yml #项目配置文件| | | ├─static #系统上传资源文件目录| | | | ├─images #上传图片存在的地方| | ├─java | | | ├─com| | | | ├─example| | | | | ├─web| | | | | | ├─service# 业务类*| | | | | | | ├─AppUserService.java# 用户业务声明类| | | | | | | ├─impl#业务实现目录| | | | | | | | ├─AppUserServiceImpl.java #用户业务实现类| | | | | | ├─mapper#mapper目录 | | | | | | | ├─AppUserMapper.java#用户CRUD类| | | | | | ├─entity#数据库对应实体类| | | | | | | ├─AppUser.java #用户表实体类| | | | | | | ├─BaseEntity.java#基础实体类| | | | | | | ├─Enums.java#枚举类| | | | | | ├─dto#前后盾传输模型目录| | | | | | | ├─AppUserDto.java #用户模型| | | | | | | ├─query#查询模型目录| | | | | | | | ├─AppUserPagedInput.java#用户分页查询模型类| | | | | | ├─controller#控制器目录| | | | | | | ├─AppUserController.java#用户控制器类
系统前后端数据交互的细节
系统设计架构图
代码翻译(如果有看不懂的代码如何进行自救看懂)
首先系统的代码逻辑主要写在Service的impl里面
然后打开星火大模型 没有就去注册一个 很简单
星火大模型免费使用超级链接
如何进行有效的提问
1.看不懂某个方法 如何进行提问
2.如何提问某个文件的作用是干嘛的
比如contoller的控制器
比如entity文件夹
系统技术清单
- Java语言
- SpringBoot
- Mybatis
- Lombok
- Jwt
- POI
- MySql
- 序列化与反序列化
- 拉姆达表达式
- 全局过滤器
- 文件上传与下载
Springboot
创建独立的Spring应用,这意味着你可以专注于业务逻辑的开发而不是配置和环境的问题。
内嵌Web服务器,如Tomcat、Jetty等,使得应用的部署无需外部容器,极大地简化了应用的部署流程。
自动Starter依赖,可以简化构建配置,你只需要添加相应的场景依赖即可。
自动配置Spring以及第三方功能,减少了手动配置的工作量。
提供生产级别的监控、健康检查以及外部优化配置,这些功能可以帮助我们更好地管理和优化应用。
无代码生成、无需编写XML,进一步简化了开发流程。
依赖简化:Spring Boot自有的starter中提供了一些可以快捷使用的依赖,让整合或集成一些常用的功能更便捷。
一句话概括:Spring Boot是整合Spring技术栈的一种快速开发框架,它极大地简化了Spring应用的开发、部署和运维工作。
Mybatis
MyBatis是一款开源的持久层框架,它极大地简化了Java对数据库的操作。具有自定义SQL、存储过程和高级映射的特性。MyBatis有效地避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程,通过内部封装JDBC,开发者只需要关注SQL语句本身。此外,MyBatis可以通过简单的XML或注解来配置和映射原生类型、接口和Java POJO(Plain Old Java Objects,普通的老式Java对象)为数据库中的记录。这样的设计使得MyBatis非常适用于处理大量数据的场合。总的来说,MyBatis是一款优秀的持久层框架,它让数据库操作变得更加简单明了。
Lombok
Lombok是一个Java库,它能够自动插入编辑器和构建工具,从而简化Java开发的过程。这个库的主要目标是消除Java的冗长,尤其是对于简单的Java对象(POJO)。例如,开发人员经常需要在实体类中编写大量的getter或者setter方法,使用Lombok后,可以通过简单的注解形式来减少这些重复的代码,从而提高开发效率。此外,Lombok还具有自动化日志变量的功能。使用Lombok需要的开发环境是Java+Maven+IntelliJ IDEA或者Eclipse (安装Lombok Plugin)。
Jwt
JWT,全称JSON Web Token,是一种基于token的身份认证方案。它可以实现无状态、单点登录、兼容性和安全性的Web应用授权。在Java中,处理JWT的方式有很多,例如可以使用java-jwt库,这是一个实现了RFC 7519的库。此外,还有JJWT这个纯Java库,用于在JVM和Android上创建和验证JWTs和JWKs。JJWT支持所有标准的JWS和JWE算法,以及自定义声明、加密、压缩和密钥管理。这些库提供了丰富的功能和简单的接口,使得在Java中使用JWT变得更加方便。
POI
POI是Apache POI项目,它是一个用于读写Microsoft Office文件格式的Java库。POI支持多种Office文档格式,包括Excel、Word、PowerPoint等。在Java中,可以使用POI库来读取和写入这些文件,实现对Office文档的操作。例如,可以使用POI库来读取Excel文件中的数据,或者将数据写入到Excel文件中。此外,POI还提供了一些高级功能,如合并单元格、设置样式、插入图片等。使用POI库可以方便地处理各种Office文档,提高开发效率。
MySql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于Oracle旗下产品。它是一种基于SQL查询语言的开源跨平台数据库管理系统,也是目前市面上最流行的数据库管理软件之一。具有很多独特的特点,如支持多种操作系统、编程语言和存储引擎,可以处理大型数据库,同时也非常适合中小型网站和Web应用开发。这些特性使得MySQL广泛应用于互联网中,成为了WEB应用开发中最主流的数据库管理系统。
序列化与反序列化
JSON的序列化是将一个JavaScript对象或值转换为JSON字符串的过程,而反JSON的序列化是将一个JavaScript对象或值转换为JSON字符串的过程,而反序列化则是将JSON字符串转换回原始的JavaScript对象或值的过程。
在Java中,可以使用内置的JSON库来实现JSON的序列化和反序列化。例如,使用ObjectMapper类可以将Java对象转换为JSON字符串,也可以将JSON字符串转换为Java对象。
拉姆达表达式
Java的Lambda表达式有许多优点,以下是一些主要的优点:
代码精简优雅:Lambda表达式可以使代码变得更加精简和优雅。例如,在遍历Map时,使用lambda表达式可以大大简化代码,如demoMap.forEach((k, v) -> list.add(v));。
提高编程效率:Lambda表达式能够将函数作为参数进行传递,使得编程更加高效。这种特性在一些需要将函数作为参数的场景中非常有用,例如在集合类的流式操作或者匿名对象实现相关场景。
函数式编程:Lambda表达式是函数式编程的一种体现,它允许我们将一个函数作为另外一个函数的参数,或者理解为一段可以传递的代码(将代码作为实参)。这种特性在其他语言中已经得到广泛应用,例如JavaScript和Python,因此在Java 8中引入Lambda表达式后,Java程序员也能更好地利用这一特性,提高编程效率。
替代匿名类:在Java 8之前,如果我们需要创建一个只包含一个抽象方法的匿名类,我们需要使用匿名内部类。但是,自从Java 8添加了函数式接口和lambda表达式后,我们就可以使用更简洁的lambda表达式来替代匿名类。
总的来说,Java的Lambda表达式提供了一种更简洁、更高效的方式来编写代码,特别是在涉及到集合类的流式操作或者匿名对象实现相关场景。
全局过滤器
Java全局过滤器是指在Java Web应用程序中,对所有的请求和响应进行拦截和处理的过滤器。它通常用于实现一些通用的功能,例如身份验证、日志记录、性能监控等。
文件上传与下载
Java的文件和上传的好处和优点如下:
跨平台性:Java是一种跨平台的编程语言,可以在不同的操作系统上运行。因此,使用Java编写的文件上传程序可以在多个平台上运行,具有很高的可移植性。
安全性:Java提供了许多安全机制来保护文件上传过程中的数据安全。例如,可以使用加密算法对文件进行加密,以防止数据泄露。
强大的库支持:Java拥有丰富的类库和框架,可以帮助开发人员快速实现文件上传功能。例如,Apache Commons FileUpload是一个常用的文件上传库,它提供了简单易用的API来处理文件上传请求。
易于维护:Java代码结构清晰,易于维护。在开发文件上传程序时,可以使用面向对象的编程思想来组织代码,提高代码的可读性和可维护性。
高性能:Java虚拟机(JVM)具有高度优化的性能,可以实现高效的文件上传操作。此外,Java还提供了多线程编程机制,可以充分利用多核处理器的优势,提高文件上传的速度。
该系统核心(必看)
系统配置文件application.yml
server: tomcat: #tomact 服务器的配置 relaxed-query-chars: '|,{,},[,]' #进行get请求到时候 如何参数包含[,{,},] 认为是正常的 port: 7245 # 端口#数据库名:mysql,用户名root,密码123456spring: servlet: multipart: #文件的上传配置 max-request-size: 100MB #请求的最大报文长度不能超过100MB max-file-size: 1024MB #上传的文件最大不能超过1024MB datasource: #数据库的配置 username: sa #数据库的账号 password: 123456 #数据库的密码 url: jdbc:mysql://localhost:3306/resthome?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai jackson: # json序列号配置 property-naming-strategy: UPPER_CAMEL_CASE #设置大写开头的命名风格 date-format: yyyy-MM-dd HH:mm:ss #设置标准的时间格式 time-zone: Asia/Shanghai #时间对于的时区mybatis-plus: #操作数据库的ORM框架 mybatis mapper-locations: mapper/*.xml #配置对于的mapper文件位置 global-config: #mybatis的全局配置 db-config: #数据库的配置 table-prefix: #表前面是否加前缀 如果不配置为空 会导致查询的sql表前面带有特定 前缀 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: false #是否转换成大小写 type-aliases-package: com.example.web.entity #实体存储的包位置如何找到本项目的数据库配置地址
如何启动项目
如何判断项目启动成功
如何找到文件上传的代码
实现逻辑非常清晰命令 标准的上传写法
/** * 批量文件上传 * @param files 上传的文件 * @return */ @PostMapping("/BatchUpload") public ArrayList uploadFile(@RequestParam("file") MultipartFile[] files,HttpServletRequest request) { //定义一个存储文件的列表 ArrayList fileResultDtos = new ArrayList(); //获取项目运行的绝对路径 String filePath = System.getProperty("user.dir"); //循环处理一下文件 是否满足格式,不满足直接报错给前端 for (MultipartFile file : files) { if (file.isEmpty()) { throw new CustomException("文件不能为空"); } if (file.getSize() throw new CustomException("上传的文件不能为空!请重新上传"); } } //循环保存文件到项目的src\main\resource\static\images路径下 for (MultipartFile file : files) { //获取文件原始的名称 String originFileName = file.getOriginalFilename(); //随机生成一个时间 Long time = new Date().getTime(); //声明一个保存目录的路径 String dirPath = filePath + "\src\main\resources\static\images\" + time; //创建一个文件或者文件夹的操作对象 File dirFile = new File(dirPath); //判断文件是否存在 不存在的话执行下面的代码 if (!dirFile.exists()) { //创建这个目录 dirFile.mkdirs(); } //定义一个文件输出流 FileOutputStream fileOutputStream = null; //try catch处理流 防止报错导致系统崩掉 try { //创建一个文件 fileOutputStream = new FileOutputStream(dirPath +"\"+ originFileName); //把前端传入的内容以byte是格式写入到流里面 fileOutputStream.write(file.getBytes()); //结束流 fileOutputStream.flush(); //关闭流 fileOutputStream.close(); //定义一个返回给前端的路径地址 String url = "http://localhost:7245/images/" + time + "/" + originFileName; //加入到返回的列表中 fileResultDtos.add(new FileResultDto(url, originFileName)); } catch (java.io.IOException e) { e.printStackTrace(); } } return fileResultDtos; }h3系统是如何操作数据库的 增删改查(必看)/h3 h4Mybatis/h4 p相信学java这块的 没有人不知道Mybatis/pp本系统使用的Mybatis的官网地址我先给大家/ppMybatis加强版官网地址/p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-2504211Z95NX.png" //p h4如何执行增删改查操作的/h4 p官网增删改查文档的超级链接/p h5保存方法/h5 pSave/p pre // 插入一条记录(选择字段,策略插入)boolean save(T entity);// 插入(批量)boolean saveBatch(CollectionT entityList);// 插入(批量)boolean saveBatch(CollectionT entityList, int batchSize);/pre tabletheadtrth类型/thth参数名/thth描述/th/tr/theadtbodytrtdT/tdtdentity/tdtd实体对象/td/trtrtdCollection/tdtdentityList/tdtd实体对象集合/td/trtrtdint/tdtdbatchSize/tdtd插入批次数量/td/tr/tbody/table pSaveOrUpdate/p pre // 插入一条记录(选择字段,策略插入)// TableId 注解存在更新记录,否插入一条记录boolean saveOrUpdate(T entity);// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法boolean saveOrUpdate(T entity, WrapperT updateWrapper);// 批量修改插入boolean saveOrUpdateBatch(CollectionT entityList);// 批量修改插入boolean saveOrUpdateBatch(CollectionT entityList, int batchSize);/pre tabletheadtrth类型/thth参数名/thth描述/th/tr/theadtbodytrtdT/tdtdentity/tdtd实体对象/td/trtrtdWrapperupdateWrapper 实体对象封装操作类 UpdateWrapper Collection entityList 实体对象集合 int batchSize 插入批次数量 删除方法
Remove
// 根据 queryWrapper 设置的条件,删除记录boolean remove(Wrapper queryWrapper);// 根据 ID 删除boolean removeById(Serializable id);// 根据 columnMap 条件,删除记录boolean removeByMap(Map columnMap);// 删除(根据ID 批量删除)boolean removeByIds(Collection
下一篇:我的世界小白服务器怎么样?