- 博客(40)
- 收藏
- 关注
原创 MyBatis SQL执行流程与结果映射源码分析
初始化:解析配置文件,创建SqlSessionFactory和SqlSession代理调用:Mapper接口通过JDK动态代理转换为SqlSession操作SQL解析:动态SQL解析生成BoundSql对象参数绑定:ParameterHandler将Java参数转换为JDBC参数SQL执行:Executor调度StatementHandler执行SQL结果映射:ResultSetHandler将ResultSet转换为Java对象。
2025-10-15 15:59:59
563
原创 Python下载实战:高效获取网络资源
Python 以其简洁易读的语法和丰富的库,为下载任务提供了强大的支持。我们在实现这些下载功能时,采用了模块化的设计思想,将不同的下载任务封装成独立的函数,提高了代码的可维护性和复用性。并且在下载过程中,要考虑到下载的效率、稳定性以及错误处理等因素,使下载程序具备良好的扩展性和可维护性。通过这些 Python 下载实战技巧,我们可以灵活地应对各种下载需求,为后续的数据处理和分析提供有力的支持。在批量下载时,使用多线程技术可以显著提高下载效率,但也要注意线程数量的控制,避免过多线程导致系统资源耗尽。
2025-10-11 16:11:48
357
原创 RabbitMQ基础知识与Spring Boot 3.x集成案例
RabbitMQ在分布式系统中的核心价值与Spring Boot 3.x集成实践
2025-10-11 15:29:01
1241
原创 轻松扩展支付系统:工厂模式实战指南
摘要:该设计采用抽象工厂模式构建多支付系统,通过定义Payment接口和PaymentFactory接口分离支付方式创建与使用。具体实现包括Alipay和WechatPay等支付类及其对应工厂类,通过PaymentFactoryProducer统一管理工厂创建。系统扩展时只需新增支付实现类和工厂类,无需修改现有代码,符合开闭原则,有效降低模块耦合度,实现了支付系统的高扩展性。
2025-10-11 15:18:26
662
原创 MyBatis与MyBatis-Plus区别
本文对比了MyBatis和MyBatis-Plus两大持久层框架的核心差异与应用场景。MyBatis作为半自动化框架,需手动编写SQL,适合复杂SQL场景;而MyBatis-Plus在MyBatis基础上增强,提供通用CRUD、条件构造器、分页插件等功能,可显著提升开发效率。通过实例代码展示了二者在基础CRUD、条件查询、分页等操作上的实现差异。建议中小项目或单表操作为主的场景优先选用MyBatis-Plus,而需要高度自定义SQL或已有MyBatis项目则更适合原生MyBatis。
2025-09-19 23:59:14
900
原创 常见索引失效场景及原因分析(含示例)
当索引扫描的IO成本(如回表查询)高于全表扫描时,优化器会选择成本更低的全表扫描(如小表或高选择性索引)。:频繁UPDATE/DELETE会导致索引页分裂、空洞增多,降低索引扫描效率,优化器可能选择全表扫描。:函数/表达式会修改索引列的值,破坏B+树索引的有序性,导致数据库无法通过索引快速定位匹配行。:复合索引的B+树按前缀列排序,跳过左列会破坏索引的有序性定位能力,无法使用索引范围扫描。:计算操作会改变索引列的原始值,索引存储的有序结构无法匹配计算后的值,触发全表扫描。:B+树索引按前缀排序,
2025-09-14 22:43:19
292
原创 Java8特性
函数式接口是只包含一个抽象方法的接口,使用@FunctionalInterface注解标识。Lambda表达式是Java 8引入的重要特性,允许将函数作为参数传递,实现函数式编程。针对哈希冲突,Java 8引入红黑树结构,提高HashMap在冲突情况下的性能。Stream API提供了对集合数据的函数式操作,支持过滤、映射、聚合等操作。Optional类用于处理可能为null的值,避免空指针异常。方法引用提供了一种引用已有方法的简洁方式。包,提供了全新的日期时间处理API。
2025-09-02 22:01:05
424
原创 Redis 知识点与应用场景
Redis(Remote Dictionary Server)是一款开源的内存数据存储系统,支持多种数据结构,兼具高性能、持久化、分布式等特性,广泛用于缓存、数据库、消息中间件等场景。高性能:基于内存操作,单线程模型避免上下文切换开销,QPS 可达 10 万 +(取决于数据大小和命令复杂度);多数据结构支持:不仅支持基础的键值对,还提供 String、Hash、List 等丰富数据类型;持久化:通过 RDB 和 AOF 机制将内存数据持久化到磁盘,防止数据丢失;高可用。
2025-08-15 23:01:19
738
原创 Java线程池知识点
/ 自定义拒绝策略:记录日志+重试机制@Overrideif (!log.warn("任务被拒绝,尝试重试,当前队列大小:{}", executor.getQueue().size());// 5秒后重试提交任务// 使用自定义拒绝策略创建线程池customHandler // 应用自定义策略Java线程池是并发编程的核心组件,通过合理配置的核心参数(线程数、队列、拒绝策略等),可有效提升系统性能和稳定性。
2025-07-06 17:59:52
690
原创 Java锁机制知识点
在并发编程中,锁是用于控制多个线程对共享资源进行访问的机制。锁可以保证在同一时刻最多只有一个线程访问共享资源,从而保证数据的一致性。
2025-06-29 00:02:30
1105
原创 多线程知识点
线程是程序执行的最小单元,一个进程可以包含多个线程,这些线程共享进程的内存空间和资源。在Java应用中,线程可以并发执行任务,提高程序的运行效率。
2025-06-25 22:08:42
861
原创 Java红黑树知识点
红黑树作为一种高效的自平衡二叉查找树,通过颜色标记和旋转操作维护树的平衡性,保证了插入、删除和查找操作的时间复杂度均为O(log n)。它在众多领域中都有广泛的应用,特别是在需要高效查找、插入和删除操作的场景中表现出色。在Java中,TreeMap和TreeSet等集合类都基于红黑树实现,为开发者提供了方便、高效的数据存储和操作方式。理解红黑树的性质、操作和应用,对于掌握高级数据结构和算法设计具有重要意义。
2025-06-22 22:28:17
710
原创 SpringAI介绍及SpringBoot+SpringAI+DeepSeek实现案例
Spring AI是Spring官方社区项目,旨在简化Java AI应用程序开发,让Java开发者像使用Spring开发普通应用一样开发AI应用。它将人工智能能力无缝集成到Spring生态系统中,为Java开发者提供了一套工具和框架,使得在Spring应用程序中使用AI技术变得更加简单和高效。
2025-06-22 22:19:03
1336
原创 springBoot+mybatis-plus 使用AOP 简单实现一个操作日志demo,保存操作记录到数据库
5、OperateLog 类,对应数据库表,这里一般还会有ip地址等其他重要字段,我这里只是简单示范。6、OperateLogServiceImpl 文件。5、IOperateLogService 文件。4、随便写一个测试controller文件。7、mapper文件。
2023-09-21 10:38:57
764
原创 java 自定义注解
这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码,生命周期长度 SOURCE < CLASS < RUNTIME。@Target(ElementType.PACKAGE)——包,用于记录java文件的package信息。@Target(ElementType.ANNOTATION_TYPE)——注解。@Target(ElementType.TYPE)——接口、类、枚举、注解。@Target(ElementType.FIELD)——字段、枚举的常量。
2023-09-21 09:59:28
169
原创 vue3 使用 element-china-area-data 实现地区选择器
vue3 使用 element-china-area-data 实现地区选择器
2023-05-20 09:41:11
1931
原创 vue3 +element-ui 实现时间选择器并校验开始时间小于结束时间
vue3 +element-ui 实现时间选择器并校验开始时间小于结束时间
2023-03-30 15:27:09
2066
原创 vue3 项目配置对应后端api接口
import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import path from 'path'//以上三个都需要先下载好依赖// https://vitejs.dev/config/export default defineConfig({ //静态资源服务的文件夹 publicDir: "public", base: './', //静态资源处理 assetsInclude: .
2022-05-27 16:56:46
3240
原创 vue3 实现文件上传
vue3 实现文件上<template> <el-button type="primary" icon="CirclePlus" @click="upload(null)">上传文件</el-button> <el-dialog title="上传文件" :close-on-click-modal="false" v-model="uploadFile" width="500p
2022-03-26 22:06:59
14173
3
原创 Git创建分支及提交文件操作
一、创建本地分支1、创建 :git branch 分支名2、切换分支:git checkout 分支名二、提交文件1、git add 目录或文件2、git commit -m "备注"3、git push origin 分支名
2021-09-02 22:22:51
300
原创 Vue时间选择器清除日期后,并没有把日期变成null,而是保留上次所选日期,解决这个问题如下操作
this.$nextTick(() => {}回调获取更新的dom日期
2021-08-05 10:28:40
1218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅