当前位置: 首页 > news >正文

苍穹外卖注解解析

一、 核心业务与架构层注解

1. AOP 与自动填充相关注解
为了避免每次新增或修改数据时,都手动去写setCreateTimesetUpdateUser等重复代码,项目使用了自定义注解结合 AOP 实现自动填充。

  • @AutoFill:自定义注解,标注在 Mapper 方法上。
    • 例子@AutoFill(value = OperationType.INSERT)标在void insert(Employee employee);上,告诉切面这是一个新增操作,切面会自动把创建时间、创建人塞进employee对象里。
  • @Target 和 @Retention:元注解,定义 @AutoFill 的行为。
    • 例子@Target(ElementType.METHOD)限制它只能用在方法上;@Retention(RetentionPolicy.RUNTIME)保证运行时能被 AOP 反射读取到。
  • @Aspect 和 @Pointcut:定义切面和切入点。
    • 例子@Pointcut("@annotation(com.sky.annotation.AutoFill)")精准拦截所有带有 @AutoFill 注解的方法,触发自动填充逻辑。

2. 缓存相关注解 (Spring Cache)
结合 Redis 实现声明式缓存,减少数据库查询压力。

  • @EnableCaching:开启缓存功能。
    • 例子:写在启动类SkyApplication上,相当于打开了整个项目的缓存开关。
  • @Cacheable:查缓存,没有才查库。
    • 例子@Cacheable(cacheNames = "userCache", key = "#userId")标在查询用户的方法上,先从 Redis 找userCache::1,找不到再去查数据库。
  • @CacheEvict:删缓存,保证数据一致。
    • 例子@CacheEvict(cacheNames = "userCache", key = "#userId")标在修改用户的方法上,数据一改,立马把 Redis 里的旧缓存删掉。

3. 定时任务注解 (Spring Task)
处理超时未支付等后台自动任务。

  • @EnableScheduling:开启定时任务。
    • 例子:写在启动类上。
  • @Scheduled:定义执行频率。
    • 例子@Scheduled(cron = "0 * * * * ?")标在checkOrderStatus方法上,表示每分钟执行一次,检查有没有超时的订单。

二、 Web 接口与交互层注解

1. 接口文档生成注解 (Swagger / Knife4j)
自动生成接口文档,方便前后端对接。

  • @Api 和 @ApiOperation:描述接口。
    • 例子@Api(tags = "员工管理")标在EmployeeController上;@ApiOperation(value = "新增员工")标在save方法上。
  • @ApiModel 和 @ApiModelProperty:描述实体字段。
    • 例子:在EmployeeDTO类上写@ApiModel("员工DTO"),在name字段上写@ApiModelProperty("员工姓名"),这样文档里就会显示中文说明。

2. 请求处理与参数绑定注解
接收前端传来的各种数据。

  • @RestController 和 @RequestMapping:声明控制器和基础路径。
    • 例子@RestController+@RequestMapping("/admin/employee")标在类上,表示所有接口都以/admin/employee开头。
  • @PostMapping / @GetMapping 等:映射具体请求。
    • 例子@PostMapping标在save方法上,处理 POST 请求。
  • @RequestBody:解析 JSON 数据。
    • 例子save(@RequestBody EmployeeDTO employeeDTO),Spring MVC 会自动把前端传来的 JSON 字符串变成EmployeeDTO对象。
  • @PathVariable:提取 URL 路径参数。
    • 例子getById(@PathVariable Long id),自动提取/admin/employee/1中的1
  • @RequestParam:提取查询字符串参数。
    • 例子page(@RequestParam int page, @RequestParam int pageSize),接收?page=1&pageSize=10这种参数。

三、 数据持久层注解 (MyBatis)

  • @Mapper:声明数据访问接口。
    • 例子@Mapper标在EmployeeMapper接口上,Spring 启动时会自动为它生成代理类并注入到容器中。
  • @Select / @Insert 等:直接写 SQL。
    • 例子@Select("SELECT * FROM employee WHERE id = #{id}")标在方法上,省去写 XML 文件的麻烦。

四、 基础与通用注解

  • @Service / @Autowired:依赖注入。
    • 例子@Service标在EmployeeServiceImpl上;@Autowired private EmployeeMapper employeeMapper;自动把 Mapper 注入进来。
  • @Slf4j:日志打印。
    • 例子:标在类上后,可以直接用log.info("新增员工成功");,不用手动new一个 Logger。
  • @Data:简化实体类。
    • 例子:标在Employee类上,Lombok 自动生成所有的 Getter、Setter、toString 方法
http://www.jsqmd.com/news/1248768/

相关文章:

  • 【Springboot毕设全套源码+文档】基于springboot电子政务服务管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • API限流技术解析:从算法原理到生产实践
  • ARM Cortex-M时钟门控技术解析:SCGC/DCGC寄存器与低功耗实战
  • 服务器端口详解:从基础认知到运维实战
  • 本地AI模型部署:低门槛硬件环境下的推理服务与批量任务实践
  • 重庆别墅楼梯定制教你如何选择呢?别只看效果图,先看结构安全、材料真实度和交付流程 - 中国品牌企业观察网
  • 人工辅助系统:人机协同的技术实现与应用
  • 三性六讲 一问一答完整版
  • 湖南凤凰育英民族学校 2026 招生热线、校区地址、全部班型一览,择校收藏! - 全国文武学校招生
  • CANN技术架构解析与AI异构算力优化实践
  • 一台顶多台!TPC系列工业一体机,让“显示+控制+算力+联网”不再拼凑
  • 自动化时代,如何高效部署SSL证书?
  • DP83848 RMII接口配置与实战:精简以太网PHY-MAC连接方案
  • Transformer架构演进与工程实践全解析
  • 2026新一代本地语音转文字解决方案识别准整理快带来更省心使用
  • 2026年SCMP培训避坑——中研供应链刘老师学完才发现的3个弯路 - 中研供应链官方
  • 2026年7月帝舵手表售后维修流程与收费标准防骗指南,表主必读! - 帝舵官方维修中心
  • 2026京城名表“季节性回收”时机论:为什么夏天收运动款、冬天收正装表更容易卖高价? - 日常财经早知道
  • 大模型对齐核心技术拆解:详解RLHF强化学习、PPO优化、DPO偏好对齐的差异与实践22.3
  • 如何用嘎嘎降AI处理经济学论文:经济学毕业论文降AI4.8元知网维普达标完整教程
  • 声明式Agent构建:从硬编码到AI协作的范式转变
  • AI自动化实施失败真相(被高管忽视的3个底层逻辑)
  • 2026年更新常德甲醛检测公司怎么选:只做检测不除醛的专业CMA资质实验室——国醛CMA甲醛检测及公共卫生检测 - 绿呼吸检测中心
  • 2026年7月帝舵全国售后网点查询方式及防骗指南:保护你的爱表 - 帝舵官方维修中心
  • 【单片机毕业设计推荐】基于 51 单片机的智能窗户环境监测与控制系统设计, 基于 STM32 单片机的室内环境智能调控装置设计(011503)
  • 网安学习最容易被忽视的核心能力:报错调试与问题排查深度教学
  • 2026化工厂人员定位系统怎么选?这5个维度的排名比品牌更重要
  • ArcGIS Pro新功能:栅格像素编辑器:可用于影像去云、模糊敏感设施、影像栅格重分类
  • 【Bug已解决】[Bug] AdaLora‘s update_and_allocate method is lost in inject_adapter_in_model() preventing r
  • “月入2万的白领,为什么选择在郑州东区读MBA?“