自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 java8 flatMap常见用法

在 Java 8 中,flatMap 是 Stream API 提供的一个非常强大的方法,它结合了映射(map)和扁平化(flatten)两个操作。flatMap 主要用于将流中的每个元素转换为另一个流,然后将这些流合并成一个单一的流。这使得你可以处理嵌套结构的数据,如列表的列表、集合的集合等。flatMap 的常见用法。2. 处理对象的嵌套属性。1. 将嵌套集合扁平化。

2025-07-29 16:44:41 194

原创 解决:could not be registered. A bean with that name has already been defined in file

Spring 在扫描组件时,发现两个类使用了相同的 Bean 名称(通常是默认生成的类名小写),导致冲突。这两个类都会被默认命名为 "userController",造成冲突。你尝试注册一个 Bean,但这个名字已经被其他 Bean 占用了。2. 重复引入了相同的 Bean(如配置类、组件)3. 自动扫描到了重复的 Bean(如多模块项目)1. 多个类名相同,位于不同包下。

2025-07-17 14:49:34 216

原创 mybatis-plus拦截插入和修改方法时自动计算多字段求和赋值统计total字段

在使用 MyBatis-Plus 开发项目时,如果你希望在 插入(insert)或更新(update)数据时,自动计算多个字段的求和,并赋值给某个 total 字段,可以借助 MyBatis-Plus 的自动填充功能 或使用 自定义拦截器(Interceptor) 来实现。如果你希望更灵活地处理字段名或字段数量,比如动态字段名、动态求和逻辑,可以使用 MyBatis 拦截器。方案二:使用 MyBatis 拦截器(Interceptor)方案一:使用 MyBatis-Plus 自动填充功能(推荐)

2025-07-14 11:15:58 275

原创 Java 根据分组key构建合并数据集

数据模型:Order.java。

2025-07-09 17:07:25 214

原创 截取字符串中连续数字最多的并返回

【代码】截取字符串中连续数字最多的并返回。

2025-06-23 16:08:39 129

原创 记录MySQL中功能强大的函数使用

FIND_IN_SET(str, strlist) 函数用于搜索一个字符串是否存在于一个以逗号分隔的字符串列表中,并返回其位置(从1开始)。如果未找到,则返回0;如果任一参数为 NULL,则结果也为 NULL。WITH ROLLUP 是用于与 GROUP BY 子句一起使用的一个修饰符,它提供了一种方法来创建汇总行。这对于生成小计和总计特别有用。假设有一个表 employees,其中有一列 skills 存储员工技能(以逗号分隔)。strlist: 由逗号分隔的字符串列表。str: 要查找的字符串。

2025-06-23 14:31:52 251

原创 String.format() 一个字符串格式化工具方法的使用

【代码】String.format() 一个字符串格式化工具方法的使用。

2025-06-20 16:20:43 264

原创 mybatis-plus一对多关联查询

可以集成第三方插件如。

2025-06-20 14:12:20 534

原创 数据库查询出数据用Map<String,double>接收,报错java.lang.ClassCastException: java.math.BigDecimal cannot be cast to

在 Java 中,JDBC 查询结果中的数值类型(如 Oracle 的 NUMBER、MySQL 的 DECIMAL)默认会被映射为 BigDecimal,而不是 Double。MyBatis 会自动处理 BigDecimal → Double 的转换。方法二:从 ResultSet 中获取时就做转换(适用于自定义 DAO)方法三:使用 MyBatis / MyBatis-Plus 自动映射。方法一:使用 .doubleValue() 显式转换。

2025-06-12 10:55:24 327

原创 EasyExcel导出多Sheet多出一列this$0

在使用 EasyExcel 导出数据时,如果发现导出的 Excel 文件中多出了一个名为 this$0 的列,这通常是由于 Lambda 表达式导致的。具体来说,当你在一个类的方法内部使用了 Lambda 表达式,并且该 Lambda 表达式引用了外部类的实例变量或方法时,Java 编译器会在生成的字节码中添加一个指向外部实例的隐式引用(即 this$0)。如果确实存在这样的字段(如 this$0),你可以使用 EasyExcel 提供的 @ExcelIgnore 注解来忽略这些字段。

2025-05-12 15:49:31 338

原创 MyBatis-Plus使用 wrapper.apply() 添加自定义 SQL 片段

在 MyBatis-Plus 中,wrapper.apply() 方法允许你在构建查询条件时插入任意的 SQL 片段。在这个例子中,我们不仅检查了用户的年龄是否大于20岁以及邮箱是否非空,还添加了一个额外的条件来筛选邮箱包含特定域名的用户。如果有多个参数,可以依次使用 {1}, {2} 等。在这个例子中,apply 方法被用来添加一个子查询来计算平均年龄,并选择所有年龄大于平均年龄的用户。apply 方法可以与其他条件一起使用,比如 eq, gt, lt 等,以构建更复杂的查询逻辑。示例 1: 基本应用。

2025-05-12 13:24:40 627

原创 sql serve 多表联合查询,根据一个表字段值动态改变查询条件

当查询条件更加复杂,或者需要根据不同情况构建完全不同的SQL语句时,可以考虑使用动态SQL。假设你有两张表:Orders(订单表)和 Customers(客户表),你想根据Customers表中的某个字段(例如CustomerType)来决定对Orders表应用不同的过滤条件。在SQL Server中进行多表联合查询时,如果需要根据一个表的字段值动态改变查询条件,可以采用几种不同的方法来实现这一需求。在这个例子中,我们根据CustomerType的不同,对Orders表设置了不同的查询条件。

2025-05-08 10:30:53 471

原创 hashMap一些不太常用但非常有用的方法及使用示例

HashMap 提供了多种方法来操作键值对,除了常用的 put()、get() 和 remove() 方法之外,还有一些不太常用但非常有用的方法。如果指定的键尚未与某个值关联或关联的值为 null,则将该键与给定的值关联;否则,使用给定的重映射函数重新计算该键的新值。此方法允许你基于现有值(如果存在)或计算新值,并将其放入映射中。当指定键没有对应值时,使用提供的映射函数计算其值并放入映射中。只有在键对应的值非空时,才应用给定的重映射函数计算新值。

2025-05-07 17:13:09 280

原创 java 使用Caffeine实现本地缓存

Caffeine 是一个高性能的本地缓存库,广泛用于 Java 应用程序中。它支持多种缓存淘汰策略(如基于容量、时间、引用等),并且性能优于 Guava Cache,因此成为许多开发者的首选。Caffeine 支持在缓存未命中时自动加载数据。Caffeine 提供了丰富的统计功能,可以帮助你监控缓存的命中率、加载时间等。以下是一个完整的示例,展示如何使用 Caffeine 创建和使用本地缓存。Caffeine 支持异步加载缓存,适合耗时的数据加载场景。(2) 使用加载函数。(3) 异步加载缓存。

2025-04-21 15:32:26 353

原创 union all几个常见问题及其解决方案

与 UNION 不同,UNION ALL 不会去除重复的记录,它简单地将一个查询的结果附加到另一个查询的结果之后。当你希望在 UNION ALL 的结果上进行排序时,必须将整个 UNION ALL 放在一个子查询或派生表中,并在外层应用 ORDER BY 子句。这里,users 表的 id 和 profiles 表的 age 可能数据类型不同(例如一个是整数,另一个是字符串),这会导致错误或意外的行为。问题描述: 即使列的数量相同,但如果列的顺序不一致,也会导致数据错位的问题。5. 忽略了排序需求。

2025-04-15 13:19:39 801

原创 保证集合中的元素按自然顺序排列

在 Java 中,如果你想保证集合中的元素按自然顺序排列(比如数字从小到大,字符串按字母顺序),可以使用 TreeSet 或 PriorityQueue 等集合类。它也是一个按自然顺序排列的集合,但它是基于堆结构实现的,适合用来处理动态排序问题。如果集合中存储的是你自己定义的对象(比如 Person 类),你需要让这个类实现 Comparable 接口,并定义自然排序规则。TreeSet 是一个有序集合,默认会按照元素的自然顺序进行排序。如果你存储的是字符串,TreeSet 也会按照字母顺序排列。

2025-03-26 11:14:53 203

原创 easyExcel2.2.10中为0数据显示为空

在 EasyExcel 2.2.10 中,如果希望将数值为0的数据在 Excel 中显示为空(即不显示0。

2025-03-24 14:09:33 587

原创 LinkedHashMap的常用功能

LinkedHashMap 是 Java 集合框架中的一员,继承自 HashMap 类,并且实现了 Map 接口。与 HashMap 不同的是,LinkedHashMap 保留了元素插入的顺序(插入顺序),或者根据最近最少使用(access order)的顺序来排序元素。在这个示例中,我们首先展示了一个普通的 LinkedHashMap 如何保持插入顺序。然后,我们创建了一个作为 LRU 缓存使用的 LinkedHashMap,并通过重写 removeEldestEntry 方法设置了最大容量。

2025-03-24 09:50:47 300

原创 springboot EasyExcel 实现导入导出

创建类实现@Component// 标题样式// 加粗// 字体大小// 水平居中// 背景色// 内容样式// 垂直居中// 细边框@Override// 拿到poi的workbook// 当前事件会在 数据设置到poi的cell里面才会回调// 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not trueif (cell!= null) {

2025-03-13 13:13:55 491

原创 MapDB支持持久化和事务的本地缓存的java库

MapDB 是一个功能强大的 Java 库,它提供了类似标准 Java 集合(如 Map, Set)的接口,但增加了持久化和事务支持。以下是一个简单的示例,展示了如何使用 MapDB 创建一个内存中的 HashMap,并演示了基本的读写操作。首先,在你的项目中添加 MapDB 的依赖。如果你想将数据持久化到文件而不是仅保存在内存中,可以稍微修改上述代码来使用文件存储。

2025-03-07 15:49:47 283

原创 springboot多数据源事务管理

JTA适用于需要强一致性的分布式事务场景。适用于简单的多数据源事务管理。手动管理事务提供了最大的灵活性,但代码复杂度较高。Spring 的注解是最简单的方式,但需要确保事务管理器配置正确。

2025-02-14 16:45:34 625

原创 springboot mybatis-plus 集成多数据源

这个示例将展示如何配置两个数据源,并确保每个数据源都有自己对应的 SqlSessionFactory 和事务管理器。创建两个配置类来分别配置主数据源和次数据源及其相关的 SqlSessionFactory 和事务管理器。确保为每个数据源定义的 Mapper 接口位于正确的包下,并继承 BaseMapper。:MyBatis-Plus 的功能(如默认方法)依赖其自定义的。:将不同数据源的Mapper接口分别放在不同的包中(如。确保每个数据源的Mapper绑定到正确的工厂。检查Mapper接口的包路径是否在。

2025-02-14 16:03:59 557

原创 [SQL Server]从数据类型 varchar 转换为 numeric 时出错

首先确认是哪个 SQL 语句触发了错误。检查错误日志或应用代码,定位具体的 SQL 语句。前端输入校验(如限制只能输入数字和小数点)。:执行此操作前需确保所有数据均可转换为。函数快速定位无法转换为数值的。后端插入/更新前检查数据合法性。若无法修复,可将无效数据置为。或计算中避免隐式转换。)或插入数据时的类型不匹配。此查询会列出所有无法转换为。在转换时使用安全函数(如。空白字符或特殊符号(如。格式错误(如多小数点。

2025-02-11 09:43:58 1488

原创 java 字符串日期字段格式化前端显示

在 Java 应用程序中,如果你有一个字符串类型的日期字段,并希望将其格式化后显示在前端,可以通过多种方式实现。这通常涉及到在后端将字符串转换为 Date 或 LocalDateTime 等对象,然后使用适当的注解或配置来确保它们以正确的格式序列化为 JSON 发送到前端。如果你使用的是 Jackson 来处理 JSON 序列化和反序列化,可以在实体类的日期字段上添加 @JsonFormat 注解,以便控制日期格式。你可以创建一个自定义的 getter 方法来格式化字符串日期,而不改变原来的字符串字段。

2025-01-26 15:07:58 1195

原创 解析日期字符串时,解析器遇到的问题

错误信息 Text '2025-01-23 10:44:06.0' could not be parsed at index 10 表明在尝试解析日期字符串时,解析器遇到了问题。为了正确解析 '2025-01-23 10:44:06.0' 这样的日期字符串,你需要确保使用的日期格式模式准确地反映了字符串的格式。这个问题通常是因为提供的日期格式模式与实际的日期字符串格式不匹配导致的。例如,如果使用了不包含时间部分的模式来解析一个带有时间部分的字符串,就会发生这种情况。

2025-01-23 11:43:17 3106

原创 QueryWrapper 格式化日期字段查询

在使用 MyBatis-Plus 的 QueryWrapper 时,如果你需要对日期字段进行格式化或基于日期的条件查询(如忽略时间部分),你可以结合 SQL 函数和 QueryWrapper 提供的方法来实现。虽然这不是直接格式化查询的一部分,但如果你希望在实体类级别处理日期格式,可以考虑使用 @TableField 注解,并结合 Java 的 LocalDate 或 LocalDateTime 类型。然后,在你的服务层或控制器中,你可以将日期对象传递给 QueryWrapper,它会自动处理日期格式。

2025-01-23 09:49:21 1236

原创 mybatis 返回结果Map类型时保证字段顺序

MyBatis 还允许你通过实现 ResultHandler 接口来自定义结果处理逻辑。在这个处理器中,你可以控制如何存储每一行数据,并且可以选择使用 LinkedHashMap 来保持字段顺序。@Override// 确保每行数据都存储在一个 LinkedHashMap 中try {// 处理 orderedResults...如果不想使用 Map 作为返回类型,而是希望保持字段顺序并且有固定的结果结构,那么最好的方法是定义一个 resultMap 并指定字段顺序。

2025-01-02 10:02:44 555

原创 mybatis 使用@Insert插入操作后返回自增id

在 MyBatis 中使用 @Insert 注解进行插入操作并返回自增 ID,可以通过结合 @Options 注解来实现。@Options 注解允许你指定是否使用生成的键(useGeneratedKeys=true)以及将生成的键设置到实体对象的哪个属性上(keyProperty)。下面是具体的步骤和示例代码。

2024-12-31 16:01:49 1015

原创 reason: no instance(s) of type variable(s) U exist so that KsMxVo conforms to Comparable<? super U>

你遇到的错误信息 no instance(s) of type variable(s) U exist so that KsMxVo conforms to Comparable<?super U> 表明 Java 编译器无法推断出一个合适的类型参数,使得 KsMxVo 类型符合 Comparable<?super U> 的要求。这个错误通常发生在尝试对泛型集合或对象进行排序时,编译器需要确保所有元素实现了 Comparable 接口,并且可以相互比较。

2024-12-23 15:27:18 875

原创 MySQL死锁查看及解决

【代码】MySQL死锁查看及解决。

2024-12-10 15:42:12 122

原创 java.lang.ArrayStoreException异常的正确解决方法

java.lang.ArrayStoreException 是一个运行时异常,当试图将错误类型的元素存储到类型安全的数组中时抛出。这个异常通常发生在使用泛型数组或通过反射操作数组时。

2024-12-06 11:41:24 426

原创 SQL server 计算同比和环比

同比是指与去年同期相比的增长率,而环比是指与上一期相比的增长率。以下是如何在 SQL Server 中计算同比和环比的示例。•CurrentYearSales:计算 2023 年每个月的总销售额。•LastYearSales:计算 2022 年每个月的总销售额。•MonthlySales:计算 2023 年每个月的总销售额。假设我们希望计算 2023 年 10 月和 11 月的销售额同比增长率。•使用 LAG 函数获取上一个月的销售额。假设我们希望计算 2023 年每个月的销售额环比增长率。

2024-11-26 14:06:23 843

原创 SQL server 中 CROSS APPLY的使用

CROSS APPLY 类似于 INNER JOIN,但它允许你在一个查询中多次引用外部表的行,并且可以动态地生成结果集。CROSS APPLY 和 OUTER APPLY 是 SQL Server 中非常强大的操作符,特别适用于需要对每个外部行进行复杂处理或动态生成结果集的场景。1. 多行结果:当子查询或表表达式返回多行结果时,CROSS APPLY 可以将这些结果与外部表的每一行进行组合。2. 表表达式:CROSS APPLY 后面的子查询是一个表表达式,它为每个员工返回最新的订单。

2024-11-04 17:16:21 1186 2

原创 SQL server 列转行

在 SQL Server 中,将列转换为行的操作通常被称为“透视”(Pivot)的逆操作,即“反透视”(Unpivot)。2. Value FOR Attribute IN (Name, Age, Salary, Department):这部分指定了哪些列将被转换为行,并且指定了新的列名 Attribute 和 Value。•性能:对于大数据量的表,UNPIVOT 操作可能会有一定的性能影响,需要根据实际情况进行优化。•数据类型:确保所有被转换的列具有兼容的数据类型。示例:包含不同类型数据的转换。

2024-11-04 16:47:33 609 2

原创 SQL Server 中,将单行数据转换为多行数据

如果你使用的是 SQL Server 2016 或更高版本,推荐使用 STRING_SPLIT 函数,因为它简单且易于维护。对于早期版本,可以使用自定义函数或临时表/表变量来实现相同的功能。如果你使用的是早期版本的 SQL Server(如 SQL Server 2008 或更早),可以使用自定义函数来实现拆分。假设你有一个表 T,其中有一列 Values 包含逗号分隔的字符串,你想要将这些字符串拆分成多行。如果你有一组固定的字符串需要拆分,可以使用临时表或表变量来实现。3. 使用临时表或表变量。

2024-10-25 14:00:10 2588

原创 sqlserver 中charindex、patindex、like 的比较

在 SQL Server 中,CHARINDEX、PATINDEX 和 LIKE 都是用于字符串匹配和搜索的函数或操作符,但它们各自有不同的用途和特点。•功能:PATINDEX 函数用于返回一个模式在另一个字符串中的起始位置。•返回值:如果找到子字符串,则返回其在主字符串中的起始位置(从 1 开始计数);•LIKE 在处理复杂的模式匹配时更灵活,但在某些情况下可能会导致性能问题,特别是在没有合适索引的情况下。•功能:CHARINDEX 函数用于返回一个子字符串在另一个字符串中的起始位置。

2024-10-16 14:53:05 948

原创 springboot项目重新发布时初始化一些操作(清空指定表数据)

方法三:使用 Flyway 或 Liquibase 进行数据库迁移如果你使用 Flyway 或 Liquibase 进行数据库版本控制和迁移,可以在迁移脚本中包含清空表数据的 SQL 语句。在 src/main/resources/db/changelog 目录下创建一个新的变更日志文件(例如 changelog-2.xml),并在其中编写清空表数据的变更集。方法二:使用 @PostConstruct 注解你也可以使用 @PostConstruct 注解,在 Bean 初始化后执行清空表数据的操作。

2024-10-15 10:33:09 620

原创 SQL server sum(isnull(sl, 0)) 返回null问题

在这个示例中,由于 WHERE 子句 id > 2 没有匹配到任何行,SUM(ISNULL(sl, 0)) 会返回 NULL。通过使用 ISNULL(SUM(ISNULL(sl, 0)), 0),我们可以确保即使没有匹配到任何行,结果也会是 0 而不是 NULL。在 SQL Server 中,SUM(ISNULL(sl, 0)) 返回 NULL 的情况通常是因为查询没有返回任何行。即使 ISNULL 函数将 NULL 值替换为 0,如果没有任何行满足查询条件,SUM 函数仍然会返回 NULL。

2024-10-12 16:25:40 612

原创 Spring Boot与模板方法模式:实现统一的日志处理流程

在Spring Boot应用程序中,使用模板方法模式来实现统一的日志处理流程是一种有效的方法。通过这种方式,你可以使用模板方法模式来定义一个统一的日志处理流程,同时允许不同的日志处理器实现特定的日志格式化逻辑。在Spring Boot中实现日志处理的模板方法模式1. 定义抽象的日志处理器首先,创建一个抽象类,该类将定义日志处理的模板方法以及一些具体的日志处理步骤。3. 使用Spring依赖注入来选择合适的日志处理器你可以在服务层或者控制器中通过Spring的依赖注入来选择并使用具体的日志处理器。

2024-09-29 11:31:27 832 2

原创 Spring Boot与观察者模式实现数据同步更新机制

•Subject(被观察者):维护了一个观察者列表,并提供了添加、删除以及通知观察者的接口。•ConcreteObserver(具体的观察者):实现了更新接口,以保持其状态与被观察者的状态一致。在Spring Boot中实现观察者模式这里有一个简单的例子来展示如何在Spring Boot中使用观察者模式实现数据同步更新机制。5. 使用Spring的依赖注入来注册观察者你可以在配置类或主应用类中通过@Autowired将所有的观察者注册到被观察者中。4. 创建具体的被观察者。观察者模式的基本概念。

2024-09-29 11:11:06 1076

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除