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

MyBatis—动态 SQL

MyBatis—动态 SQL

一、动态 SQL 的核心作用

动态 SQL 主要解决以下问题:

  1. 灵活性:根据不同的输入参数生成不同的 SQL 语句(如条件查询、批量操作)。

  2. 可维护性:减少重复代码,通过标签化逻辑提高 SQL 可读性。

  3. 安全性:自动处理参数绑定,防止 SQL 注入。

二、常用动态 SQL 标签

MyBatis 提供了以下标签来实现动态 SQL:

1. <if>:条件判断
  • 根据参数值是否满足条件,决定是否包含 SQL 片段。
  • 示例:
<select id="findUser" resultType="User">SELECT * FROM users<where><if test="name != null and name != ''">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>
  • 说明:如果 nameage 为空,则对应的条件不会被包含。
2. <choose>/<when>/<otherwise>:多条件选择
  • 类似于 Java 的 switch-case,按顺序判断条件。

  • 示例:

    <select id="findUserByCondition" resultType="User">SELECT * FROM users<where><choose><when test="name != null">AND name = #{name}</when><when test="email != null">AND email = #{email}</when><otherwise>AND status = 'active'</otherwise></choose></where>
    </select>
    
  • 说明:按顺序判断 nameemail,若都不满足则执行默认条件。

3. <where>:智能处理 WHERE 子句
  • 自动去除多余的 ANDOR,并自动添加 WHERE 关键字。

  • 示例:

    <select id="findUser" resultType="User">SELECT * FROM users<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
    </select>
    
    • 结果:若 nameage 都为空,则生成 SELECT * FROM users(无 WHERE 子句);若 name 不为空,则生成 WHERE name = ?
4. <set>:动态更新字段
  • 用于 UPDATE 语句,自动去除末尾逗号。

  • 示例:

    <update id="updateUser">UPDATE users<set><if test="name != null">name = #{name},</if><if test="email != null">email = #{email},</if></set>WHERE id = #{id}
    </update>
    
    • 结果:若 nameemail 都不为空,生成 SET name = ?, email = ?;若只有一个字段不为空,自动去除末尾逗号。
5. <foreach>:遍历集合
  • 用于批量操作(如 IN 子句、批量插入)。

  • 示例:

    <select id="findUsersByIds" resultType="User">SELECT * FROM usersWHERE id IN<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach>
    </select>
    
    • 结果:若传入的 list[1, 2, 3],生成 WHERE id IN (1, 2, 3)
6. <trim>:灵活拼接 SQL
  • 手动控制 SQL 片段的前缀和后缀,常用于复杂逻辑。

  • 示例:

    <trim prefix="WHERE" prefixOverrides="AND |OR "><if test="name != null">AND name = #{name}</if>
    </trim>
    
    • 说明:若 name 为空,则不生成 WHERE;若 name 不为空,生成 WHERE name = ?

三、动态 SQL 的实现原理

  1. XML 解析:MyBatis 启动时加载 Mapper XML 文件,解析动态 SQL 标签。
  2. SQL 拼接:运行时根据传入参数动态生成 SQL 片段。
  3. 参数绑定:使用 #{} 绑定参数,防止 SQL 注入。
  4. 预编译:最终生成的 SQL 被发送给数据库驱动,创建 PreparedStatement

四、动态 SQL 的应用场景

  1. 条件查询:根据用户输入动态过滤条件。
  2. 批量操作:批量插入、更新、删除。
  3. 多表关联:根据业务需求动态关联不同表。
  4. 复杂业务逻辑:如动态排序、分页等。

五、最佳实践

  1. 避免复杂嵌套:过多嵌套会降低可读性,建议拆分逻辑。
  2. 合理使用 <where><set>:简化 SQL 片段。
  3. 测试动态 SQL:通过日志查看生成的 SQL,确保逻辑正确。
  4. 参数校验:在业务层校验参数,避免无效条件。

六、示例:综合使用动态 SQL(实战)

比如我们已经写完了controller层,entity层,mapper层,service层等Impl。

动态SQL实现:修改mapper层:(注释掉SQL注解)

@Mapper
public interface UsersMapper {@Select("insert into users(account,password,uname,gender,age,phone,email,address,avatar,regtime,uflag) values(#{account},#{password},#{uname},#{gender},#{age},#{phone},#{email},#{address},#{avatar},#{regtime},#{uflag})")void addUser(Users users);@Select("select * from users where account=#{account}")Users getUserByAccount(String account);//    @Select("select * from users where uflag = #{uflag} order by regtime desc")List<Users> queryUsersByUflag(Users users);//根据id查询用户@Select("select * from users where account = #{id}")Users queryUsersById(String id);//审核通过
//    @Update("update users set uflag = #{uflag} where account = #{account}")void updateUser(Users users);//删除家长@Delete("delete from users where account = #{id}")void delUsers(String id);
}

这些SQL注解我们写进resources/mapper/UsersMapper.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.bkty.turtorsystem.mapper.UsersMapper"><!--根据动态的条件查询用户--><select id="queryUsersByUflag"  resultType="Users"parameterType="Users">select * from users<where><if test="uflag != null and uflag != ''">uflag = #{uflag}</if><if test="account != null and account != ''">and account = #{account}</if><if test="uname != null and uname != ''">and uname = #{uname}</if><if test="password != null and password != ''">and password = #{password}</if><if test="email != null and email != ''">email = #{email}</if><if test="phone != null and phone != ''">and phone like concat('%',#{phone},'%')</if><if test="gender != null and gender != ''">and gender = #{gender}</if><if test="age != null and age != ''">and age = #{age}</if><if test="address != null and address != ''">address = #{address}</if><if test="condition != null and condition != ''">${condition}</if></where>order by regtime desc</select><update id="updateUser" parameterType="Users">update users<set><if test="account != null and account != ''">account = #{account},</if><if test="password != null and password != ''">password = #{password},</if><if test="uname != null and uname != ''">uname = #{uname},</if><if test="gender != null and gender != ''">gender = #{gender},</if><if test="age != null and age != ''">age = #{age},</if><if test="phone != null and phone != ''">phone = #{phone},</if><if test="email != null and email != ''">email = #{email},</if><if test="address != null and address != ''">address = #{address},</if><if test="avatar != null and avatar != ''">avatar = #{avatar},</if><if test="regtime != null and regtime != ''">regtime = #{regtime},</if><if test="uflag != null and uflag != ''">uflag =#{uflag},</if></set>where account = #{account}</update>
</mapper>
<mapper namespace="com.bkty.turtorsystem.mapper.UsersMapper">

这个namespace=指向我的mapper,相当于注解SQL,把注解改成了xml。

1. 查询语句:queryUsersByUflag

<select id="queryUsersByUflag" resultType="Users" parameterType="Users">select * from users<where><if test="uflag != null and uflag != ''">uflag = #{uflag}</if><if test="account != null and account != ''">and account = #{account}</if><!-- 其他字段的 <if> 条件 --><if test="condition != null and condition != ''">${condition}</if></where>order by regtime desc
</select>
功能说明
  • 作用:根据传入的 Users 对象中的字段动态生成 SQL 查询条件,查询 users 表中的记录。
  • 动态条件:
    • 使用 <where> 标签包裹所有条件,MyBatis 会自动处理 ANDOR 的冗余问题(例如,如果第一个条件不成立,WHERE 关键字不会被输出)。
    • 每个 <if> 标签检查字段是否非空,若非空则添加对应的查询条件。
    • 特殊字段 condition 使用 ${condition} 直接拼接 SQL(需注意 SQL 注入风险)。
关键点
  1. 字段条件:
    • 所有字段(如 uflag, account, uname 等)都通过 <if> 动态判断是否添加到查询条件中。
    • 注意:第一个条件(uflag)没有加 AND,但 <where> 标签会自动处理这种情况,避免语法错误。
  2. condition 字段:
    • 使用 ${condition} 直接拼接原始 SQL 片段(例如 1=1status='active')。
    • 风险${} 不会进行参数绑定,存在 SQL 注入风险,需确保传入值的安全性。
  3. 排序:
    • 固定按 regtime 降序排列。
示例

假设传入的 Users 对象包含 uflag="1"account="test123",生成的 SQL 为:

SELECT * FROM users 
WHERE uflag = '1' AND account = 'test123' 
ORDER BY regtime DESC;

2. 更新语句:updateUser

<update id="updateUser" parameterType="Users">update users<set><if test="account != null and account != ''">account = #{account},</if><!-- 其他字段的 <if> 条件 --><if test="uflag != null and uflag != ''">uflag =#{uflag},</if></set>where account = #{account}
</update>
功能说明
  • 作用:根据传入的 Users 对象中的字段动态更新 users 表中的记录。
  • 动态更新字段:
    • 使用 <set> 标签包裹所有字段更新逻辑,MyBatis 会自动去除末尾多余的逗号。
    • 每个 <if> 标签判断字段是否非空,若非空则更新对应字段。
  • 更新条件:
    • 使用 account = #{account} 作为更新条件(需确保 account 是唯一标识字段)。
关键点
  1. 字段更新:
    • 所有字段(如 account, password, uname 等)都通过 <if> 动态判断是否更新。
    • 注意:每个字段条件后都有逗号 ,,但 <set> 会自动去除最后一个字段的逗号。
  2. 更新条件:
    • 使用 account = #{account} 作为更新条件,需确保 account 是唯一值(否则可能更新多条记录)。
  3. 潜在问题:
    • 如果 account 不唯一,可能会导致意外更新多条记录。
    • 更推荐使用主键(如 id)作为更新条件。
示例

假设传入的 Users 对象包含 account="test123"uname="NewName",生成的 SQL 为:

UPDATE users 
SET account = 'test123', uname = 'NewName' 
WHERE account = 'test123';

七、总结

MyBatis 的动态 SQL 通过标签化逻辑,解决了传统 SQL 硬编码的问题,使代码更简洁、安全且灵活。合理使用 <if><where><foreach> 等标签,可以大幅提升开发效率和代码质量。

相关文章:

MyBatis—动态 SQL

MyBatis—动态 SQL 一、动态 SQL 的核心作用 动态 SQL 主要解决以下问题&#xff1a; 灵活性&#xff1a;根据不同的输入参数生成不同的 SQL 语句&#xff08;如条件查询、批量操作&#xff09;。 可维护性&#xff1a;减少重复代码&#xff0c;通过标签化逻辑提高 SQL 可读…...

解决“VMware另一个程序已锁定文件的一部分,进程无法访问“

问题描述 打开VMware里的虚拟机时&#xff0c;弹出"另一个程序已锁定文件的一部分&#xff0c;进程无法访问"如图所示&#xff1a; 这是VM虚拟机的保护机制。虚拟机运行时&#xff0c;为防止数据被篡改&#xff0c;会将所运行的文件保护起来。当虚拟机崩溃或者强制…...

如何创建一个不可变类

写在前面 如果对象在构造后无法更改&#xff0c;则该对象是不可变的。不可变对象不会以任何方式暴露其他对象来修改其状态; 对象的字段仅在构造函数内初始化一次&#xff0c;并且永远不会再次更改。 1.不可变类的用法 如今&#xff0c;每个软件应用程序的*“必备”规范都是分…...

outbox架构解说

Outbox 模式是一种用于实现数据一致性的架构模式&#xff0c;特别是在微服务架构中。 它确保在处理事务时&#xff0c;数据的原子性和最终一致性。 Outbox 模式的详细解说&#xff1a; 1. 概念与背景 背景&#xff1a;在微服务架构中&#xff0c;一个操作可能涉及多个服务&…...

PT2020 20触控I2C输出IC

1&#xff0e;产品概述 ● PT2020是一款电容式触摸控制ASIC&#xff0c;支持20通道触摸输入&#xff0c;I2C键值输出。可通过I2C调节灵敏度以及功能设置。算法带有走线自补偿功能&#xff0c;具有高抗干扰、宽工作电压范围的突出优势。适用于小家电&#xff0c;智能门锁等消费类…...

【GAN网络入门系列】一,手写字MINST图片生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…...

数据备份与恢复方案

数据备份与恢复方案 一&#xff0e;背景 为确保公司信息安全&#xff0c;防止关键数据丢失&#xff0c;应对突发事件&#xff0c;特制定全面的数据备份与恢复方案。该方案将对公司的各类文件资料进行分级管理&#xff0c;并针对不同级别的数据设定相应的备份策略和恢复流程。 二…...

Go的单测gomock及覆盖率命令

安装gomock&#xff1a; go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen 使用 mockgen 生成 mock 代码: 参考 mockgen -sourceservice/user.go -destinationservice/mocks/mock_user_service.go -packagemocks go test -coverprofilecoverage.out…...

淘宝商家层级存在流量上限怎么办,如何突破流量上限?

在淘宝平台运营中&#xff0c;许多商家都会遇到一个共同难题&#xff1a;随着店铺层级的提升&#xff0c;流量增长却逐渐触及天花板。这种现象背后隐藏着平台复杂的流量分配机制&#xff0c;但并非无法破解。 一、流量上限的底层逻辑 淘宝根据商家层级&#xff08;1-7层&…...

【linux】Web服务—搭建nginx+ssl的加密认证web服务器

准备工作 步骤&#xff1a; 一、 新建存储网站数据文件的目录 二、创建一个该目录下的默认页面&#xff0c;index.html 三、使用算法进行加密 四、制作证书 五、编辑配置文件&#xff0c;可以选择修改主配置文件&#xff0c;但是不建议 原因如下&#xff1a; 自定义一个配置文…...

MySQL MCP 使用案例

## 概述 MySQL MCP&#xff08;MySQL Multi-Channel Protocol&#xff09;是MySQL的多通道协议实现&#xff0c;提供了高效的数据库连接池和负载均衡功能。本文档将介绍MySQL MCP的基本使用方法和常见案例。 ## 环境准备 ### 安装MySQL MCP bash pip install mysql-mcp ### 基…...

C#中UI线程的切换与后台线程的使用

文章速览 UI线程切换示例 后台线程使用示例 两者对比适用场景Application.Current.Dispatcher.InvokeTask.Factory.StartNew 执行同步性Application.Current.Dispatcher.InvokeTask.Factory.StartNew 一个赞&#xff0c;专属于你的足迹&#xff01; UI线程切换 在WPF应用程序…...

实验-实现向量点积-RISC-V(计算机组成原理)

目录 一、实验内容 二、实验步骤 三、源代码 四、实现效果 五、实验环境 六、实验小结与思考 一、实验内容 首先&#xff0c;我们用一个简单的“向量点积”运算作为热身。你将拿到一个不完整的汇编代码“task2-向量点积”&#xff0c;我们的目标是按照C语言描述的功能&a…...

【软考 霍夫曼编码的文档压缩比】

霍夫曼编码的文档压缩比计算基于字符频率的最优编码分配&#xff0c;以下是详细步骤及相关案例&#xff1a; 一、压缩比计算公式 [ \text{压缩比} \frac{\text{压缩前总比特数}}{\text{压缩后总比特数 编码表存储开销}} ] 通常以 比率&#xff08;如 3:1&#xff09; 或 百分…...

skywalking使用教程

skywalking使用教程 一、介绍 skywalking 1.1 概念 skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布…...

Tor推出Oniux新工具:为Linux应用提供网络流量匿名化

Tor项目近日发布了名为Oniux的新型命令行工具&#xff0c;该工具可将任何Linux应用程序的网络流量安全地路由至Tor网络&#xff0c;实现匿名化连接。 基于Linux命名空间的隔离技术 与依赖用户空间技巧的torsocks等传统方法不同&#xff0c;Oniux利用Linux命名空间&#xff08…...

LLaMA-Factory微调大模型Qwen2.5

1、开始ModelScope社区GPU环境 训练或微调模型都是非常耗费算力的。如果电脑的配置不高,可使用一些云服务器来做这项工作。如ModelScope(魔搭)社区的GPU环境,目前提供36小时免费运算,足够微调一个大模型了。 注册ModelScope(魔搭)社区账号(可能还要注册或认证阿里云账号)…...

docker(四)使用篇二:docker 镜像

在上一章中&#xff0c;我们介绍了 docker 镜像仓库&#xff0c;本文就来介绍 docker 镜像。 一、什么是镜像 docker 镜像本质上是一个 read-only 只读文件&#xff0c; 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。 我们可以把…...

算法练习:19.JZ29 顺时针打印矩阵

错误原因 总体思路有&#xff0c;但不够清晰&#xff0c;一直在边调试边完善。这方面就养成更好的构思习惯&#xff0c;以及涨涨经验吧。 分析&#xff1a; 思路&#xff1a;找规律 两个坑&#xff1a; 一次循环的后半段是倒着遍历的是矩阵不是方阵&#xff0c;要考虑行列…...

如何使用 Solana Yellowstone gRPC 重新连接和重放插槽

Yellowstone gRPC 是一个功能强大、可用于生产环境且经过实战检验的工具&#xff0c;用于流式传输实时的 Solana 数据。但在实际条件下&#xff0c;网络中断或服务器重启可能导致连接中断。如果没有适当的重连策略&#xff0c;你的应用程序可能会错过区块链的关键更新。 为了防…...

踩坑:uiautomatorviewer.bat 打不开

错误信息 运行 sdk\tools\bin\uiautomatorviewer.bat 报错 -Djava.ext.dirs..\lib\x86_64;..\lib is not supported. Use -classpath instead. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 原因 java版…...

天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级

目录 天能股份SAP系统整合案例&#xff1a;技术驱动集团化管理的破局之路 一、企业背景&#xff1a;新能源巨头的数字化挑战 二、项目难点&#xff1a;制造业的特殊攻坚战 1. 生产连续性刚性需求 2. 数据整合三重障碍 3. 资源限制下的技术突围 三、解决方案&#xff1a;S…...

oracle主备切换参考

主备正常切换操作参考&#xff1a;RAC两节点->单机 &#xff08;rac和单机的操作区别&#xff1a;就是关闭其它节点&#xff0c;剩一个节点操作即可&#xff09; 1.主库准备 检查状态 SQL> select inst_id,database_role,OPEN_MODE from gv$database; INST_ID DATA…...

PHP 与 面向对象编程(OOP)

PHP 是一种支持面向对象编程&#xff08;OOP&#xff09;的多范式语言&#xff0c;但其面向对象特性是逐步演进而非原生设计。以下是关键分析&#xff1a; 1. PHP 对面向对象编程的支持 核心 OOP 特性&#xff1a; 类和对象&#xff1a; PHP 支持通过 class 关键字定义类&…...

预测模型开发与评估:基于机器学习的数据分析实践

在当今数据驱动的时代&#xff0c;预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验&#xff0c;探讨从数据清洗到模型优化的完整过程&#xff0c;并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…...

2026《数据结构》考研复习笔记四(绪论)

绪论 前言时间复杂度分析 前言 由于先前笔者花费约一周时间将王道《数据结构》知识点大致过了一遍&#xff0c;圈画下来疑难知识点&#xff0c;有了大致的知识框架&#xff0c;现在的任务就是将知识点逐个理解透彻&#xff0c;并将leetcode刷题与课后刷题相结合。因此此后的过…...

2025-5-16Vue3快速上手

1、reactive创建 对象类型的响应式数据 &#xff08;1&#xff09; (2)reactive包裹的对象类型数据是Proxy对象类型 2、ref 创建对象类型的响应式数据 &#xff08;1&#xff09;使用js修改ref的数据时依然要加.value (2)ref的底层是用reactive做响应式数据的&#xff0c;因为…...

Lua中使用module时踩过的坑

在lua中设置某个全局对象(假如对象名为LDataUser)为nil时, LDataUser并不会变成nil, 但在有些情况下设置LDataUser nil时却真变成了nil&#xff0c;然后会导致后续再使用LDataUser时会抛nil异常, 后来发现是使用module搞的鬼&#xff0c;下面看看豆包AI给的解释&#xff0c;还…...

WinSCP用户管理FTP详解

1、下载winscp 官方下载地址&#xff1a;https://winscp.net/eng/index.php 2、登录ftp 3、桌面快捷键 4、首页介绍 5、文件搜索 模糊查询&#xff0c;关键字两边必须加’ * ‘号 6、编码报错 报错原因&#xff1a;使用’936&#xff08;ANS/OEM-简体中尉GBK&#xff09;’编…...

python基础语法(三-中)

基础语法3&#xff1a; 2.列表与元组&#xff1a; <1>.列表、元组是什么&#xff1f; 都用来存储数据&#xff0c;但是两者有区别&#xff0c;列表可变&#xff0c;元组不可变。 <2>.创建列表&#xff1a; 创建列表有两种方式&#xff1a; [1].a 【】&#x…...

NLP双雄争霸:GPT与BERT的生成-理解博弈——从技术分野到产业融合的深度解码

NLP双雄争霸&#xff1a;GPT与BERT的生成-理解博弈——从技术分野到产业融合的深度解码 前言&#xff1a; 在自然语言处理&#xff08;NLP&#xff09;的版图上&#xff0c;GPT与BERT如双子星般照亮了智能时代的语言星空。一个是凭借千亿参数横扫生成任务的“文本造物主”&…...

JS手写代码篇---手写 instanceof 方法

2、手写 instanceof 方法 instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型&#xff0c;尤其是在处理继承关系时。 eg: const arr [1,2,3,4,5]console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // true那这是…...

浮点数截断法:四舍五入的精确模拟

理论解释&#xff1a; 1. 目标 假设 a 3.14159&#xff0c;我们想四舍五入到 小数点后两位&#xff08;即 3.14 或 3.15&#xff09;。 2. 步骤拆解 (1) a * 100 把 a 放大 100 倍&#xff0c;让小数点后两位变成整数部分&#xff1a; 3.14159 * 100 314.159 (2) 0.5 关…...

c++ 类的语法3

测试下默认构造函数。demo1&#xff1a; void testClass3() {class Demo { // 没显示提供默认构造函数&#xff0c;会有默认构造函数。public:int x; // 普通成员变量&#xff0c;可默认构造};Demo demo1;//cout << "demo1.x: " << demo1.x << en…...

EasyExcel导出excel再转PDF转图片详解

封装EasyExcel导出工具类 相关的依赖自己网上搜索加上&#xff0c;这里不在阐述 Slf4j Service public class AgentExcelUtils {public String syncDynamicHeadWrite(String fileName,String sheetName,List<List<String>> headList,List<?> data) throws…...

【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

Oc语言学习 —— 重点内容总结与拓展(上)

隐藏和封装 有四种访问控制符&#xff1a;private(当前类访问权限)&#xff0c;package(与映像访问权限相同)&#xff0c;protect(子类访问权限)&#xff0c;public(公共访问权限)。 访问控制符 1.private&#xff08;当前类访问权限&#xff09; 成员变量只能在当前类的内部…...

全面且深度学习c++类和对象(上)

文章目录 过程和对象类的引入&#xff0c;类的定义类的访问限定符及封装类的访问限定符封装 类的实例化类大小内存对齐规则&#xff1a; this指针this特性 过程和对象 C语言面向过程设计&#xff0c;c面向对象设计&#xff0c; 举例&#xff1a;洗衣服 C语言&#xff1a;放衣服…...

QML元素 - RectangularGlow

QML 的 RectangularGlow 是 Qt Quick Effects 模块中专门为矩形元素设计的外发光效果&#xff0c;适用于为卡片、按钮、面板等矩形或圆角矩形添加柔和的边缘光晕&#xff0c;相比通用 Glow 更高效且支持圆角匹配。以下是详细使用技巧和优化指南&#xff1a; 1. 基本用法 impor…...

GraphPad Prism项目的管理

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism统计数据分析_夏天又到了的博客-CSDN博客 项目…...

uniapp自定义日历计划写法(vue2)

文章目录 uniapp自定义日历计划写法(vue2)1、效果2、实现源码前言:我们有时候需要实现的日历找不到相应的插件的时候,往往需要手动去写一个日历,以下就是我遇到这样的问题时,手搓出来的一个解决方案,希望可以帮助到更多的人。创作不易,请多多支持uniapp自定义日历计划写…...

差分探头为什么要选择使用屏蔽双绞线

市面上很多各种品牌的差分探头&#xff0c;其使用的线缆都使用了屏蔽双绞线&#xff08;STP&#xff09;&#xff0c;这主要是因为在测试过程中因高压线路周围强电场或磁场在信号线与地线间感应出共模电压而产生的电磁耦合效应会对测试结果产生干扰&#xff0c;而屏蔽双绞线可以…...

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口&#xff0c;当点击注册按钮时&#xff0c;登录窗口会消失&#xff0c;会出现一个新的注册界面&#xff1b;完成注册或退出注册时&#xff0c;注册窗口会消失&#xff0c;重新出现登录窗口。注册过的用户信息会出现在SQLi…...

Visual Studio旧版直链

[Visual Studio 2019 社区版]&#xff08;https://aka.ms/vs/16/release/vs_community.exe&#xff09; [Visual Studio 2019 专业版]&#xff08;https://aka.ms/vs/16/release/vs_professional.exe&#xff09; [Visual Studio 2019 企业版]&#xff08;https://aka.ms/vs/16…...

elementUI源码学习

学习笔记。 最近在看element的table表格优化&#xff0c;又去看了一下element源码框架。element 的架构是很优秀&#xff0c;通过大量的脚本实现工程化&#xff0c;让组件库的开发者专注于事情本身&#xff0c;比如新加组件&#xff0c;一键生成组件所有文件&#xff0c;并完成…...

【LeetCode 热题 100】搜索插入位置 / 搜索旋转排序数组 / 寻找旋转排序数组中的最小值

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置搜索旋转排序数组寻找旋转排序数组中的最小值…...

捌拾伍- 量子傅里叶变换 (3)

前期的内容在 捌拾叁- 量子傅里叶变换 前期的内容在 捌拾肆- 量子傅里叶变换 (2) 9. 之前的 之前的公式写错了&#xff01; Markdown 的 KaTeX 真难用&#xff01;&#xff01;&#xff01; 而且之前的公式是从 j1 – jn &#xff0c;但量子计算都是从 0 开始的&#xff0c…...

探索ISBN查询接口:为图书管理系统赋能

在开发图书管理应用时&#xff0c;ISBN&#xff08;国际标准书号&#xff09;查询接口是获取图书元数据的核心工具。通过扫描图书条形码得到ISBN&#xff0c;再调用API即可轻松获取书名、作者、出版社、封面等信息。本文详细介绍几种主流ISBN查询API&#xff0c;包括国际和国内…...

Linux 内核中 inet_accept 的实现与自定义传输协议优化

在 Linux 内核中,网络协议栈的核心功能由一系列精心设计的函数实现,其中 inet_accept 是 TCP 协议接受新连接的关键入口。本文将深入分析该函数的实现逻辑,并探讨在实现自定义传输协议时如何权衡性能优化与代码简化。 一、inet_accept 函数解析 1. 功能概述 inet_accept 是…...

SAP-ABAP:SAP DMS(文档管理系统)的详细说明,涵盖其核心功能、架构、配置及实际应用

1. DMS 概述 SAP DMS&#xff08;Document Management System&#xff09;是SAP系统中用于管理企业文档的核心模块&#xff0c;支持文档的全生命周期管理&#xff08;创建、存储、版本控制、审批、归档&#xff09;。它与其他模块&#xff08;如物料管理MM、生产计划PP、设备维…...