mybatis-plus-version
MyBatis-Plus 乐观锁@Version 注解是 MyBatis-Plus 实现乐观锁的核心,它能帮你优雅地解决高并发下的数据更新冲突问题,比如商品超卖、余额扣减等,核心原理可以用一句话概括:基于“版本号”的冲突检测。 🤔 什么是乐观锁?乐观锁是一种并发控制策略,它假设并发操作发生冲突的概率较低,因此操作数据时不会加锁,而是在数据提交更新时进行冲突检测。若发现数据在此期间已被修改,则当前更新操作会失败。 🧠 核心原理:一个版本号的较量 读数据,记版本:当你查询一条记录时,MP会顺手查出它的版本号(version),比如版本号为 1。 提交时,验版本:在更新这条数据时,MP生成的SQL会自动加上一个条件:WHERE ... AND version = 1。 无冲突,加一版:如果这期间没人动过这条数据,数据库里的版本号仍然是 1,条件成立,更新成功。同时,MP会把版本号自增为 2。 有冲突,即失败:如果你查询后,别人抢先一步更新了数据,版本号就变成了 2。这时你再执行更新,SQL中的 version = 1...
mybatis-plus-xml
MyBatis-Plus XML 映射总体原则 能用 MP 自带方法或条件构造器解决的,就绝不写 XML;遇到 MP 无法高效完成的复杂 SQL(如多表联查、复杂嵌套、特殊函数等),才考虑手写 XML。 MyBatis-Plus 的核心目标就是让你少写甚至不写 SQL,但它并不排斥手写 SQL —— 反而鼓励你当工具不够用时,回归 MyBatis 的原生方式(即 XML 或注解)去实现。 ✅ 完全不需要写 XML 的情况(占日常开发的 80% 以上)1. 单表的普通增删改查 插入一条记录:insert(T entity) 根据 ID 删除:deleteById(Serializable id) 根据 ID 修改:updateById(T entity) 根据 ID 查询:selectById(Serializable id) 查询全部:selectList(null) 这些操作 MP 的 BaseMapper 已经完整提供,一行代码都不用写 XML。 2. 单表带条件的查询、更新、删除使用 LambdaQueryWrapper 或 LambdaUpdateWrapper...
mybatis-plus-wrapper
MyBatis-Plus Wrapper 构造器Wrapper 就是一个用于构造 SQL 语句中 WHERE 条件部分的 Java 工具类。它让你能够通过链式调用的方式,用 Java 代码拼写出各种复杂的查询、更新、删除条件,从而避免手写繁琐的 SQL 片段。Wrapper 家族主要有两个分支:QueryWrapper(用于查询)和 UpdateWrapper(用于更新),以及它们的 Lambda 版本。 1. Wrapper 继承体系(了解即可)text 123456Wrapper(顶级接口) └── AbstractWrapper(抽象类,实现了大部分条件方法) ├── QueryWrapper(用于查询、删除) ├── UpdateWrapper(用于更新,可以 set 字段) ├── LambdaQueryWrapper(Lambda 版 QueryWrapper) └── LambdaUpdateWrapper(Lambda 版...
mybatis-plus-base
MyBatis-Plus 基础MyBatis-Plus(简称 MP)可以说是 MyBatis 的“增强版”。它不是为了替代 MyBatis,而是在其基础上做了增强,让你能更轻松地操作数据库。简单来说,使用它之后,很多基础的增删改查(CRUD)工作你甚至可以不用写一行 SQL 代码,开发效率会大大提高。 💡 核心原理:只做增强,不改动MyBatisMP 的设计理念是在 MyBatis 的基础上“只做增强,不做改变”。这意味着你原有的 MyBatis 代码和功能完全不受影响,你只需要添加 MP 的依赖,就能在需要的地方使用它提供的强大功能,整个过程非常顺滑。 🚀 快速上手:3分钟跑通流程 引入依赖:创建一个 Spring Boot 工程,添加 MP 和数据库驱动依赖。注意! 要移除或注释掉原有的 mybatis 和 mybatis-spring 依赖,以避免版本冲突。 配置数据源:在 application.yml 或 application.properties 文件中,像配置普通 MyBatis 一样,配置数据库连接信息。 编写实体和Mapper:创建一个实体类(例如...
myql-base
MySQL 使用指南:从入门到实践登录 MySQL1mysql -u 用户名 -p 数据库操作1234567891011-- 显示所有数据库SHOW DATABASES;-- 创建数据库CREATE DATABASE mydb;-- 使用数据库USE mydb;-- 删除数据库DROP DATABASE mydb; 表操作12345678910111213141516-- 创建表CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 显示表结构DESCRIBE users;-- 修改表ALTER TABLE users ADD COLUMN age INT;-- 删除表DROP TABLE users; 插入数据123456789101112131415INSERT INTO...
dockerfile-learning
Dockerfile 完全指南:所有指令语法详解及实战示例一、Dockerfile 指令全集1. FROM语法:FROM [–platform=] [:] [AS ]说明:设置基础镜像,必须是第一条有效指令(ARG除外)示例: 12345FROM ubuntu:20.04# 多阶段构建时命名阶段FROM python:3.9 AS builder# 指定平台FROM --platform=linux/amd64 node:16 2. RUN语法: Shell格式:RUN Exec格式:RUN [“executable”, “param1”, “param2”]说明:执行命令并创建新的镜像层示例: 12345RUN apt-get update && apt-get install -y \ curl \ git \ && rm -rf /var/lib/apt/lists/*RUN ["/bin/bash", "-c", "echo hello"] 3....
docker-componse-learning
Docker Compose 语法与使用指南一、Docker Compose 简介Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml 配置文件,你可以声明应用程序的服务、网络和卷,然后使用一个命令启动并管理整个应用栈,极大提高了开发、测试和部署效率。 二、核心语法 配置文件结构123456789101112131415Docker Compose 的配置文件(docker-compose.yml)采用 YAML 格式,核心结构由 version、services、networks、volumes 四部分组成:version: '3' # 版本号,推荐使用3.x,兼容大多数场景services: # 定义服务(容器) web: image: nginx:latest # 镜像名称 ports: - "80:80" # 端口映射 volumes: -./html:/usr/share/nginx/html #...
look-flow
使用vnstat监控ubuntu流量1.安装123sudo apt install vnstatsudo vnstat -u -i wwan0 # 初始化监控(对蜂窝网卡)sudo systemctl restart vnstat 2.查看本月消耗1vnstat -m 3.输出格式 eth0 / monthly month rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Feb '25 23.77 GiB | 509.25 MiB | 24.27 GiB | 86.18 kbit/s Mar '25 674 KiB | 225 KiB | 899 KiB | 0.00 kbit/s Apr '25 178.43 GiB | 3.67 GiB | ...
ts-code
TypeScript 语法大全与示例基础类型1. 原始类型1234567891011let isDone: boolean = false;let count: number = 42;let name: string = "TypeScript";// 模板字符串let sentence: string = `Hello, my name is ${name}`;// 空值let unusable: void = undefined;let u: undefined = undefined;let n: null = null; 2. 数组12let list1: number[] = [1, 2, 3];let list2: Array<number> = [1, 2, 3]; // 泛型语法 3. 元组 (Tuple)123let tuple: [string, number];tuple = ["hello", 10]; // OK// tuple = [10,...
xposed
Android手机端滴滴抢单外挂示例(技术研究用途)以下是一个更接近真实场景的Android实现框架,展示外挂可能的核心模块(仅供学习安全防御技术,请勿用于非法用途)。 1. 基础框架(Android + Xposed)外挂通常以Xposed模块或Magisk模块的形式存在,通过Hook滴滴司机APP的关键函数实现自动化。示例代码(Xposed模块) 1234567891011121314151617181920212223242526272829303132// 模块入口:Hook滴滴APP的订单处理逻辑public class DiDiGrabber implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if...








