MyBatis核心功能
插件Interceptor这是一个 MyBatis 拦截器插件,核心功能是:把 MyBatis 日志中带 ? 占位符的 SQL,还原成参数回填后的完整可执行 SQL,并打印执行耗时。开发调试时非常实用。 实现这个接口之后,实现它的intercept方法,拦截sql,去处理 SQL 执行,记录耗时,打印完整 SQL。 核心注解 @Intercepts,放在类上面,拦截 MyBatis 的 Executor.query() 和 Executor.update() 两个方法,即所有查询和更新操作都会被拦截。 1234@Intercepts({ @Signature(type = Executor.class, method = "query", args = {...}), @Signature(type = Executor.class, method = "update", args = {...})}) 更多信息可以查看官方文档:https://mybatis.ne...
Logback日志框架
官方文档https://logback.qos.ch/manual/index.html 三大模块Logback 分为三个模块: 模块 说明 logback-core 其他两个模块的基础,提供核心功能 logback-classic log4j 的改良版本,完整实现了 SLF4J API logback-access 与 Servlet 容器集成,提供 HTTP 访问日志功能 核心架构Logback 建立在三个主要类之上:Logger、Appender 和 Layout。 123456789101112131415161718192021222324┌─────────────────────────────────────────────────────┐│ 应用程序 ││ (使用 SLF4J API 记录日志) │└─────────────────────┬─────────────────────────────...
OkHttp3网络请求与连接管理
官网中文官网:http://okhttp.foofun.cn/英文官网:https://github.com/lysine-dev/okhttp OkHttp3特点 特性 说明 连接池复用 避免频繁 TCP 握手,高并发下性能优异 HTTP/2 支持 多路复用,单连接承载多个请求 超时控制精细 连接超时、读取超时、写入超时可独立配置 拦截器机制 统一处理日志、重试、加解密等横切逻辑 Dispatcher 控制并发请求数,防止资源耗尽 核心概念一次请求的完整链路1OkHttpClient → Request → Call → (拦截器链) → Response OkHttpClient:客户端工厂,管理连接池、超时、拦截器等全局配置(应全局单例) Request:描述一次 HTTP 请求(URL、Method、Header、Body) Call:Request 的可执行对象,.execute() 同步执行,.enqueue() 异步执行 Response:服务器返回的响应(状态码、Header、Body) 2.2 关键组件 组件 作...
JDK17新特性
概述 JDK 17 是继 JDK 8 之后最重要的 LTS 版本,支持至 2029 年。Spring 6.x / Spring Boot 3.x 最低要求 Java 17。 Records关键字 一个新的关键字,和class、enum一个级别。是不可变数据载体的终极方案,类似于Lombok功能。特别的是声明的时候就带有参数 解决的问题:传统 POJO/DTO/VO 需要编写私有字段、构造器、getter、equals()、hashCode()、toString() 等大量样板代码。 核心用法: 12345678// 一行代码定义一个不可变数据类public record Point(int x, int y) { }// 使用Point p = new Point(10, 20);System.out.println(p.x()); // 10(注意:是 x(),不是 getX())System.out.println(p); // Point[x=10, y=20]System.out.prin...
JDK17 新特性
Java Stream 集合转 MapCollectors.toMap 详解场景:将 List 列表转换为 Map<K, T> 映射表,常用于通过唯一键(ID/编号)实现 O(1) 级别的快速数据查找。语法: 123456789import java.util.function.Function;import java.util.stream.Collectors;Map<String, DigitSiteEquip> equipMap = allDigitSiteEquips.stream() .collect(Collectors.toMap( DigitSiteEquip::getThirdNum, // 参数1:Key 生成器(取什么做键) Function.identity(), // 参数2:Value 生成器(取什么做值,identity表示对象本身) (oldValue, newValue) -> oldValue // 参数3...
SQL分组查询
基本语法123SELECT column1, column2, ...FROM table_nameORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...; group by 意思就是通过什么分组,就是把某个字段A相同的值分成一个组。但是分组之后,变成了一行,字段A大家都一样,其他字段可能都不一样,零零散散的。这个时候,就需要用到聚合函数,将这些零散的数据算出一个结果。 1234567-- 没分组:查出所有明细SELECT score FROM exam; -- 返回 100行-- 分组后:每个学生只占一行SELECT student_id, AVG(score) FROM exam GROUP BY student_id; -- 返回 10行(10个学生) 执行顺序有关group by的sql执行顺序是:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT 需要注意的是: WHERE 在分组前执行,过滤的是原始行(里面可以用普通字段,不能用聚合函数)...
Mysql常见函数
count()COUNT(列名) 跳过 NULL,COUNT(*) 不跳过。 SUBSTRING_INDEX 语法:SUBSTRING_INDEX(字符串, 分隔符, 计数) 参数含义: 字符串:要处理的原始文本。 分隔符:用来切割的字符,比如 /、,、- 等。 计数(正负决定方向):正数,从左往右数,找到第 N 个分隔符,返回分隔符左边的全部内容;负数反过来 eg:SUBSTRING_INDEX(‘a/b/c/d/e’, ‘/‘, 2) 从左数第 2 个 /(在 b 后面),返回左边 ‘a/b’ 日期范围筛选(字符串比较)字符串日期可以不使用日期笔记,可以直接使用字符串:where str BETWEEN '20250504' AND '20260818' 原理:格式为 YYYYMMDD 固定长度,字符串字典序与时间顺序完全一致(年→月→日优先级从左到右)。 局限性:仅适用于**“大端序”**且长度固定的日期格式,如 YYYY-MM-DD 亦可;但 DD...
RabbitMQ消息队列
先记录一点工作中的使用,后面自己有时间补上基础至少核心概念 概念 说明 Producer(生产者) 发送消息的客户端应用程序 Consumer(消费者) 接收消息的客户端应用程序 Broker RabbitMQ 服务节点/服务实例 Connection(连接) 客户端与 Broker 之间的 TCP 连接 Channel(信道) TCP 连接上的虚拟连接,用于复用 TCP 连接、减少开销 Queue(队列) 存储消息的数据结构,消息的容器 Exchange(交换机) 消息分发中心,接收生产者消息并按规则路由到队列 Binding(绑定) 交换机和队列之间的虚拟连接,绑定中可包含 Routing Key Routing Key(路由键) 消息头的属性,决定交换机的转发路径 Virtual Host(虚拟主机) 逻辑隔离机制,类似 MySQL 的 database 工作流程:生产者 → 发送消息到 Exchange → Exchange 根据 Routing Key 和 Binding 规则 → 路由到对应 Queue → ...
Docker容器基础与常用命令
更新部署程序工作中用到的,后面在研究 12345678cd /opt/work/source/jwwdflow/jwwdflow# 更新代码git pull# 停止测试环境docker-compose -f docker-compose-test.yml down# 部署测试环境docker-compose -f docker-compose-test.yml up -d







