- 博客(39)
- 收藏
- 关注
原创 苍穹外卖之ThreadLocal在项目中的应用场景
是当前线程独有的变量:在ThreadLocal中填充的变量属于当前线程,对于其他线程而言是隔离的。ThreadLocal为每个线程提供了变量的实例副本,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal变量通常被修饰,当一个线程结束时,它所使用的所有ThreadLocal变量的实例副本都可以被回收。
2026-02-14 17:33:49
303
原创 苍穹外卖之SpringTask在项目中的应用场景
SpringTask是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。在无任何第三方依赖的情况下,SpringBoot默认使用模块提供的定时任务工具SpringTask,我们只需要在项目启动类加上@EnableScheduling// 开启注解方式的定时任务功能。
2026-02-14 00:52:29
851
原创 苍穹外卖之SpringCache在项目中的应用场景
SpringCache是Spring框架提供的一套声明式缓存抽象层(只提供接口,不提供实现),通过在方法上添加注解简化缓存操作,无需手动编写缓存逻辑。SpringCache支持多种缓存实现,如Caffeine、Redis、EhCache等等,并统一了缓存访问的API。
2026-01-31 16:39:04
620
原创 苍穹外卖之SpringMVC的消息转换器在项目中的应用场景
SpringMVC的消息转换器(Message Converter)是Spring框架中用于处理HTTP请求体或响应体与Java对象之间转换的组件。让开发人员可以轻松地将HTTP请求的数据映射到方法参数,并将返回的对象转换为HTTP响应。
2026-01-31 16:00:02
591
原创 苍穹外卖之Redis在项目中的应用场景
Redis是一个基于内存的key-value结构的数据库。优点:基于内存存储,读写性能高。适用场景:适合存储热点数据,比如热点商品、资讯、新闻。
2026-01-31 01:02:19
614
原创 苍穹外卖之Swagger+Knife4j在项目中的应用场景
OpenAPI规范(旧称Swagger规范),是一种与语言无关的标准,用于描述RESTful API。它使用yaml或json格式定义API的端点、操作、参数、请求/响应格式和认证方法。Swagger是由SmartBear Software提供一套用于设计、构建、文档化和测试RSETful API的开源工具集,核心是OpenAPI规范。Swagger提供了一种标准化的方式来描述API的结构、请求参数和响应格式等信息,使得前后端开发人员能够更高效地协作。
2026-01-22 22:20:56
914
原创 苍穹外卖之JWT在项目中的应用场景
JWT(JSON Web Token):通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。作用:授权认证。用户一旦登录,后续每个请求都将携带JWT,系统每次处理用户的请求之前,都要先进行JWT安全校验,只有校验通过才能继续处理请求。/*** jwt令牌校验的拦截器抽象父类(模板方法设计模式)*/@Slf4j@Autowired@Override// 判断当前拦截到的是Controller的方法还是其他资源if (!// 当前拦截到的不是动态方法,直接放行。
2026-01-18 01:25:02
912
原创 苍穹外卖day11销量TOP10商品展示,前端有商品名字但无销量(已解决)
od.number字段别名sale和DTO属性名number不一致,导致MyBatis无法正确将销量封装到DTO中。我怀疑可能是销量没有封装到GoodsSalesDTO中才导致前端不显示商品销量。表字段别名必须和待封装对象的属性名保持一致,MyBatis才能够正确封装!在开发销量TOP10商品展示这一功能时,前端有商品名字但无销量。我初步怀疑是mapper层存在bug,我的。
2026-01-16 21:44:44
723
原创 苍穹外卖day9前端订单分页查询后订单菜品不展示(已解决)
可以发现,前端已经规定好data-records的订单菜品属性名为orderDishes,而我由于追求命名准确性,将OrderVO的属性。而这样会导致前端无法从OrderVO中解析出orderDishes属性的值,从而导致前端订单菜品没有展示出来。
2026-01-15 00:29:57
291
原创 如果一个OrderService需要调用到根据地址ID查询地址的功能,那么应该调用AddressService还是AddressMapper?
在一个正经的微服务架构或单体架构里,OrderService应该调用AddressService,而不是 AddressMapper。如果 Order 直接查 Mapper,这些逻辑要么重复洗的,要么被绕过,无形之中已经把Address的业务逻辑拷贝到Order里了。Service之间通过接口交互,绝不直接碰对方的Mapper,否则会导致系统强耦合。跨模块:Service → Service。同模块:Service → Mapper。
2026-01-13 18:23:37
331
原创 苍穹外卖day6微信登录报错500且openid=null(已解决)
可以发现,在if(user==null){…}内部,我忘记先new一个User出来,导致user仍为数据库查出的结果也就是null,这时候调用setOpenid必然失败,因为不能给null对象赋值!经过仔细排查和Gemini的协助,发现UserServiceImpl中新用户自动完成注册部分的代码存在bug。修改后就返回200 OK了。
2026-01-10 02:44:04
1194
原创 MyBatisPlus(MP)
MyBatisPlus(简称MP)是基于MyBatis框架开发的增强型工具,旨在简化开发、提高效率。官网:https://baomidou.com或https://mybatis.plus特性无侵入:只做增强不做修改,不会对原有工程产生影响。损耗小:启动即会自动注入基本CRUD,性能基本无损耗,直接面向对象操作。强大的CRUD操作:内置通用Mapper和通用Service,只需少量手动配置即可实现单表大部分CRUD操作。支持Lambda:编写查询条件时,无需担心字段写错。支持主键自动生成。
2026-01-02 01:40:16
777
原创 SpringBoot3.5.9集成MyBatisPlus报错(已解决)
报错原因:MyBatisPlus版本过低,需更换依赖坐标artifactId和version。
2026-01-01 00:26:09
376
原创 Maven
聚合:将多个模块组织成一个整体,同时进行项目构建的过程。聚合工程:通常是一个不具有业务功能,有且只有一个pom.xml的“空”工程。作用使用聚合工程可以将多个模块编组,通过构建聚合工程实现对其包含的模块的同步构建。当聚合工程中某个模块发生变化时,使用聚合工程可以保证工程中与该变化模块相关联的模块的同步变化,从而解决批量模块同步构建的问题。继承描述的是两个工程间的关系,子工程可以继承父工程的配置信息,常用于依赖关系的继承。作用:简化配置,减少版本冲突。
2025-12-28 01:06:53
969
原创 SpringMVC
MVC(Model-View-Controller)是一种广泛使用的软件架构模式,用于组织应用程序的代码结构,使其更加模块化,增强软件系统的可维护性和可扩展性。MVC将应用程序分为3个主要组件:Model(模型)、View(视图)和Controller(控制器)。SpringMVC是一种基于Java实现MVC软件架构模型的轻量级Web框架(别名:表现层框架、接口层框架)。优点:使用简单,开发便捷,灵活性强。传参方式:url地址直接传参,地址参数名与形参名一致,在方法签名里定义形参即可接收参数。
2025-12-24 23:30:14
1026
原创 SSM整合
Service@Autowired@Override@Override@Override@Overridethrow new BuisnessException(Code.BUSINESS_ERR, "您输入的id不合法,请重新输入!");try {// 模拟异常throw new SystemException(Code.SYSTEM_TIMEOUT_ERR, "服务器访问超时,请重试!", e);@Override。
2025-12-24 16:31:33
617
原创 Spring
依赖注入。核心思想:在IoC容器中建立Bean与Bean之间的依赖关系。简单类型:基本数据类型+String–><value>引用类型–><ref>bean@Component是类级别注解,表示把这个类交给Spring容器管理。@Bean是方法级别注解,表示把这个方法返回的对象交给Spring容器管理。两者都能创建Spring容器中的Bean,但用途完全不同。:面向切面编程。是一种编程范式,指导开发者如何组织程序结构。作用:在不惊动原有设计的基础上为其进行功能增强(无侵入式编程。
2025-12-08 01:16:27
747
原创 12-动态代理
如果某个对象的职责过多,可以通过代理来转移部分职责。代理必须具备对象委托其代理的方法。比如对象有run()方法想委托给代理处理,那么代理也必须具备run()方法。Java中规定对象和代理都必须实现特定接口,以此保证这条原则的落实。StarProxyUtilWARNING]此处使用的Proxy类是这个包下的,注意不要错选成其他包下的。ProxyUtil.class.getClassLoader(),// 指定使用哪个类加载器去加载生成的代理类。
2025-11-21 23:34:47
304
原创 11-注解
注解(Annotation)是Java代码里的特殊标记,比如@Override@Test,它们的作用是让其他程序根据注解信息来决定如何执行该程序。注解可以用于类、接口、构造器、成员变量、方法、参数等位置处。public @interface 注解名 {public 属性类型 属性名() default 默认值;String a();Test1。
2025-11-20 22:36:00
756
原创 JavaSE专栏介绍
网站地址:https://zsh-cs.github.io/ComputerNotes/JavaSE/index.html项目地址:https://github.com/Zsh-cs/ComputerNotes。欢迎访问我撰写的JavaSE笔记!
2025-11-20 00:59:29
112
原创 10-反射
Class基本作用:获取一个类的所有成员并进行相关操作。可以破坏类的封装性。重要作用:适合做Java的框架,当代主流框架都会基于反射设计出一些通用功能。
2025-11-17 15:18:00
375
原创 7-特殊文件与日志技术
Caution]无法约束具体数据类型。比如程序员编写xml文档时写了很便宜,不会报错。编写DTD约束文档,后缀必须是.dtd。!!!!!在需要编写的xml文件中导入该DTD约束文档。然后此xml文件就必须按照DTD约束文档规定的格式进行编写,否则会报错。
2025-11-15 23:47:10
995
原创 8-多线程
格式synchronized(同步锁){// 访问共享资源的核心代码作用:将访问共享资源的核心代码块加锁,从而保证线程安全。原理:每次只允许一个线程加锁后进入,执行完毕后自动解锁,其它线程才可以再次加锁后进入。同步锁的注意事项:对于当前同时执行的线程来说,同步锁必须是同一把(同一个对象),否则会出bug。格式权限修饰符 synchronized 返回值类型 方法名(形参列表){// 访问共享资源的核心代码作用:将访问共享资源的核心方法加锁,从而保证线程安全。原理。
2025-11-10 17:09:44
577
原创 4-异常相关知识
/ 需求:保存一个合法的年龄try{}else{");//Todo: 用一个自定义异常对象来封装“输入年龄非法”这个问题,// 便于后续调试代码时快速定位问题并给出相应的解决方案throw new 自定义异常类("/age is illegal, your age is "+age);TIP]问题不是很严重,不想在程序员编码时打扰他们时使用。Tip]问题比较严重,想要强烈提醒程序员时使用。
2025-11-09 16:10:09
310
原创 Windows11最新补丁或存在巨大安全漏洞
Windows11于8月13日更新的补丁KB5063878于近日被指出或存在巨大安全漏洞,在向固态硬盘SSD连续写入超过50GB数据时可能导致SSD发生严重故障!
2025-08-18 21:21:20
599
原创 2-面向对象编程OOP
this是一个变量,用于在方法中拿到当前对象。哪个对象在其方法中调用thisthis就指向哪个对象。Java中提供了一个关键字extends,使用该关键字可以让一个类和另一个类建立起父子关系。Son类称为子类或派生类。特点:子类继承父类的非私有成员(成员变量和成员方法)。子类对象实际上是由父类和子类这两张设计图共同创建出来的。使用继承的优点:减少了重复代码的编写,提高了代码的复用性。多态是在继承(extends)/实现(implements)下的一种现象,表现为:对象多态、行为多态。一种特殊的局部内部类。
2025-03-16 21:26:26
866
原创 1-Java入门
目前较新版本的JDK在安装时会自动配置java和javac程序的路径到Path环境变量中去,因此它们可以直接使用。但老版本的JDK在安装时是不会自动配置Path环境变量的,我们要记得手动配置,配置完还必须在命令提示符输入。Java的产品叫作JDK(Java Development Kit:Java开发者工具包),必须安装JDK才能使用Java。在电脑下方搜索栏中搜索“高级系统设置”,打开后点击上方的“高级”选项,然后点击“环境变量”即可进行环境变量配置。
2025-03-16 21:08:22
979
原创 Laplace变换解微分方程的优势
求解常系数非齐次线性微分方程的柯西初值问题时,用常规解法极其繁琐且极易出错;而如果使用Laplace变换和逆变换来求解此类问题,则犹如砍瓜切菜,十分简单且清晰!拉普拉斯真是个天才!
2024-10-30 12:36:41
360
原创 MyBatis
MyBatis一、简介二、MyBatis入门案例:查询所有用户信息-selectAll0.项目整体结构1.导入mybatis.sql文件,初始化mybatis数据库CREATE DATABASE IF NOT EXISTS `mybatis` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin USE `mybatis`;/*Table structure for table `account` */DROP TABLE IF EXISTS `ac
2024-10-18 12:47:08
955
原创 零基础使用SpringBoot开发一个小项目
该文章是本人观看B站up主“程序员风筑”于2024-04-23发布的“一小时带你从0到1实现一个。:逻辑层,用于实现业务数据的逻辑处理,可以向。:接口层,用于跟外部做交互,对外提供项目入口。类:(项目设计应遵守的规范,方便统一处理)包,用来存放我们的核心代码;:持久层,用于将数据持久化,也就是向。可以简化持久层的开发,让我们专注于写。要数据(无需关心数据库是什么类型),包,用于存放我们的资源和配置文件。 持久层框架比如。提供经过逻辑处理后的数据。下面有两个包,一个是。 也可以向。
2024-09-29 16:22:40
1353
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅