字母哥毕业后端项目介绍方案(SpringBoot版)
作者:mmseoamin日期:2024-02-28

文章目录

  • 前言
  • 环境安装部署教学视频
  • 系统的环境
  • 系统架构设计
  • 系统完整架构文件目录图
  • 系统必须掌握架构文件目录图
  • 系统前后端数据交互的细节
  • 系统设计架构图
  • 代码翻译(如果有看不懂的代码如何进行自救看懂)
    • 如何进行有效的提问
      • 1.看不懂某个方法 如何进行提问
      • 2.如何提问某个文件的作用是干嘛的
      • 系统技术清单
        • Springboot
        • Mybatis
        • Lombok
        • Jwt
        • POI
        • MySql
        • 序列化与反序列化
        • 拉姆达表达式
        • 全局过滤器
        • 文件上传与下载
        • 该系统核心(必看)
          • 系统配置文件application.yml
          • 如何找到本项目的数据库配置地址
          • 如何启动项目
          • 如何判断项目启动成功
          • 如何找到文件上传的代码
          • 系统是如何操作数据库的 增删改查(必看)
            • Mybatis
            • 如何执行增删改查操作的
              • 保存方法
              • 删除方法
              • 修改方法
              • 查询方法
              • Java高级知识
                • 配置前后端分离的项目 出现跨域问题如何解决
                • 如何暴露该系统上传的文件(图片资源)
                • Java基础知识
                  • Java时间类的一些操作(必看)
                  • 系统开发工具以及环境安装
                    • 第一步如果你有idea 判断自己的idea是不是满足条件
                    • 使用原因
                    • 第二步使用idea打开项目打开Maven配置

                      前言

                      感谢支持字母哥 此文档将会持续性更新

                      如有同学不明白 可以直接找我 蟹蟹支持

                      环境安装部署教学视频

                      环境安装以及启动流程看这里

                      系统的环境

                      后端语言: 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		#用户控制器类
                        

                        系统前后端数据交互的细节

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第1张

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第2张

                        系统设计架构图

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第3张

                        代码翻译(如果有看不懂的代码如何进行自救看懂)

                        首先系统的代码逻辑主要写在Service的impl里面

                        然后打开星火大模型 没有就去注册一个 很简单

                        星火大模型免费使用超级链接

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第4张

                        如何进行有效的提问

                        1.看不懂某个方法 如何进行提问

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第5张

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第6张

                        2.如何提问某个文件的作用是干嘛的

                        比如contoller的控制器

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第7张

                        比如entity文件

                        字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第8张

                        系统技术清单

                        • 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,密码123456
                          spring:
                            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  #实体存储的包位置
                          

                          如何找到本项目的数据库配置地址

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第9张

                          如何启动项目

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第10张

                          如何判断项目启动成功

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第11张

                          如何找到文件上传的代码

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第12张

                          实现逻辑非常清晰命令 标准的上传写法

                          /**
                               * 批量文件上传
                               * @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() <= 0) {
                                          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;
                              } 
                          

                          系统是如何操作数据库的 增删改查(必看)

                          Mybatis

                          相信学java这块的 没有人不知道Mybatis

                          本系统使用的Mybatis的官网地址我先给大家

                          Mybatis加强版官网地址

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第13张

                          如何执行增删改查操作的

                          官网增删改查文档的超级链接

                          保存方法

                          Save

                          // 插入一条记录(选择字段,策略插入)
                          boolean save(T entity);
                          // 插入(批量)
                          boolean saveBatch(Collection entityList);
                          // 插入(批量)
                          boolean saveBatch(Collection entityList, int batchSize);
                          
                          类型参数名描述
                          Tentity实体对象
                          CollectionentityList实体对象集合
                          intbatchSize插入批次数量

                          SaveOrUpdate

                          // 插入一条记录(选择字段,策略插入)
                          // TableId 注解存在更新记录,否插入一条记录
                          boolean saveOrUpdate(T entity);
                          // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
                          boolean saveOrUpdate(T entity, Wrapper updateWrapper);
                          // 批量修改插入
                          boolean saveOrUpdateBatch(Collection entityList);
                          // 批量修改插入
                          boolean saveOrUpdateBatch(Collection entityList, int batchSize);
                          
                          类型参数名描述
                          Tentity实体对象
                          Wrapper< T >updateWrapper实体对象封装操作类 UpdateWrapper
                          CollectionentityList实体对象集合
                          intbatchSize插入批次数量
                          删除方法

                          Remove

                          // 根据 queryWrapper 设置的条件,删除记录
                          boolean remove(Wrapper queryWrapper);
                          // 根据 ID 删除
                          boolean removeById(Serializable id);
                          // 根据 columnMap 条件,删除记录
                          boolean removeByMap(Map columnMap);
                          // 删除(根据ID 批量删除)
                          boolean removeByIds(Collection idList);
                          
                          类型参数名描述
                          WrapperqueryWrapper实体包装类 QueryWrapper
                          Serializableid主键 IDr
                          MapcolumnMap表字段 map 对象
                          CollectionidList主键 ID 列表
                          修改方法

                          Update

                          // 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
                          boolean update(Wrapper updateWrapper);
                          // 根据 whereWrapper 条件,更新记录
                          boolean update(T updateEntity, Wrapper whereWrapper);
                          // 根据 ID 选择修改
                          boolean updateById(T entity);
                          // 根据ID 批量更新
                          boolean updateBatchById(Collection entityList);
                          // 根据ID 批量更新
                          boolean updateBatchById(Collection entityList, int batchSize);
                          
                          类型参数名描述
                          WrapperupdateWrapper实体对象封装操作类 UpdateWrapper
                          Tentity实体对象
                          CollectionentityList实体对象集合
                          intbatchSize更新批次数量
                          查询方法

                          Get

                          // 根据 ID 查询
                          T getById(Serializable id);
                          // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
                          T getOne(Wrapper queryWrapper);
                          // 根据 Wrapper,查询一条记录
                          T getOne(Wrapper queryWrapper, boolean throwEx);
                          // 根据 Wrapper,查询一条记录
                          Map getMap(Wrapper queryWrapper);
                          // 根据 Wrapper,查询一条记录
                           V getObj(Wrapper queryWrapper, Function mapper);
                          
                          类型参数名描述
                          Serializableid主键 ID
                          WrapperqueryWrapper实体对象封装操作类 QueryWrapper
                          booleanthrowEx有多个 result 是否抛出异常
                          Tentity实体对象
                          Functionmapper转换函数

                          List

                          // 查询所有
                          List list();
                          // 查询列表
                          List list(Wrapper queryWrapper);
                          // 查询(根据ID 批量查询)
                          Collection listByIds(Collection idList);
                          // 查询(根据 columnMap 条件)
                          Collection listByMap(Map columnMap);
                          // 查询所有列表
                          List> listMaps();
                          // 查询列表
                          List> listMaps(Wrapper queryWrapper);
                          // 查询全部记录
                          List listObjs();
                          // 查询全部记录
                           List listObjs(Function mapper);
                          // 根据 Wrapper 条件,查询全部记录
                          List listObjs(Wrapper queryWrapper);
                          // 根据 Wrapper 条件,查询全部记录
                           List listObjs(Wrapper queryWrapper, Function mapper);
                           
                          
                          类型参数名描述
                          Serializableid主键 ID
                          WrapperqueryWrapper实体对象封装操作类 QueryWrapper
                          booleanthrowEx有多个 result 是否抛出异常
                          Tentity实体对象
                          Functionmapper转换函数

                          Page(分页查询)

                          // 无条件分页查询
                          IPage page(IPage page);
                          // 条件分页查询
                          IPage page(IPage page, Wrapper queryWrapper);
                          // 无条件分页查询
                          IPage> pageMaps(IPage page);
                          // 条件分页查询
                          IPage> pageMaps(IPage page, Wrapper queryWrapper);
                          
                          类型参数名描述
                          IPagepage翻页对象
                          WrapperqueryWrapper实体对象封装操作类 QueryWrapper

                          Count(记录总行数)

                          // 查询总记录数
                          int count();
                          // 根据 Wrapper 条件,查询总记录数
                          int count(Wrapper queryWrapper);
                          
                          类型参数名描述
                          IPagepage翻页对象
                          WrapperqueryWrapper实体对象封装操作类 QueryWrapper

                          Java高级知识

                          配置前后端分离的项目 出现跨域问题如何解决

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第14张

                          如何暴露该系统上传的文件(图片资源)

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第15张

                          Java基础知识

                          Java时间类的一些操作(必看)

                          Java 8引入了全新的日期和时间API,即java.time包,提供了用于处理日期、时间和时间间隔的类。以下是一些示例

                          LocalDate:表示一个日期,例如:2023-07-03,对应MySQL的DATE类型。

                          LocalDate date = LocalDate.now(); // 获取当前日期
                          int year = date.getYear(); // 获取年份
                          int month = date.getMonthValue(); // 获取月份
                          int day = date.getDayOfMonth(); // 获取日期
                          

                          ** LocalTime:表示一个时间,例如:12:30:45,对应MySQL的TIME类型。 **

                          LocalTime time = LocalTime.now(); // 获取当前时间
                          int hour = time.getHour(); // 获取小时
                          int minute = time.getMinute(); // 获取分钟
                          int second = time.getSecond(); // 获取秒数
                          

                          **LocalDateTime:表示日期和时间,例如:2023-07-03T12:30:45,对应MySQL的DATETIME类型。 **

                          LocalDateTime dateTime = LocalDateTime.now(); // 获取当前日期和时间
                          int year = dateTime.getYear(); // 获取年份
                          int month = dateTime.getMonthValue(); // 获取月份
                          int day = dateTime.getDayOfMonth(); // 获取日期
                          int hour = dateTime.getHour(); // 获取小时
                          int minute = dateTime.getMinute(); // 获取分钟
                          int second = dateTime.getSecond(); // 获取秒数
                          

                          **Period:表示日期之间的间隔。 **

                          LocalDate date1 = LocalDate.of(2020, 6, 1);
                          LocalDate date2 = LocalDate.of(2023, 7, 3);
                          Period period = Period.between(date1, date2); // 计算两个日期之间的间隔
                          int years = period.getYears(); // 获取年份间隔
                          int months = period.getMonths(); // 获取月份间隔
                          int days = period.getDays(); // 获取日期间隔
                          

                          ** Duration:表示时间之间的间隔。 **

                          LocalTime time1 = LocalTime.of(12, 0, 0);
                          LocalTime time2 = LocalTime.now();
                          Duration duration = Duration.between(time1, time2); // 计算两个时间之间的间隔
                          long hours = duration.toHours(); // 获取小时间隔
                          long minutes = duration.toMinutes(); // 获取分钟间隔
                          long seconds = duration.getSeconds(); // 获取秒数间隔
                          

                          系统开发工具以及环境安装

                          第一步如果你有idea 判断自己的idea是不是满足条件

                          我们用了新版的Spring boot 至少需要java支持17

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第16张

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第17张

                          如果没有选项 可以卸载你当前的idea

                          使用原因

                          为什么要使用Idea Idea开发的效率高 功能齐全

                          注意 Idea可以从官方下载 下面有官方下载的链接 然后去淘宝花10到30块买个idea注册码 不要用破解版了 功能阉割 不能更新 2023年了 一顿饭钱就搞定了

                          Idea下载链接

                          ToolBox链接安装

                          第二步使用idea打开项目打开Maven配置

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第18张

                          然后找到maven配置

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第19张

                          对maven进行替换包源

                          找到博主放到项目根目录的setting.xml

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第20张

                          或者你有自己的maven

                          加入这段代码

                          
                              aliyunmaven
                              *
                              阿里云公共仓库
                              https://maven.aliyun.com/repository/public
                          
                          

                          打开我们的idea找到maven配置

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第21张

                          点击OK

                          然后找到如下图所示的清理缓存

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第22张

                          一定要重启后再进行下面的操作

                          打开后找到图中的Maven

                          字母哥毕业后端项目介绍方案(SpringBoot版),在这里插入图片描述,第23张

                          到这里 环境配置已经OK了