当前位置: 首页 > news >正文

Mybatis高级(动态SQL)

目录

一、动态SQL

1.1 数据准备:

1.2 <if>标签

1.3<trim> 标签

1.4<where>标签

1.5<set>标签

1.6 <foreach>标签 

1.7<include>  标签


一、动态SQL

动态SQL是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的sql拼接

在注册用户的时候,可能会有这样⼀个问题,如下图所示:

修改个人信息时会有两种字段:必填字段和非必填字段,那如果在添加用户的时候有不确定的字段传入。这个时候就需要使用动态标签来判断了,比如添加的时候性别gender为非必填字段,具体实现如下:

1.1 数据准备:

UserInfo类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

user_info表:

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据
USE mybatis_test;-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS user_info;
CREATE TABLE `user_info`
(`id`          INT(11)      NOT NULL AUTO_INCREMENT,`username`    VARCHAR(127) NOT NULL,`password`    VARCHAR(127) NOT NULL,`age`         TINYINT(4)   NOT NULL,`gender`      TINYINT(4)  DEFAULT '0' COMMENT '1男2⼥0默认',`phone`       VARCHAR(15) DEFAULT NULL,`delete_flag` TINYINT(4)  DEFAULT 0 COMMENT '0正常, 1删除',`create_time` DATETIME    DEFAULT now(),`update_time` DATETIME    DEFAULT now(),PRIMARY KEY (`id`)
) ENGINE = INNODBDEFAULT CHARSET = utf8mb4;-- 添加用户信息
INSERT INTO mybatis_test.user_info(username, `password`, age, gender, phone)
VALUES ('admin', 'admin', 18, 1, '18612340001');
INSERT INTO mybatis_test.user_info(username, `password`, age, gender, phone)
VALUES ('zhangsan', 'zhangsan', 18, 1, '18612340002');
INSERT INTO mybatis_test.user_info(username, `password`, age, gender, phone)
VALUES ('lisi', 'lisi', 18, 1, '18612340003');
INSERT INTO mybatis_test.user_info(username, `password`, age, gender, phone)
VALUES ('wangwu', 'wangwu', 18, 1, '18612340004');

article_info表:

-- 创建⽂章表
DROP TABLE IF EXISTS article_info;CREATE TABLE articleinfo
(id          INT PRIMARY KEY auto_increment,title       VARCHAR(100) NOT NULL,content     TEXT         NOT NULL,uid         INT          NOT NULL,delete_flag TINYINT(4) DEFAULT 0 COMMENT 'O - 正常,1 - 删除',create_time DATETIME   DEFAULT now(),update_time DATETIME   DEFAULT now()
) DEFAULT charset 'utf8mb4';# 插入数据
INSERT INTO articleinfo ( title, content, uid ) VALUES ( 'Java', 'Java正⽂', 1 );
INSERT INTO article_info ( title, content, uid ) VALUES ( 'Python', 'Python正⽂', 2 );
INSERT INTO article_info ( title, content, uid ) VALUES ( 'MySQL', 'MySQL正⽂', 1);

 在数据库中查询数据:

user_info表:

article_info表:

1.2 <if> 标签

Mapper接口:

Integer insertUserByCondition(UserInfo userInfo);

Mapper.xml实现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/ /DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.book.mapper.UserInfoMapper"><insert id="insertUserByCondition">INSERT INTO user_info (username,`password`,age,<if test="gender != null">gender,</if>phone)VALUES (#{username},#{age},<if test="gender != null">#{gender},</if>#{phone})</insert></mapper>

测试:

1、设置gender不为空

 @Testvoid insertUserByCondition() {log.info("添加用户信息");UserInfo userInfo = new UserInfo();userInfo.setUsername("小王");userInfo.setPassword("123456");userInfo.setAge(18);userInfo.setGender(1);userInfo.setPhone("12345678901");userInfoMapper.insertUserByCondition(userInfo);log.info("添加成功!");}

测试结果:

2、设置gender为空

 @Testvoid insertUserByCondition() {log.info("添加用户信息");UserInfo userInfo = new UserInfo();userInfo.setUsername("小王");userInfo.setPassword("123456");userInfo.setAge(18);
//        userInfo.setGender(1);userInfo.setPhone("12345678901");userInfoMapper.insertUserByCondition(userInfo);log.info("添加成功!");}

测试结果:

1.3 <trim>标签

之前的插入用户功能,只是有一个gender字段可能是选填项,如果有多个字段,一般考虑使用标签结合标签,对多个字段都采取动态生成的方式。
标签中有如下属性

prefix表示整个语句块,以prefix的值作为前缀
suffix表示整个语句块,以suffix的值作为后缀
prefixOverrides表示整个语句块要去除掉的前缀
suffixOverrides表示整个语句块要去除掉的后缀


调整Mapper.xml的插入语句为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/ /DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.book.mapper.UserInfoMapper"><insert id="insertUserByCondition">INSERT INTO user_info<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">username,</if><if test="password !=null">`password`,</if><if test="age != null">age,</if><if test="gender != null">gender,</if><if test="phone != null">phone,</if></trim>VALUES<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">#{username},</if><if test="password !=null">#{password},</if><if test="age != null">#{age},</if><if test="gender != null">#{gender},</if><if test="phone != null">#{phone}</if></trim></insert></mapper>

测试: 

运行结果:

 

在以上sql动态解析时,会将第一个部分做如下处理:
·基于prefix配置,开始部分加上(
·基于suffix配置,结束部分加上)
·多个组织的语句都以,结尾,在最后拼接好的字符串还会以,结尾,会基于suffixOverrides配置去掉最后一个,

1.4<where>标签

当我们查询不同电脑时,系统会根据我们的筛选条件,动态组装where条件

实现:

 接口定义:

List<UserInfo> queryByCondition(Integer age, Integer gender, Integer deleteFlag);

Mapper.xml实现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/ /DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.book.mapper.UserInfoMapper"><select id="queryByCondition" resultType="com.example.book.model.UserInfo">select id, username, age, gender, phone, delete_flag, create_time,update_timefrom user_info<where><if test="age != null">and age = #{age}</if><if test="gender != null">and gender = #{gender}</if><if test="deleteFlag != null">and delete_flag = #{deleteFlag}</if></where></select></mapper>

测试:

测试结果:

只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或 OR  

1.5<set>标签

需求:根据传入的用户对象属性来更新用户数据,可以使用标签来指定动态内容.
接口定义:根据传入的用户id属性,修改其他不为null的属性

Mapper接口:

Integer updateUserByCondition(UserInfo userInfo);

Mapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/ /DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.book.mapper.UserInfoMapper"><update id="updateUserByCondition">update user_info<set><if test="username != null">username = #{username},</if><if test="age != null">age = #{age},</if><if test="deleteFlag != null">delete_flag = #{deleteFlag},</if></set>where id = #{id}</update></mapper>

<set>:动态的在SQL语句中插入set关键字,并会删掉额外的逗号.(用于update语句中)

测试:

  @Testvoid updateUserByCondition() {UserInfo userInfo = new UserInfo();userInfo.setId(12);userInfo.setUsername("小张");userInfo.setAge(22);userInfo.setDeleteFlag(1);userInfoMapper.updateUserByCondition(userInfo);}

测试结果:

1.6 <foreach>标签 

对集合进行遍历时可以使用该标签。标签有如下属性

collection定方法参数中的集合,如List,Set,Map或数组对象
item便历时的每一个对象
open语句块开头的字符串
close语句块结束的字符串
separator每次遍历之间间隔的字符串

需求:根据多个userid,删除用户数据

Mapper接口:

 void deleteByIds(List<Integer> ids);

ArticleMapper.xml 中新增删除sql:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/ /DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.book.mapper.ArticleInfoMapper"><delete id="deleteByIds">delete from article_infowhere id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete></mapper>

测试:

@Testvoid testDeleteByIds() {articleInfoMapper.deleteByIds(List.of(2,3));}

运行结果:

1.7 <include> 标签

在xmI映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多余的代码

我们可以对重复的代码片段进行抽取,将其通过<sql>标签封装到一个SQL片段,然后再通过
<include>标签进行引用。
<sql>:定义可重用的SQL片段
<include>:通过属性refid,指定包含的SQL片段 

<sql id="allColumn">id, username, age, gender, phone, delete_flag, create_time, update_time</sql>

通过标签在原来抽取的地方进行引用。操作如下:

<select id="queryAllUser" resultMap="BaseMap">select<include refid="allColumn"></include>from user_info</select><select id="queryById" resultType="com.example.demo.model.UserInfo">select<include refid="allColumn"></include>from userinfo where id= #{id}</select>

相关文章:

Mybatis高级(动态SQL)

目录 一、动态SQL 1.1 数据准备&#xff1a; 1.2 <if>标签 1.3<trim> 标签 1.4<where>标签 1.5<set>标签 1.6 <foreach>标签 1.7<include> 标签 一、动态SQL 动态SQL是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同…...

在 Vue 3 中使用 Lottie 动画:实现一个加载动画

在现代前端开发中&#xff0c;动画是提升用户体验的重要元素之一。Lottie 是一个流行的动画库&#xff0c;它允许我们使用 JSON 文件来渲染高质量的动画。本文将介绍如何在 Vue 3 项目中集成 Lottie 动画&#xff0c;并实现一个加载动画效果。 如果对你有帮助请帮忙点个&#x…...

建筑行业安全技能竞赛流程方案

一、比赛时间&#xff1a; 6月23日8&#xff1a;30分准时到场&#xff1b;9&#xff1a;00&#xff0d;10&#xff1a;00理论考试&#xff1b;10&#xff1a;10-12:00现场隐患答疑&#xff1b;12:00-13&#xff1a;30午餐&#xff1b;下午13&#xff1a;30-15&#xff1a;30现场…...

Mybatisplus自定义sql

文章目录 引言流程 引言 mybatisplus最擅长的将where里面的语句给简便化&#xff0c;而不用我们自己写标签来实现条件查询 但是很多公司规范我们将sql写在mapper层中&#xff0c;不能写在service中 而且一些语句查询的不同select count(*) xxx from xxx 也难以用mp来实现 如何…...

情书网源码 情书大全帝国cms7.5模板

源码介绍 帝国cms7.5仿《情书网》模板源码&#xff0c;同步生成带手机站带采集。适合改改做文学类的网站。 效果预览 源码获取 情书网源码 情书大全帝国cms7.5模板...

基于Unity引擎的网络通信架构深度解析——以NetworkConnectionController为例

一、架构概览与设计理念 本文将以重构后的NetworkConnectionController为核心&#xff0c;深入分析基于Unity引擎的MMO网络通信架构设计。该模块采用分层设计思想&#xff0c;通过连接池管理、流量控制、心跳监测等多维度技术手段&#xff0c;构建了一个高性能、可扩展的网络通…...

C#学习之DataGridView控件

目录 一、DataGridView控件常用属性、方法、事件汇总表 1. 常用方法、属性和事件汇总 二、DataGridView 控件的常用方法调用 1. DataBind() 方法 2. Clear() 方法 3. Refresh() 方法 4. Sort() 方法 5. ClearSelection() 方法 6. BeginEdit() 方法 7. EndEdit() 方法…...

midjourney 一 prompt 提示词

midjourney 不需要自然语言的描述&#xff0c;它只需要关键词即可。 一个完整的Midjourney prompt通常包括三个部分 图片提示&#xff08;Image Prompts&#xff09;、文本提示&#xff08;Text Prompt&#xff09;和参数&#xff08;Parameters&#xff09;。 1、图片提示(…...

谈谈 wait 和 notify

目录 1 wait()方法 2 notify()⽅法 3 wait 和 sleep 的区别 多线程调度是随机的, 很多时候希望多个线程能够按照咱们规定的顺序来执行. 完成线程之间的配合工作. wait和notify就是一个用来协调线程顺序的重要工具. 这俩方法都是 Object 提供的方法. 随便找个对象&#xff0…...

250214-java类集框架

引言 类集框架本质上相当于是容器&#xff0c;容器装什么东西由程序员指定 1.单列集合 单列集合是list和set&#xff0c;list的实现类有ArrayList和LinkedList&#xff0c;前者是数组实现&#xff0c;后者是链表实现。list和set&#xff0c;前者有序、可重复&#xff0c;后者…...

Python学习心得异常处理

有些代码在操作的过程当中&#xff0c;如果不注意其所限定的条件&#xff0c;可能在输入函数值时引发一些程序的报错&#xff0c;这样为了让代码自己能做到抛除异常操作的情况&#xff0c;就得让代码具有排除异常的能力。下面的一些操作就使得代码具有该功能&#xff0c;处理异…...

【机器学习】线性回归 多项式线性回归

【机器学习系列】 KNN算法 KNN算法原理简介及要点 特征归一化的重要性及方式线性回归算法 线性回归与一元线性回归 线性回归模型的损失函数 多元线性回归 多项式线性回归 多项式线性回归 V1.0多项式回归多项式回归的公式 特征代换超越函数作为特征向量维度 V1.0 多项式回归 …...

链表和list

链表和list ‍ ​ ​ ​ ​ ​ ​ ​ ​ ​ 算法题中的经典操作&#xff1a;用空间代替时间​ ​ ​ ​ 双链表头插顺序&#xff1a; 1.先修改新结点的左右指针 2.然后修改结点y的左指针 3.最后修改哨兵位的右指针 双链表在任意位置&#xff08;p&#xff09;之后插入…...

vscode的一些实用操作

1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容&#xff0c;即可跳转到相应位置。 使用ctrl p,然后输入指定的行号&#xff0c;回车即可跳转到相应行号位置。...

sass中@import升级@use的使用区别与案例

在 Sass 中&#xff0c;import 和 use 都用于模块化代码&#xff0c;但二者有显著区别。以下是主要差异和具体案例说明&#xff1a; 核心区别对比 特性 import (旧版) use (新版) 作用域 全局作用域&#xff08;变量/混合易冲突&#xff09; 局部作用域&#xff08;需通过…...

基于单片机ht7038 demo

单片机与ht7038 demo&#xff0c;三相电能表&#xff0c;电量数据包括电流电压功能&#xff0c;采用免校准方法 列表 ht7038模块/CORE/core_cm3.c , 17273 ht7038模块/CORE/core_cm3.h , 85714 ht7038模块/CORE/startup_stm32f10x_hd.s , 15503 ht7038模块/CORE/startup_stm32…...

基于YOLO11深度学习的胃肠道息肉智能检测分割与诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构 // Set up saved column state only if the saved state // contains information other than "nothing". if (_hdsaColumnStates) { UINT cStates DSA_GetItemCount(_hdsaColumnS…...

商淘云中英文外贸电商系统,助力传统企业杨帆出海

在全球经济一体化的浪潮下&#xff0c;传统企业纷纷渴望拓展海外市场&#xff0c;寻求新的增长机遇。然而&#xff0c;语言障碍、复杂的跨境交易流程、多元的支付体系以及迥异的消费习惯&#xff0c;如同重重壁垒&#xff0c;阻碍着传统企业扬帆出海的步伐。此时&#xff0c;商…...

--- Mysql事务 ---

什么是事务 因为事务的存在&#xff0c;可以使得多条sql语句一起执行&#xff0c;并且只有全部执行成功或全部执行失败俩种结果&#xff0c;保证了数据的安全&#xff0c;也使得这些sql语句拥有了原子性&#xff0c;隔离性&#xff0c;一致性&#xff0c;持久性&#xff08;AC…...

FreeRTOS第7篇:内存的“精打细算”——堆管理与内存分配

文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 引言:嵌入式系统的“仓库管理员” 想象你是一家繁忙仓库的管理员:货物(内存块)需要被高效存取,货架(堆空间)必须避免…...

有效市场理论(Efficient Market Hypothesis,简称 EMH):市场真的“有效”吗?中英双语

有效市场理论&#xff08;EMH&#xff09;&#xff1a;市场真的“有效”吗&#xff1f; 1. 什么是有效市场理论&#xff1f; &#x1f4cc; 有效市场理论&#xff08;Efficient Market Hypothesis&#xff0c;简称 EMH&#xff09; 是由美国经济学家 尤金法玛&#xff08;Eug…...

STM32 HAL库USART串口中断编程:演示数据丢失

目录 一、开发环境 二、配置STM32CubeMX 三、代码实现与部署 四、运行结果&#xff1a; ​五、注意事项 上面讨论过,HAL_UART_Receive最容易丢数据了,可以考虑用中断来实现,但是HAL_UART_Receive_IT还不能直接用,容易数据丢失,实际工作中不会这样用,本文介绍STM32F103 HAL库函数…...

MapReduce的工作原理及其在大数据处理中的应用

MapReduce是一种由Google提出的面向大数据并行处理的计算模型、框架和平台&#xff0c;它通过将复杂的数据处理任务分解为两个简单的阶段——Map&#xff08;映射&#xff09;和Reduce&#xff08;归约&#xff09;&#xff0c;实现了分布式并行计算&#xff0c;极大地提高了数…...

python学opencv|读取图像(六十六)使用cv2.minEnclosingCircle函数实现图像轮廓圆形标注

【1】引言 前序学习过程中&#xff0c;已经掌握了使用cv2.boundingRect()函数实现图像轮廓矩形标注&#xff0c;相关文章链接为&#xff1a;python学opencv|读取图像&#xff08;六十五&#xff09;使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客 这篇文章成功在图…...

SpringCloud系列教程:微服务的未来(二十四)Direct交换机、Topic交换机、声明队列交换机

前言 在现代消息队列系统中&#xff0c;交换机是实现消息传递和路由的核心组件。本文将重点探讨三种常见的交换机类型&#xff1a;Direct交换机、Topic交换机和声明队列交换机。通过对这三种交换机的详细分析&#xff0c;我们将学习它们的工作原理、应用场景以及如何在实际项目…...

云创智城充电系统:基于 SpringCloud 的高可用、可扩展架构详解-多租户、多协议兼容、分账与互联互通功能实现

在新能源汽车越来越普及的今天&#xff0c;充电基础设施的管理和运营变得越来越重要。云创智城充电系统&#xff0c;就像一个超级智能管家&#xff0c;为新能源充电带来了全新的解决方案&#xff0c;让充电这件事变得更方便、更高效、更安全。 一、厉害的技术架构&#xff0c;让…...

iOS事件传递和响应

背景 对于身处中小公司且业务不怎么复杂的程序员来说&#xff0c;很多技术不常用&#xff0c;你可能看过很多遍也都大致了解&#xff0c;但是实际让你讲&#xff0c;不一定讲的清楚。你可能说&#xff0c;我以独当一面&#xff0c;应对自如了&#xff0c;但是技术的知识甚多&a…...

时间序列分析(四)——差分运算、延迟算子、AR(p)模型

此前篇章&#xff1a; 时间序列分析&#xff08;一&#xff09;——基础概念篇 时间序列分析&#xff08;二&#xff09;——平稳性检验 时间序列分析&#xff08;三&#xff09;——白噪声检验 一、差分运算 差分运算的定义&#xff1a;差分运算是一种将非平稳时间序列转换…...

OpenCV机器学习(6)朴素贝叶斯分类器(Naive Bayes Classifier)cv::ml::NormalBayesClassifier的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::NormalBayesClassifier 是 OpenCV 机器学习模块中的一部分&#xff0c;用于实现朴素贝叶斯分类器&#xff08;Naive Bayes Classifier&a…...

Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解

目录 前言1. nginx配置2. 配置minio(Demo要点)3. 实战要点3.1 前端配置3.2 后端配置3.3 应用前言 如何在ruoyi-vue-pro上使用minio上传文件,通过Ngnix再次转发路径 相关的minio推荐阅读: 云服务器中的MinIO 配置 HTTPS 过程(图文)详细分析Java中的Minio类各API(附win配…...

python黑帽子第二版netcat分析

源码 import argparse import socket import shlex import subprocess import sys import textwrap import threadingdef execute(cmd):cmd cmd.strip()if not cmd:returnoutput subprocess.check_output(shlex.split(cmd), stderrsubprocess.STDOUT)return output.decode()…...

【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决

问题描述 我们将Debug版本的安装包发送到手机上安装&#xff0c;会发现华为手机有如下情况 解决办法 在文件gradle.properties中粘贴代码&#xff1a; android.injected.testOnlyfalse 最后点击“Sync now”&#xff0c;等待重新加载gradle资源即可 后面我们重新编译Debug安装…...

dify实现分析-rag-文档内容提取

dify实现分析-rag-文档内容提取 概述 在文章《dify实现原理分析-上传文件创建知识库总体流程》中已经介绍了&#xff0c;文件上传后索引构建的总体流程&#xff0c;本文介绍其中的“Extract: 提取文档内容:这里会按段落或整页来获取文档内容”步骤的实现。 这一步的主要功能…...

腾讯云API+chatbox

腾讯云的限时免费接口&#xff1a;知识引擎原子能力 对话-原子能力相关接口-API 中心-腾讯云 本接口调用DeepSeek系列模型限时免费。即日至北京时间2025年2月25日23:59:59&#xff0c;所有腾讯云用户均可享受DeepSeek-V3、DeepSeek-R1模型限时免费服务&#xff0c;单账号限制接…...

sql查询null的时候

SELECT * FROM scm_sku_stock WHERE SKU_CODEGOS2310251620452226 and CONSIGNOR_USER_CODE is null 在 SQL 中&#xff0c;NULL 是一个特殊的值&#xff0c;表示“没有值”或“未知值”。在比较时&#xff0c;NULL 不能直接用 或 ! 来比较。相反&#xff0c;你需要使用 IS N…...

BitLocker技巧与经验

初级代码游戏的专栏介绍与文章目录-CSDN博客 BitLocker是windows默认的存储加密方案&#xff0c;用好了很安全&#xff0c;用错了完蛋。以下来自我的使用经验。 目录 可以加密移动设备 可以加密操作系统分区 TPM是个坑 一定要用微软账号登录并将密钥保存在账号里 不建议使…...

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档 本文将对七个流行的定时任务调度库&#xff1a;node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务&#xff0c;但它们的特点和适用场景有所不同。我们将从…...

数据结构——二叉树(2025.2.12)

目录 一、树 1.定义 &#xff08;1&#xff09;树的构成 &#xff08;2&#xff09;度 2.二叉树 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;二叉树的遍历 &#xff08;3&#xff09;遍历特性 二、练习 1.二叉树 &#xff08;1&#xff09;创建二叉树…...

OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression

OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类&#xff0c;用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法&#xff0c;特别适合二分类任务。…...

matlab 汽车abs的模糊pid和pid控制仿真

1、内容简介 matlab145-汽车abs的模糊pid和pid控制仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略基于模糊控制的汽车ABS系统仿真研究_刘志敏.caj 汽车ABS模糊控制方法的分析与仿真_李林.caj 汽车ABS模糊控制方法的研究_王文竹.pdf 汽车ABS…...

Flutter 正在推进全新 PlatformView 实现 HCPP, 它又用到了 Android 上的什么黑科技

跨平台开发里的 PlatformView 实现一直是一个经久不衰的话题&#xff0c;在之前的 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 我们就详细聊过 Flutter 和 Compose 在 PlatformView 实现上的异同之处&#xff0c;也聊到了 Compose 为什么在相同实现上对比 Flutter …...

VAS1260IB05E 集成内部开关驱动器的汽车级LED硬灯带高效解决方案

VAS1260IB05E LED芯片是一种连续模式电感降压转换器&#xff0c;设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作&#xff0c;并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路&#xff0c;该电路使…...

5.【线性代数】—— 转置,置换和向量空间

五 转置&#xff0c;置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义&#xff1a; 用于行互换的矩阵P。 之前进行ALU分解时&#xff0c;可能存在该行主元为0&#xff0c;要进行行互换&#xff0c;即PALU 性质&#xff1…...

前端如何实现一个五星评价,鼠标滑动,前边星星颜色的变黄,后边的不变;

直接上代码 <!DOCTYPE html> <html> <head> <style> .star-rating {display: flex;padding: 10px 0; }.star {position: relative;width: 40px;height: 40px; }.half {position: absolute;top: 0;width: 20px;height: 40px;overflow: hidden;font-siz…...

等差数列有几项--INT_MAX【#include <climits>】

等差数列 题目代码INT_MAX的使用 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue> #include <climits> // 包含INT_MAX常量 #include <cctype&g…...

Linux /dev/null

/dev/null 是 Linux 和类 Unix 系统中一个特殊且非常有用的设备文件&#xff0c;也被称为空设备。下面为你详细介绍它的特点、用途和使用示例。 特点 写入丢弃&#xff1a;当向 /dev/null 写入数据时&#xff0c;这些数据会被立即丢弃&#xff0c;不会被保存到任何地方&#…...

计算机视觉-尺度不变区域

一、尺度不变性 1.1 尺度不变性 找到一个函数&#xff0c;实现尺度的选择特性。 1.2 高斯偏导模版求边缘 1.3 高斯二阶导 用二阶过零点检测边缘 高斯二阶导有两个参数&#xff1a;方差和窗宽&#xff08;给定方差可以算出窗宽&#xff09; 当图像与二阶导高斯滤波核能匹配…...

串的基本操作--数据结构

目录 一、串的基本概述 二、串的存储结构 2.1定义属性存储结构 串长有两种表示方法: 1、用一个额外的变量length来存放串的长度&#xff1b; 2、串值后面加一个不计入串长的结束标记字符“\0”&#xff0c;此时的串长为隐含值。 2.2堆的顺序存储结构 三、串的基本操…...

C++17 数学特殊函数:探索标准库中的强大工具

文章目录 1. 什么是数学特殊函数&#xff1f;2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中&#xff0c;标准库引入了一系列数学特殊函数&#xff0c;这些函数…...