- 博客(43)
- 收藏
- 关注
原创 SQL中replace用法
在 SQL 中,REPLACE INTO 语句的作用是先尝试插入一条新记录。如果插入的记录与表中已有的记录(根据主键或唯一索引进行匹配)有冲突,则会删除冲突的记录,并用新的记录替换掉它。换句话说,REPLACE INTO 可以防止重复插入相同的记录。它的作用类似于先删除再插入,从而确保每次插入的记录是唯一的。第二次:id = 3 的记录已经存在,它将被删除并用新插入的记录替换。第一次:id = 3 的记录不存在,直接插入新记录。
2025-12-03 10:56:24
334
原创 MyBatis使用自定义TypeHandler处理 JSON 数据
系统中可能会遇到复杂的属性以 JSON 格式存储在数据库中,取出时需要转换成 JSONObject 类型方便处理。在这种场景下,可以通过 MyBatis的JsonTypeHandler来处理当前业务的属性字段。我们将当前业务的属性以 JSON 字符串的形式存储在数据库中,并通过 JsonTypeHandler 实现将 JSON 字符串自动转换为 JSONObject 类型,从而在 Java 中方便使用。
2025-11-27 22:46:02
253
原创 IDEA如何进行远程Debug
远程调试是开发过程中常用的技术,尤其在分布式系统或微服务架构中。通常情况下,开发者会在本地环境中运行程序进行调试,但当应用部署在远程服务器上时,直接在本地调试变得不可行。此时,远程调试成为解决方案之一。
2025-11-02 16:42:54
456
原创 MyBatis-Plus使用动态表名分表查询
注意:版本须使用3.5.3以上,否则无法使用DynamicTableNameInnerInterceptor类中的setTableNameHandler方法。
2025-09-25 00:08:58
538
原创 接口幂等性与限流(二)
自定义RateLimit注解@Target({/*** 限制时间段,单位为秒/*** 在限制时间段内允许的最大请求次数/*** 限流的key,支持SpEL表达式/*** 提示信息*/ String message() default "操作太频繁,请稍后再试";@Target({/*** 限制时间段,单位为秒/*** 在限制时间段内允许的最大请求次数/*** 限流的key,支持SpEL表达式/*** 提示信息。
2025-09-24 23:47:49
508
原创 接口幂等性与限流(一)
/ 设置默认过期时间为 60 秒String message() default "重复请求";// 设置默认重复请求提示信息。
2025-09-23 22:29:04
392
原创 Spring Boot 集成第三方 API 时,常见的超时与重试机制设计
在日常的Spring Boot开发中,经常需要和第三方系统进行交互,比如支付接口、短信接口、地图接口等等。然而,第三方 API 并不是一直都稳定可用的。网络波动、服务异常、接口限流、超时未响应等情况非常常见。
2025-09-14 10:52:57
409
1
原创 SpringBoot项目动态切换数据源
*** 主库* 从库*/ SLAVE }@Component/*** Spring应用上下文环境*/@Override@Override/*** 获取对象* @return Object 一个以所给名字注册的bean的实例*//*** 获取类型为requiredType的对象* @return*//*** 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true*//**
2025-09-11 00:13:51
300
原创 SpringBoot 公共字段自动填充
在某些业务场景中,重复字段如create_time、update_time等频繁出现在每个实体类中。这种重复不仅增加了代码的冗余度,还导致了维护成本的上升。每次编写服务方法时,都需要手动设置这些字段,既费时又容易出错。特别是当字段变更时,需要在多个地方进行同步修改,增加了出错的风险。而且在更新操作中,若遗漏这些字段,可能会导致数据的不一致,给系统带来潜在的风险。本文将分享一套经过生产验证的自动化方案,涵盖MyBatis-Plus、AOP等核心策略,助你彻底摆脱公共字段维护的烦恼。
2025-09-07 22:39:10
325
原创 Spring Boot中策略模式结合依赖注入的实现方式
在Spring Boot项目开发中,常常会遇到根据不同的业务场景执行不同逻辑的需求,策略模式就是一种很好的设计模式来应对这种情况。同时,Spring Boot强大的依赖注入机制可以方便地将不同的策略类进行管理和调用。定义一个策略接口,所有具体的策略类都将实现这个接口:2. 实现具体的策略实现几个具体的策略类,例如处理订单和支付:也可以通过配置类的方式注入策略模式实现类,先注释其中的3. 创建策略工厂为了方便获取不同的策略,我们可以创建一个工厂类 BaseFactory,它将通过依赖注入管理策略的实
2025-09-07 00:13:52
476
原创 SpringBoot优化树形结构数据查询
在实际业务中,分类树(Category Tree)往往是内容管理、权限体系等系统的核心数据结构。随着业务规模不断扩张,原本毫无压力的树形查询,突然变成了系统性能的瓶颈。
2025-09-06 22:43:26
283
1
原创 SpringBoot集成Caffeine本地缓存
引入本地缓存机制,可以减少查询数据库的次数。选择了Caffeine作为缓存框架,易于与Spring集成。
2025-08-11 21:20:11
298
原创 SpringBoot使用JUnit5实现单元测试—Mockito 模拟
Mockito是一款开源测试库,简称 Mock , 该框架允许在自动化或单元测试中模拟对象。简单来说对于某些不容易构造或者不容易获取的比较复杂的数据/场景,模拟一个虚假的Mock对象来替代真实的对象。
2025-08-10 16:11:25
622
原创 如何线程池使用
matchIfMissing作用:指定如果配置项没有提供,是否认为条件成立。默认值是 false,表示必须存在该属性且满足 havingValue 才会加载 Bean。如果设置为 true,即使属性没有设置,也认为条件成立。prefix作用:指定属性名前缀。这个属性主要用于读取嵌套配置的属性,默认值是空字符串,表示直接使用name属性来查找配置项。如果使用 prefix,则属性名会变成 prefix.name。havingValue作用:指定配置属性值的期望值。name作用:指定需要检查的配置属性的名称。
2025-08-10 15:52:20
293
原创 Spring Boot实现敏感词过滤功能
要在Spring Boot中实现敏感词过滤功能,可以使用一些现有的Java库来处理敏感词过滤,例如,可以使用 Ansj 中文分词库或者使用一些其他开源的敏感词过滤库。以下是一个使用 Ansj 实现敏感词过滤的简单示例。
2025-08-06 23:41:46
403
原创 SpringBoot集成RestTemplate请求高德地图API
这里我使用到3种高德地图API:地理/逆地理编码,路线规划,路径规划2.0。其中路线规划使用到驾车路线规划。后续其他API会做相应地更新,各位小伙伴可以关注一下哦!!!
2024-08-27 23:35:59
1641
1
原创 JDK8新特性(一):Optional类
JDK8新增了Optional 类,它是一个没有子类的工具类。我们可以把它看作是一个容器。这个容器有两种情况:①要么有值 ②要么为null。
2024-07-20 18:52:36
606
原创 Springboot集成EasyExcel
Data@ExcelProperty("区域等级")@ExcelProperty("区域编码")@ExcelProperty("区域名称")方式一:只做数据接收如果只需处理数据使用该监听类@Getter/*** 缓存的数据列表*/@Override@Override方式二:调用保存方法如果需要保存到数据库使用该监听类@Data/*** 默认每隔3000条存储数据库*//*** 缓存的数据列表*//*** 数据导入类*/@Override。
2024-07-07 03:29:15
616
原创 Redis的两种序列化器
Jackson2JsonRedisSerializer 和 GenericJackson2JsonRedisSerializer。
2024-07-06 18:22:17
1617
2
原创 JDK8新特性(二):Stream流操作
Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream。
2024-06-05 00:59:25
1065
原创 @Autowired注入问题
PostConstruct:被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。原因:RedisTemplate被static所修饰,Spring依赖注入是依赖set方法,而set方法是普通的对象方法,static变量是类的属性,所以无法完成注入操作。一般来说就是没有被ioc容器进行管理,在容器中匹配不到类型,需要注解(@Service,@repository,@Component等)纳入spring IOC容器中。按byType自动注入。
2023-11-26 00:22:05
606
1
原创 @Accessors使用
开启链式编程 设置chain=true时,setter方法返回的是this(也就是对象自己),代替了默认的返回值void,直接链式操作对象。@Builder 会生成一个不完美的构建器,它不能区分哪些参数是必须的,哪些是可选的。这可能会导致构建对象时出现错误或不一致的情况。如果一个类有些参数必传,有些参数选传,可以将必传参数定义到构造方法上,非必传参数采用 @Accessor 方式链式设置。二、@Accessors(fluent = true)一、@Accessors(chain = true)
2023-09-08 10:41:24
480
1
原创 Swagger和Knife4j使用
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(它的主要作用是:使得前后端分离开发更加方便,有利于团队协作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。
2023-08-31 01:02:01
342
原创 Kafka安装、配置和使用
注意:Kafka安装文件中包含zookeeper打开,选择适合的版本进行下载。后缀 .tgz 格式文件兼容Windows系统,可以正常运行。
2023-08-30 00:00:29
380
1
原创 CentOS7更换阿里yum源
阿里云Linux-CentOS镜像仓库地址:http://mirrors.aliyun.com/centos/官方镜像下载地址:https://www.centos.org/download/mirrors/注意:操作之前先安装wget,否则第二步无法执行wget。4.安装epel-release。3.清理yum缓存,重建缓存。1.备份原有yum源。2.下载阿里yum源。5.查看yum源信息。
2023-05-11 02:19:33
886
原创 Linux(CentOS Stream 9)连接mysql数据库报错
没有libncurses.so.5,可能有libncurses.so不同版本的文件,使用命令。没有libtinfo.so.5,可能有libtinfo.so不同版本的文件,使用命令。查找,找到的是/usr/lib64/libncurses.so.6.2。查找,找到的是/usr/lib64/libtinfo.so.6.2。
2023-05-10 17:44:48
509
原创 Linux安装MySq警告:mysql-community-client-5.7.25-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5
此条警告信息是因为yum安装了旧版本的gpg keys造成的。解决方法:给后缀添加"–force --nodeps"即可。
2023-05-10 01:46:59
927
原创 linux -bash: ipconfig: command not found
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
2023-05-09 15:18:00
5410
原创 Linux安装步骤
进入到Linux系统里面, 发现光标无法移动到windows操作系统中了, 这个时候, 可以通过快捷键 “Ctrl+Alt” 切换光标到windows系统中。注意 : 在Linux系统中,在命令行中输入密码信息,为了保证安全性,密码是不显示的(看似没有输入,实际已经输入了);如果没有获取到linux系统的IP地址,就需要通过以下操作来修改网络初始化配置,并重新启动虚拟机。安装完毕后,点击窗口中的蓝色的 “重启” 按钮,重启Linux系统。服务器重启完成之后,可以通过linux的指令。
2023-05-09 14:37:42
613
原创 idea打开项目时右下角弹出“Lombok requires enabled annotation processing”的解决方法
Lombok requires enabled annotation processing:翻译过来就是Lombok 需要启用注释处理。文件 --> 设置 --> 构建、执行、部署 --> 编译器 --> 注解处理器。出现这个错误是因为使用了Lombok插件的原因,可能是安装时候没有配置好。然后勾选上启用注解处理即可。
2023-04-20 00:04:26
3774
1
原创 OGNL 表达式
(5)#{ } 底层使用的是PreparedStatement,${ } 底层使用的是 Statement。(4)#{ } 只能操作跟数据字表字段相关的列值,跟列值无关的只能用${ }使用时机:如果对表名、列表进行动态设置时使用。(1)相同:都可以获取对象的信息。
2023-04-17 00:13:56
1359
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅