字母哥毕业后端项目介绍方案(SpringBoot版)

字母哥毕业后端项目介绍方案(SpringBoot版)

前言

感谢支持字母哥 此文档将会持续性更新
如有同学不明白 可以直接找我 蟹蟹支持

环境安装部署教学视频

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

系统的环境

后端语言: 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
|  |  |  ├─***
|  |  |  |  ├─example
|  |  |  |  |    ├─web
|  |  |  |  |    |  └WebApplicationTests.java
|  ├─main #主要代码
|  |  ├─resources
|  |  |     ├─application.yml  #项目配置文件
|  |  |     ├─static   #系统上传资源文件目录
|  |  |     |   ├─images #上传图片存在的地方
|  |  ├─java  
|  |  |  ├─***
|  |  |  |  ├─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
|  |  |  |  |    |  |   |  |  ├─Address***ponent.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  
|  |  |  ├─***
|  |  |  |  ├─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		#用户控制器类

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


系统设计架构图

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

首先系统的代码逻辑主要写在Serviceimpl里面
然后打开星火大模型 没有就去注册一个 很简单
星火大模型免费使用超级链接

如何进行有效的提问

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 ***mons 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: ***.example.web.entity  #实体存储的包位置


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

如何启动项目

如何判断项目启动成功

如何找到文件上传的代码

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

/**
     * 批量文件上传
     * @param files 上传的文件
     * @return
     */
    @PostMapping("/BatchUpload")
    public ArrayList<FileResultDto> uploadFile(@RequestParam("file") MultipartFile[] files,HttpServletRequest request) {
        //定义一个存储文件的列表
        ArrayList<FileResultDto> 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加强版官网地址

如何执行增删改查操作的

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

保存方法

Save

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

SaveOrUpdate

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

Remove

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

Update

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

Get

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

List

// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
类型 参数名 描述
Serializable id 主键 ID
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper
boolean throwEx 有多个 result 是否抛出异常
T entity 实体对象
Function<? super Object, V> mapper 转换函数

Page(分页查询)

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

Count(记录总行数)

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

Java高级知识

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

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

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


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

使用原因

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

Idea下载链接
ToolBox链接安装

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


然后找到maven配置

对maven进行替换包源

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

或者你有自己的maven
加入这段代码

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.***/repository/public</url>
</mirror>

打开我们的idea找到maven配置

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

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

打开后找到图中的Maven

到这里 环境配置已经OK了

转载请说明出处内容投诉
CSS教程_站长资源网 » 字母哥毕业后端项目介绍方案(SpringBoot版)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买