- 博客(34)
- 收藏
- 关注
原创 基于Java POI与自定义注解的Excel与实体类映射方案
本文提出一种基于自定义注解的Excel数据映射解决方案,通过@ExcelColumn注解实现Java对象与Excel表格的自动映射。该方案包含核心设计:1)定义@ExcelColumn注解,支持列索引、必填校验和默认值设置;2)提供反射缓存优化类ExcelFieldCache,避免重复反射操作提升性能;3)开发ExcelAnnotationUtil工具类,实现单行和批量数据映射功能。该方案有效解决了传统POI操作中代码冗余问题,提升开发效率和系统性能。
2025-11-20 09:54:19
474
原创 Java 17 环境下 EasyPoi 反射访问异常分析与解决方案(ExcelImportUtil.importExcelMore)
摘要:在 Java 17 环境中使用 EasyPoi 进行 Excel 导入时,由于 Java 模块系统的严格封装性,导致反射访问 LinkedHashMap.accessOrder 字段时抛出 InaccessibleObjectException。主要原因是 java.base 模块未对未命名模块开放 java.util 包的反射权限。解决方案包括:1) 添加 JVM 参数 --add-opens 开放相关模块权限;2) 改用原生 Apache POI 实现(示例代码展示了基于 XSSFWorkbook
2025-10-23 09:48:49
394
原创 Bug记录:Spring Boot 3.x 启动失败(org.springframework.beans.factory.BeanCreationException)
摘要:项目从旧框架迁移到Spring Boot 3.2.9时,启动抛出BeanCreationException,根本原因是Hibernate Validator 6.x与Spring Boot 3.x的包名不兼容(javax.* vs jakarta.*)。解决方案包括移除冲突依赖或升级Hibernate Validator至8.0.1.Final等兼容版本。该问题反映了Java EE到Jakarta EE的包名变更带来的兼容性问题。(149字)
2025-10-13 10:23:49
464
原创 Bug记录:Spring Boot 3.x 与 MyBatis-Plus 版本兼容性问题排查与解决(Invalid value type for attribute ‘factoryBeanObje)
摘要:项目在将Spring Boot从2.5.7升级到3.2.9并集成MyBatis-Plus时出现启动报错,原因是版本不兼容。Spring Boot 3.x改用Jakarta EE API,导致与旧版MyBatis-Plus的javax包冲突。解决方案是改用专门支持Spring Boot3的mybatis-plus-spring-boot3-starter依赖,该版本已适配Jakarta API。官方文档提供了不同Spring Boot版本对应的MyBatis-Plus Starter推荐组合。
2025-10-10 10:13:27
607
原创 Java读取Office Excel嵌入图片Bug处理:解决重复图片与跨平台兼容性问题
Java读取Excel图片技术详解:悬浮式与嵌入式图片的三种实现方案(支持WPS嵌入和Office Excel嵌入)
2025-10-02 00:15:00
398
原创 Java读取Excel图片技术详解:悬浮式与嵌入式图片的三种实现方案(支持WPS嵌入和Office Excel嵌入)
摘要 本文介绍了三种从Excel文件中提取图片的技术方案,分别针对悬浮式、WPS嵌入式及Office嵌入式图片。通过基于POI的Java实现,系统提供了三个独立接口处理不同类型的Excel图片。核心类包括ExcelController(接口层)、ExcelService(抽象基类)及其三个具体实现类,支持读取单元格数据并保存图片到本地。系统采用临时文件处理机制,支持.xlsx格式、文件大小限制(55MB),并将图片按行列信息命名后存储至指定目录。该方案为企业级应用中处理Excel图文混合数据提供了完整的解决
2025-09-26 17:26:18
1604
原创 Bug记录:Lombok @Builder 注解的两大陷阱及解决方案
Lombok的@Builder注解存在两个隐蔽陷阱:1)与@Data同时使用时会导致无参构造函数消失,需显式添加@NoArgsConstructor和@AllArgsConstructor;2)字段默认值在Builder模式下会失效,需使用@Builder.Default注解标记。这些问题源于@Builder的生成机制会覆盖默认构造逻辑和初始化行为,通过组合特定注解可解决。开发者需注意这些潜在问题以确保对象构建的正确性。
2025-09-11 14:16:20
1545
原创 使用MapStruct简化Java对象映射
MapStruct是一款高效的Java对象映射工具,通过编译时生成代码替代运行时反射,显著提升性能。示例展示了User与UserVO之间的转换:忽略敏感字段、日期格式化、状态码转描述等。相比传统反射方式,MapStruct提供类型安全和更好的可维护性。配置简单,只需添加依赖并定义Mapper接口,即可实现对象转换,适合在Service层与Repository层间进行数据映射,优化业务逻辑处理。
2025-09-08 16:47:07
761
原创 Mybatis-Plus-Join 表连接插件集成
Mybatis-Plus-Join是基于Mybatis-Plus的扩展插件,提供了便捷的表连接查询功能,支持左/右/内连接操作。安装需添加1.4.5版本依赖,并配置Mapper、Service继承JoinBaseMapper和JoinIService。使用时可创建JoinLambdaWrapper添加表连接(leftJoin/rightJoin/innerJoin),设置查询条件后必须调用end()结束连接。支持多表级联查询,通过selectAs映射字段到VO对象,保持与Mybatis-Plus一致的使用风
2025-09-05 15:15:01
873
原创 设计模式-状态模式 Java
状态模式是一种通过对象内部状态改变其行为的设计模式。该模式将不同状态对应的行为封装到独立子类中,使状态转换更清晰。示例展示了一个风扇状态转换系统(关闭、低档、高档),每个状态类实现状态转换逻辑,上下文类维护当前状态。与策略模式不同,状态模式的状态转换由内部状态决定而非客户端控制。Spring State Machine是该模式的典型应用实现。
2025-09-01 17:35:51
991
原创 SpringBoot项目使用Liquibase 数据库版本管理
Liquibase是一个开源的数据库版本管理工具,支持多种数据库类型(MySQL、Oracle等)和变更日志格式(XML/JSON/SQL)。它通过master.xml文件组织变更集,实现数据库结构的版本控制、团队协作和文档生成。集成步骤包括添加依赖、创建目录结构、配置主文件和应用配置。使用时需注意初始化顺序问题,建议用CommandLineRunner替代@PostConstruct来确保Liquibase先执行。该工具特别适合需要多人协作开发和多环境部署的项目。
2025-08-28 16:45:11
1203
原创 使用EasyExcel根据模板导出文件
本文介绍了一个基于EasyExcel的企业级Excel导出工具类ExportUtil,实现了模板化数据导出功能。该工具类具有模板化导出、灵活数据填充、自动响应设置和异常处理等核心功能,通过预定义Excel模板生成结构化报表。核心代码解析展示了模板导出方法、文件下载处理和HTTP响应设置的实现细节,支持列表数据和离散对象数据的填充。使用示例演示了如何准备模板和调用导出方法,有效提升了开发效率和导出功能的稳定性。该工具类通过统一异常处理和编码优化,解决了中文文件名乱码等问题。
2025-08-25 14:15:07
1115
原创 SpringBoot整合Camunda工作流
概述工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成,BPMBPM(Business Process Management,业务流程管理),是一套系统的管理方法论和学科。它强调以“流程”为视角来设计、执行、管理和优化企业的各种业务活动,其最终目标是提高组织效率、增强敏捷性并实现战略目标。BPMN。
2025-08-21 17:10:11
1749
原创 MySQL深分页性能优化实战:大数据量情况下如何进行优化
当MySQL查询遇到LIMIT 10 OFFSET 1000000深分页问题时,数据库可能正在执行一个看似简单实则昂贵的操作——扫描并丢弃前100万行记录。本文将深入探讨深分页问题的本质,并提供多种高效解决方案。
2025-08-19 15:12:22
900
原创 设计模式-策略模式 Java
策略模式是一种行为型设计模式,它通过定义一系列可互换的算法,并将每个算法封装成独立类,使客户端能够根据需要动态切换算法。
2025-08-14 17:48:16
589
1
原创 设计模式-装饰模式 Java
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有对象动态添加新功能,同时又不改变其结构。这种模式创建了一个装饰类,用于包装原有的类,提供了比继承更有弹性的替代方案。核心思想:通过组合而非继承的方式,在运行时动态地扩展对象功能,遵循"开闭原则"(对扩展开放,对修改关闭。
2025-08-07 17:28:13
674
原创 Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞
在发送验证码到邮件中,接口调用时卡在生成验证码阶段,导致验证码功能完全不可用;经排查开发环境一切正常,测试环境会重现此问题;
2025-08-06 15:42:04
767
原创 设计模式-适配器模式 Java
适配器模式(Adapter Pattern)是一种常用的结构型设计模式,它通过转换接口解决不同组件之间的兼容性问题,让原本不兼容的接口能够协同工作。
2025-08-05 11:45:43
823
原创 Spring定时任务延时触发分析与解决:从单线程阻塞到多线程并发
在近期维护的项目中,发现两个设置在同一时间(每天00:10)执行的定时任务出现了意外行为通过日志排查发现,虽然两个任务配置了相同的触发时间,但任务B总是比任务A晚执行,且延迟时间恰好接近任务A的执行时长。这种看似"排队"的现象引发了我们的深入排查。
2025-07-31 09:38:50
862
原创 解决IDEA拉取GitLab项目报错:必须为访问令牌授予作用域[api, read user]
GitLab 项目(私有仓库)使用HTTP协议克隆仓库。
2025-07-29 09:45:55
1519
原创 设计模式-单例模式 Java
单例模式(Singleton Pattern)是设计模式中最基础但应用最广泛的创建型模式之一,确保一个类仅有一个实例,并提供一个全局访问点。这种模式在需要全局唯一对象的场景中至关重要,如配置管理、线程池、数据库连接池等。
2025-07-28 14:34:16
784
原创 设计模式-构建器模式 Java
构建器模式(Builder Pattern)属于创建型设计模式,核心思想是将一个复杂对象的构建过程与其表示方式分离。通过相同的构建过程可以创建不同的表示形式,特别适用于具有复杂内部结构的对象。
2025-07-25 14:14:49
760
原创 设计模式-抽象工厂模式 Java
抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它围绕一个超级工厂(抽象工厂)创建其他工厂,是工厂方法模式的升级版,能创建多个产品族中的对象。
2025-07-24 09:19:22
689
原创 设计模式-工厂方法模式 Java
工厂方法模式(Factory Method Pattern)又称为工厂模式,定义创建对象的接口,但将具体实现延迟到子类,实现对象创建与使用的解耦。
2025-07-21 11:32:04
796
原创 设计模式-简单工厂模式 Java
简单工厂模式(Simple Factory Pattern)通过一个工厂类根据传入的参数来动态的创建不同类型对象,将对象的实例化与客户端代码解耦。属于创建型模式,适用于产品类型有限且不频繁变化的场景。
2025-07-18 13:43:53
876
原创 使用STRAIGHT_JOIN优化MySQL查询性能:实战案例分析
排序时没有使用medical_records表的字段索引,所以我们强制使用medical_records表作为主表,就可以不创建临时表,走索引。
2025-07-14 09:26:53
714
原创 Spring AOP事务注解失效问题
原理:使用 AopContext.currentProxy() 获取当前类的代理对象,通过代理调用方法触发事务。通过 TransactionTemplate 手动控制事务边界,完全绕过注解机制。方案3:编程式事务管理(TransactionTemplate)方案2:通过AopContext获取代理。方案1:事务方法提取到独立服务类。
2025-07-11 09:38:51
694
原创 当 @Mapper 注解选错门:一个因导错包引发的“低级错误“全解析
开发者在使用MyBatis时,误将MapStruct的@Mapper注解用于接口定义,导致出现"Can't generate mapping method with primitive return type"错误。问题表现为返回基本类型的映射方法无法生成,经排查发现原因是导入了错误的Mapper注解包。解决方案很简单:将org.mapstruct.Mapper替换为org.apache.ibatis.annotations.Mapper。
2025-07-10 09:18:04
526
原创 MyBatis-Plus 中 SQL 注释引发的诡异解析异常:failed to concat orderBy from IPage
MyBatis-Plus分页报错异常排查:当控制台抛出"Encountered unexpected token: GROUP"错误时,问题根源往往不在排序设置,而是XML映射文件中的注释不当导致SQL语法结构被破坏。案例表明,若在SQL语句中间注释掉GROUP BY前的代码块,会导致分页拦截器拼接ORDER BY时语法解析失败。解决方案是彻底删除无用代码或调整注释位置,确保SQL语法完整。经验总结:警惕XML注释对SQL结构的影响,及时清理无用代码,理解分页拦截器工作机制。
2025-07-09 09:47:17
768
原创 Windows 本地安装启动 Redis
Github下载地址:https://github.com/microsoftarchive/redis/releases。如:Another Redis Desktop Manager。1.新开 CMD(可选)2.通过工具(可选)
2025-07-08 09:13:33
531
原创 Windows 本地安装启动 Nacos
修改 conf/application.properties,取消注释并配置 MySQL(替换账号密码)到/bin/startup.cmd脚本,然后配置单机模式:set MODE=“standalone”打开 cmd 进入 Nacos 的 bin 目录:startup.cmd。浏览器打开:http://localhost:8848/nacos。默认账号密码:nacos/nacos。
2025-07-07 09:57:11
644
原创 提示java: 警告: 源发行版 17 需要目标发行版 17
在 IntelliJ IDEA 中编译项目时提示警告:java: 警告: 源发行版 17 需要目标发行版 17问题现象:拉取公司的旧项目(基于 JDK 8)后,虽然在 IDEA 中已经将项目 SDK 和 Java Compiler 等配置都指定为 JDK 8,但上述警告仍然出现。核心问题:即使在 Java Compiler 设置中手动将编译版本修改为 8,一旦刷新 Maven,编译版本又会被自动重置回 17。
2025-07-03 13:49:40
1696
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅