学习项目第一天,先部署并了解项目commen块部分代码

发布时间:2026/10/17 1:58:46

学习项目第一天,先部署并了解项目commen块部分代码 一、前言本文汇总后端AImeeting项目通用基建核心能力涵盖项目分层架构、统一响应规约、自定义异常体系、登录用户自动注入、MyBatis-Plus持久层自动化、Redis缓存常量、分布式布隆过滤器防穿透等全套底层能力。二、知识目录Day1 核心大纲项目标准分层架构Controller / Service / Mapper 持久层 数据模型分层接口与继承核心语法interface / implements / extends 精准区分全局统一响应规约Result、Results 工具类设计思想企业级自定义异常体系抽象异常父类 三类业务异常 错误码接口/枚举登录用户自动注入机制CurrentUser 注解 参数解析器 UserContext 线程上下文MyBatis-Plus 全套持久层基建自动填充、分页插件、持久层配置Redis 缓存常量与分布式锁设计Redisson 布隆过滤器防缓存穿透双业务场景过滤器落地三、项目标准分层架构工程规范核心3.1 三层业务架构自上而下企业级 SpringBoot 项目强制职责解耦标准三层架构Controller 控制层Web层接收前端 HTTP 请求、参数校验、调用业务、返回统一 Result禁止写业务逻辑、禁止写 SQLService 业务层核心业务逻辑、事务控制、权限校验、异常抛出、数据组装是项目核心逻辑载体Mapper 持久层DAO层仅负责数据库 CRUD纯数据操作无业务判断、无事务、无异常处理3.2 数据模型分层杜绝字段混乱DOData Object数据库实体与表一一对应用于 Mapper - Service 流转包含数据库自动填充字段DTOData Transfer Object接收前端请求参数Controller 入参专用VOView Object视图返回对象脱敏、过滤敏感字段返回前端BOBusiness Object业务内部复杂组装对象仅 Service 内部流转3.3 持久化核心概念持久化将内存瞬时数据落地到磁盘数据库断电不丢失。持久层即专门负责数据库交互的 Mapper 层是数据落地的唯一入口。四、核心语法interface / implements / extends 终极区分是项目错误码、异常体系、接口规范的底层语法支撑面试高频考点。interface定义接口契约声明规范、不实现逻辑可多继承接口implements类实现接口一个类可多实现必须重写接口所有抽象方法错误码枚举核心用法extends类继承类、接口继承接口类只能单继承接口支持多继承核心落地所有业务错误码枚举统一implements IErrorCode实现面向接口统一规约。五、全局统一响应与错误码体系5.1 统一返回体设计Result核心响应实体统一字段code、msg、data前后端交互标准格式Results静态工具类提供 success / fail 快速构建方法杜绝重复 new 对象5.2 错误码分层设计IErrorCode顶层错误码接口约束所有错误码必须拥有 code()、message()BaseErrorCode全局公共错误码参数错误、系统异常、权限不足等通用场景业务自定义枚举AgentErrorCodeEnum模块独有业务错误码实现 IErrorCode实现全局统一、模块隔离错误码规范A 客户端异常、B 业务异常、C 远程调用异常结构化方便前端统一处理弹窗、重试、登录跳转。六、企业级三级自定义异常体系6.1 异常继承架构RuntimeException运行时异常→ AbstractException抽象父类→ 三类具体业务异常AbstractException抽象异常父类封装错误码、异常信息通用逻辑支持自定义消息覆盖默认错误提示ClientException客户端异常参数非法、未登录、权限不足ServiceException服务端业务异常数据不存在、业务规则不满足RemoteException微服务远程调用异常6.2 核心优势配合RestControllerAdvice全局异常处理器统一捕获所有自定义异常自动封装为标准 Result 返回代码整洁、异常统一、无重复异常处理逻辑。七、登录用户自动注入机制CurrentUser 全套原理7.1 注解定义CurrentUser仅作用于 Controller 方法参数运行时生效用于自动注入当前登录用户信息。支持三种注入类型Long 用户ID / String 用户名 / UserContext 完整上下文7.2 核心实现原理UserContext基于 ThreadLocal 存储当前线程登录用户信息线程隔离保证接口并发安全自定义参数解析器实现 HandlerMethodArgumentResolver识别 CurrentUser 注解根据参数类型自动赋值WebMvc 配置注册将解析器注入 SpringMVC 容器正式生效7.3 关键避坑请求结束必须清空 ThreadLocal否则线程池复用会出现用户上下文串号、内存泄漏。八、MyBatis-Plus 持久层全套基建MP 是 MyBatis 增强工具只增强不修改原生逻辑简化单表 CRUD兼容原生 XML 复杂查询。8.1 自动填充机制核心TableField(fill FieldFill.INSERT)仅插入填充TableField(fill FieldFill.INSERT_UPDATE)插入、更新均填充配套MyMetaObjectHandler元对象处理器自动填充创建时间、更新时间、逻辑删除标识无需业务手动 set。注解标记 处理器实现 Spring 托管三者缺一不可否则填充失效。8.2 持久层插件配置DataBaseConfiguration统一持久层配置注册 MybatisPlusInterceptor 核心拦截器开启分页插件。核心避坑未配置分页插件MP 分页查询 total 总条数为 0分页功能完全失效。多插件场景分页插件必须最后添加。8.3 逻辑删除统一默认 delFlag0未删除业务删除仅修改字段保留数据可追溯杜绝物理删除。九、Redis 缓存常量与分布式锁设计RedisCacheConstant统一管理项目所有 Redis Key杜绝硬编码统一前缀防冲突、方便维护。核心 Key 业务场景用户注册分布式锁防止并发重复注册分组创建分布式锁带 %s 占位符通过 String.format 动态拼接用户ID防止同用户重复创建分组用户登录缓存 Key存储 Token 关联用户上下文实现登录鉴权十、Redisson 布隆过滤器解决缓存穿透10.1 核心作用缓存穿透大量查询数据库不存在的数据绕过 Redis 直接打垮 MySQL。布隆过滤器前置拦截不存在绝对拦截、存在则放行校验。10.2 双过滤器落地场景用户注册布隆过滤器预估1亿数据、千分之一误判率拦截不存在手机号查询短链接分组布隆过滤器预估2亿数据、千分之一误判率拦截不存在分组ID查询10.3 核心特性与局限优点内存占用极低、查询速度 O(1)、分布式共享缺点存在假阳性误判、不支持删除元素、初始化参数固定不可动态修改十一、Day1 整体技术链路串联完整请求流程前端请求 → 网关/拦截器解析 Token →CurrentUser注入登录用户 → Controller 接收参数 → Service 业务校验/事务/异常处理 →布隆过滤器拦截空数据→ Redis 缓存查询 →MP持久层自动填充分页→ MySQL 数据库 → 统一 Result 响应返回十二、总结Day1 知识点覆盖后端项目底层所有基建能力工程分层规范、语法基础、统一异常与响应、用户上下文注入、MP持久层自动化、Redis缓存与分布式锁、布隆过滤器防穿透是所有 Java 企业级项目的通用标准架构也是面试核心高频考点。
延伸阅读

更多相关文章

2026/10/16 10:54:59

随机变量正弦变换的概率分布推导:从均匀分布到反正弦分布

1. 项目概述:从确定性函数到随机性探索看到“ysinx的概率分布推导”这个标题,很多朋友可能会一愣:正弦函数sin(x)不是一个确定性的数学函数吗?给定一个x,y的值就唯一确定了,这跟“概率分布”有什么关系&…

2026/10/14 6:53:29

物理审计智能体发现:让AI科学探索既高效又守规矩

1. 项目概述:当科学机器学习遇上“物理审计员”最近在科学机器学习(Scientific Machine Learning, SciML)的圈子里,一个概念讨论得越来越热:Physics-Audited Agentic Discovery。乍一看,这名字有点唬人&…

2026/10/12 3:12:30

策略模式与工厂模式实战:从“拉格朗日期中考试”看软件设计解耦

最近在技术社区里,一个名为“拉格朗日期中考试”的讨论突然火了起来。乍一看标题,你可能会以为是某个数学竞赛或者学术恶搞,但点进去才发现,这其实是一个关于“拉格朗日”在软件开发中应用场景的、极具启发性的“期中考试”。它没…

2026/10/17 4:19:50

QQ群名片批量采集的风险与合规替代方案,社群运营必读

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:19:50

OpenCV像素级逻辑运算:掩膜驱动的图像空间决策原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:19:50

停车场车位识别:多模态工程落地的四大断层

1. 为什么“停车场车位识别”不是个简单的小功能,而是一道典型的多模态工程题“停车场车位识别(一)”这个标题看起来平平无奇,甚至有点像某门课程实验的作业编号。但我在某高校智能交通实验室带过三届本科生项目,也帮两…

2026/10/17 4:19:50

统一搜索与AI助手:构建团队知识索引的架构与落地实践

1. 为什么现代团队需要统一搜索和AI助手工作节奏越来越快的今天,"信息分散"成了团队协作最大的隐形杀手。文件散落在各个云盘、知识库、项目管理系统、IM聊天记录里,找一份合同要翻三个软件,查一个客户背景要开五个标签页&#xff…

2026/10/17 4:14:50

AI驱动的企业数字孪生:从仿真复现到决策优化

1. 为什么企业数字孪生必须叠加AI:传统仿真模型的三个死穴前两年我在一家制造企业做产线仿真项目,当时用传统数字孪生工具给车间搭了一个高精度三维模型,设备运动逻辑、节拍、缓存区全都对上了,模型跑起来跟现场监控画面几乎一帧不…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/17 0:04:32

PlanarSLAM:面向曼哈顿世界的点线面联合SLAM系统

简介:本资源是面向机器人视觉与SLAM研究者的C开源RGB-D SLAM系统实现,专为结构化室内场景(如办公室、走廊)设计,通过融合点、线、平面三类几何特征并引入“曼哈顿世界”假设,显著提升位姿跟踪鲁棒性与稠密地…

2026/10/17 0:04:32

TDH Workflow调度实战:从DAG依赖驱动到任务编排与故障排查

1. 从一个调度脚本说起:TDH Workflow到底在解决什么问题第一次接触TDH的Workflow,是在一个数据清洗项目里。当时团队每天要跑几十个ETL任务,任务之间有严格的先后依赖——A表清洗完才能跑B表的关联,B表跑完才能触发C表的聚合。最开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑