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

前言

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

学习视频[日更新 必看]

学习资料
验证码
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		#用户控制器类

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

在这里插入图片描述
在这里插入图片描述

系统设计架构图

在这里插入图片描述

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

首先系统的代码逻辑主要写在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 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  #实体存储的包位置


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

在这里插入图片描述

如何启动项目

在这里插入图片描述

如何判断项目启动成功

在这里插入图片描述

如何找到文件上传的代码

在这里插入图片描述

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

/**
     * 批量文件上传
     * @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);
类型参数名描述
Tentity实体对象
CollectionentityList实体对象集合
intbatchSize插入批次数量

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);
类型参数名描述
Tentity实体对象
Wrapper< T >updateWrapper实体对象封装操作类 UpdateWrapper
CollectionentityList实体对象集合
intbatchSize插入批次数量
删除方法

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);
类型参数名描述
WrapperqueryWrapper实体包装类 QueryWrapper
Serializableid主键 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);
类型参数名描述
WrapperupdateWrapper实体对象封装操作类 UpdateWrapper
Tentity实体对象
CollectionentityList实体对象集合
intbatchSize更新批次数量
查询方法

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);
类型参数名描述
Serializableid主键 ID
WrapperqueryWrapper实体对象封装操作类 QueryWrapper
booleanthrowEx有多个 result 是否抛出异常
Tentity实体对象
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);
类型参数名描述
Serializableid主键 ID
WrapperqueryWrapper实体对象封装操作类 QueryWrapper
booleanthrowEx有多个 result 是否抛出异常
Tentity实体对象
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);
类型参数名描述
IPagepage翻页对象
WrapperqueryWrapper实体对象封装操作类 QueryWrapper

Count(记录总行数)

// 查询总记录数
int count();
// 根据 Wrapper 条件,查询总记录数
int count(Wrapper<T> queryWrapper);
类型参数名描述
IPagepage翻页对象
WrapperqueryWrapper实体对象封装操作类 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.com/repository/public</url>
</mirror>

打开我们的idea找到maven配置
在这里插入图片描述
点击OK
然后找到如下图所示的清理缓存
在这里插入图片描述
一定要重启后再进行下面的操作

打开后找到图中的Maven
在这里插入图片描述
到这里 环境配置已经OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值