鱼皮后端通用模板学习 — 文件结构

前言

没有学习用户中心,直接上手了OJ系统,对万用模板有点懵,于是把文件的架构自己列了一遍。 改天再补充完整对代码的解释。

整体架构

  • sql

    • create_table. sql 数据库初始化建表语句

      sql
      复制代码
      -- 创建库 create database if not exists yyzq_oj; -- 切换库 use yyzq_oj; -- 用户表 create table if not exists user ( id bigint auto_increment comment 'id' primary key, userAccount varchar(256) not null comment '账号', userPassword varchar(512) not null comment '密码', unionId varchar(256) null comment '微信开放平台id', mpOpenId varchar(256) null comment '公众号openId', userName varchar(256) null comment '用户昵称', userAvatar varchar(1024) null comment '用户头像', userProfile varchar(512) null comment '用户简介', userRole varchar(256) default 'user' not null comment '用户角色:user/admin/ban', createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间', updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间', isDelete tinyint default 0 not null comment '是否删除', index idx_unionId (unionId) ) comment '用户' collate = utf8mb4_unicode_ci;
    • post_es_mapping. json

      post_es_mapping. json 通常是用于向 Elasticsearch(ES)发送请求,以定义索引映射(mapping)的 JSON 文件。 Elasticsearch 是基于 Lucene 的分布式搜索引擎,专为实时搜索、日志分析、数据检索而生,支持 PB 级(TB更高一级)数据的高速查询。

      介绍视频:Elastic Search是什么?Lucene是什么?架构是怎么样的?_哔哩哔哩_bilibili 配套文档:https://mp.weixin.qq.com/s/RUQXIyN95hvi2wM3CyPI9w

  • src

    • main
      • java
        • 包1(generator)
        • 包2(com. yyzq. yyzqOJ)
      • resources
    • test

包内架构概览

  • annotation:注解

    • @AuthCheck :自定义注解,必须有某个角色才能使用。

      java
      复制代码
      @AuthCheck(mustRole = "admin") public void deleteUser() { // 只有具备 "admin" 角色的用户才能调用该方法 System.out.println("删除用户"); }
  • aop:面向切面编程,扩充一些方法通用的功能段

    • AuthInterceptor 登录和权限的校验
    • LogInterceptor 请求日志捕获,会捕获所有 controller ,进行计时和路径记录。
  • common: java 后端代码常用的包装类。

    • BaseResponse:前后端交互的统一相应结构 code + message + data
    • DeleteRequest:对删除请求进行封装,十分简洁
    • ErrorCode:枚举类,封装了很多错误信息,保证错误码的统一。
    • PageRequest:分页请求参数,用于页面的分页显示
    • ResultUtils:快速返回 BaseResponse 数据的包装类
  • config:配置文件,Spring会在启动时自动扫描并加载该目录下文件(@Configuration)

    • CorsConfig:开启后实现跨域请求

    • CosClientConfig:使用腾讯云对象存储客户端

      对应 application.yml 中字段:

      yaml
      复制代码
      # todo 启动腾讯云存储,需替换配置 cos: client: accessKey: xxx secretKey: xxx region: xxx bucket: xxx
    • JsonConfig: Spring MVC 自带的 Jackson,Long 转 json 精度丢失需要转字符串来修正。

    • MyBatisPlusConfig:用于简化分页

    • WxOpenConfig: 微信开放平台配置,从配置文件中读取微信开放平台的应用 ID 和应用密钥,然后采用单例模式创建并初始化一个WxMpService实例

      配置文件:

      yaml
      复制代码
      wx: # 微信开放平台配置 # todo 使用微信开放平台,需替换配置 open: appId: xxx appSecret: xxx
  • constant:一些常量

    • CommonConstant:通用常量,如升序,降序。

    • FileConstant:文件常量,如腾讯云对象存储访问地址( COS ,Cloud Object Storage)

    • UserConstant:用户常量,包括用户的状态,如登录,管理员,被封号等。

      java
      复制代码
      public interface UserConstant { // 用户登录态键 String USER_LOGIN_STATE = "user_login"; // region 权限 String DEFAULT_ROLE = "user"; String ADMIN_ROLE = "admin"; String BAN_ROLE = "ban"; }
  • controller:三层架构中的表现层,负责接受用户的请求,并调用业务层的逻辑方法。

    • FileController:文件接口,该控制器负责处理文件上传相关的请求
    • PostController
    • PostFavourController
    • PostThumbController
    • UserController
    • WxMpController
  • esdao: Elasticsearch 相关代码

    • PostEsDao 帖子 Es 相关操作,还没实现
  • exception:异常处理类

    • BusinessException:自定义异常类
    • GlobalExceptionhandler:统一处理抛出的异常,避免异常直接暴露给用户,增强健壮性和用户体验。
    • ThrowUtils:抛异常工具类,若条件成立则抛出异常
  • generate: MybatisX 生成的代码存放的位置。

  • job:定时任务和单次任务,取消注释 @Component 开启

    • IncSyncPostToEs:将数据库中近 5 分钟内有更新的帖子数据增量同步到 Elasticsearch(ES)中。
    • FullSyncPostToEs:将数据库中的所有帖子数据全量同步到 Elasticsearch(ES)中。
  • manager:自己定义的中间层,在 Service 和 Dao 中间的一个层,通用但和业务无关。

    • CosManager:将文件上传到腾讯云
  • mapper:三层架构的数据访问层,对数据库的操作,由 MybatisX 生成,方法都在对应的 XML 中。

  • model:数据类的封装

    • dto:用于不同层之间的传输,避免直接依赖实体类,也可以对数据进行筛选,如各种 Request
    • entity:各种实体类,如 帖子,问题,用户
    • enums:各种枚举类,如用户权限,OJ 判题语言等
    • vo:后端返回给前端的数据,部分隐私数据不会给前端,如 OJ 中的题目用例
  • service:三层架构的业务逻辑层,调用 Mapper 层与数据库交互。

    • 若干接口,表示要实现的逻辑。
    • impl 文件夹: implement,文件夹内是各种对接口的实现,以此选择注入的类。
  • utils:自己写的工具类

    • NetUtils
    • SpringContextUtils
    • SqlUtils
  • wxmp:微信公众号相关的开发代码

  • MainApplication:项目启动入口

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP