木舟0基础学习Java的第二十一天(数据库,MySQL,SQLyog)
数据库
数据库:按照数据结构来组织 存储数据的厂库
数据管理系统(Database Management System,DBMS):一套操作和管理数据库的软件 用于简历 使用 维护数据库
关系型数据库:采用关系模型作为数据组织方式 逻辑结构是一张二维表 由行和列组成 表的每一行为一个元组 每一列为一个属性
应用系统:建立在用户层和数据层之间的展现和交互部分
数据库设计的三范式
1.数据库表的每一列都是不可分割的基本数据项
2.首先满足1 要求数据库表中的每个实体必须可以被唯一的区分(主关键字)要求主体的非主属性完全依赖于主关键字
3.首先满足2 每一列数据都和主键相关 不能间接相关 既不能传递依赖与主关键字
保证数据完整性和一致性
例子:School(数据库),students(表)
MySQL每句代码后一定要加;
创建代码:
建库:
//创建数据库
CREATE DATABASE School(数据库名);
//创建前判断有无该数据库 没有就创建(常用)
CREATE DATABASE IF NOT EXISTS School;
//创建数据库判断有无该数据库同时指定编码格式
CREATE DATABASE IF NOT EXISTS(不写没判断) School CHARACTER SET utf8(编码格式);
建表:
CHAR(8)//指定字符长度
NOT NULL//不为空
UNIQUE//唯一的
VARCHAR(255)//长度大于CHAR最大到255
INT//同java一样
每句话需要用 , 隔开 最后一句话不需要
一定记得要在括号外加;
CREATE TABLE students(stu_num CHAR(8) NOT NULL UNIQUE,stu_name VARCHAR(20) NOT NULL,stu_gender CHAR(2) NOT NULL,stu_age INT NOT NULL,stu_tel CHAR(11) NOT NULL UNIQUE,stu_qq VARCHAR(11) UNIQUE);
//添加列(字段)
ALTER TABLE students ADD stu_wx VARCHAR(20);
插入数据:
语法:INSERT INTO 表名<列名,列名,...> VALUES<'数据','数据',...>;
INSERT INTO
//在开发中推荐使用将全部列名写出
//添加数据 数据位置要与列名位置匹配
INSERT INTO students(stu_num,stu_name,stu_gender,stu_age,stu_tel)VALUES('20240101','张三',' ',23,'182XXXX8780');//' ' 不是null 是数据表没有值
//全部插入
INSERT INTO students VALUES('20240102','李四','女',24,'182XXXX8781','qq488085218');//数据必须与表中列的位置数量一一对应
删除代码:
删库:
//删除School数据库 敏感操作
DROP DATABASE School(数据库名);
删表:
//删除表 敏感操作会删除表中所有数据
DROP TABLE students(表名);
//删除前判断有无该数据表 没有就删除(常用)
DROP TABLE IF EXISTS students;
//删除列
ALTER TABLE students DROP stu_ww;
删数据:
//根据名字删除数据 要加上WHERE条件 不然会删除全部数据
DELETE FROM students WHERE stu_name='张三';//name可以替换成gender 就是根据性别删除
TRUNCATE FROM students WHERE stu_name='张三';
//DELETE和TRUNCATE的区别是自动增长
//DELETE删除后自动增长继续
//TRUNCATE删除后自动增长从1开始 并且 不能用在主外键关系表上
修改代码:
改库:
//修改数据库字符集(不常用)
ALTER DATABASE School CHARACTER SET gbk(编码格式);
改表:
//修改表名 将studengs改为stus RENAME TO 重命名
ALTER TABLE students RENAME TO stus;
//修改列的列表和类型 CHANGE 改变
ALTER TABLE students CHANGE stu_wx stu_ww VARCHAR(11);
//修改列类型 MODIFY 修改
ALTER TABLE students MODIFY stu_ww CHAR(11);
改数据:
//修改数据 敏感操作 会把students表中所有数据性别改为男 一定要加WHERE条件
UPDATE students SET stu_gender='男';
//修改一列数据 根据num来改
UPDATE students SET stu_gender='男' WHERE stu_num='20240101';//基本都是通过主键修改
//修改多列数据 同时 根据名字修改
UPDATE students SET stu_gender='女',stu_name='李四',stu_age=24 WHERE stu_name='张三';
查询代码:
查库:
//查询所有数据库
SHOW DATABASES;
查表:
//查询数据表
SHOW TABLES;
//查询表结构
DESC students;
//查询表中所有数据 *代表所有的
SELECT * FROM students;
//指定列查询
SELECT stu_name FROM students;
查数据:
单表查询:
//查询性别为女的数据
SELECT * FROM students WHERE stu_gender='女';
//查询数据 取别名并且算出生年份 AS 别名不建议取中文
SELECT stu_name AS 学生姓名,今年(2024)年份-stu_age AS 出生年份 FROM students;
SELECT stu_name,2024-stu_age AS stu_birth_year FROM students;
//去重并查询 DISTINCT 去重
SELECT DISTINCT stu_age FROM students;
//排序(升序,降序)ORDER BY 排列
SELECT * FROM students ORDER BY stu_age;//没写升序降序 默认升序
//升序 ASC
SELECT * FROM students ORDER BY stu_age ASC;
//降序 DESC也可以查表结构
SELECT * FROM students ORDER BY stu_age DESC;
//多字段排序 先排序性别 再排序年龄
SELECT * FROM students ORDER BY stu_gender ASC,stu_age DESC;
区间查询:
BETWEEN AND 在...之间
//查询年龄在18到29之间的数据
SELECT * FROM students WHERE stu_age BETWEEN 18 AND 29;
//查询年龄不在18到29之间的数据
SELECT * FROM students WHERE stu_age NOT BETWEEN 18 AND 29;
//查询性别为女并且年龄小于25岁的数据
SELECT * FROM students WHERE stu_gender='女' AND stu_age<25;
//查询性别为男或者年龄大于25岁的数据
SELECT * FROM students WHERE stu_gender='男' OR stu_age>25;
模糊查询:
LIKE 类似于百度搜索
//查询名字中有 张 字的数据
SELECT * FROM students WHERE stu_name LIKE '%张%';
//查询名字中最后一个字为 三 字的数据
SELECT * FROM students WHERE stu_name LIKE '%三';//查第一个字为张 LIKE '张%'
//查询名字中第二个字为 三 字的数据
SELECT * FROM students WHERE stu_name LIKE '_三%';
分组查询:
GROUP BY 分组(后面只能跟一个列名)
//分组查询 先对性别进行分组 然后统计每组数据个数
SELECT stu_gender,COUNT(stu_num) FROM students GROUP BY stu_gender;
//分组查询 先对性别进行分组 然后计算每组的平均年龄
SELECT stu_gender,AVG(stu_age) FROM students GROUP BY stu_gender;
//分组查询 先对年龄进行分组 再统计各组人数 还可以对最终的结果进行排序
SELECT stu_age,COUNT(stu_num)FROM students GROUP BY stu_age ORDER BY stu_age;
//分组查询 先对年龄进行分组 再统计男生的人数 还可以对最终的结果进行排序
SELECT stu_age,COUNT(stu_num)FROM students WHERE stu_gender='男' GROUP BY stu_age ORDER BY stu_age;
//先查询所有数据 按年龄分组 然后统计每组男生人数
//再筛选当前组人数大于1的组 HAVING 拥有 COUNT(*)>1 按年龄升序显示
SELECT stu_age,COUNT(*)FROM students WHERE stu_gender='男' GROUP BY stu_age HAVING COUNT(*)>1 ORDER BY stu_age;//这里不能使用WHERE
WHERE是筛选分组前的条件 HAVING是筛选分组后的条件
优先级:WHERE > GROUP BY > HAVINE > ORDER BY
分页查询:
LIMIT
//第一页 分页查询每页两条数据
SELECT * FROM student LIMIT 0,2; // LIMIT (1-1)*每页有几条数据,每页有几条数据;
//第二页
SELECT * FROM student LIMIT 2,2; //(2-1)*2
两表连接查询:
数据表的别名:(开发常用)
SELECT s.*,c.class_name FROM students s INNER JOIN classes c ON s.cid=c.class_id;
内连接查询:
内连接查询关键字 INNER JOIN 如果不加其他条件查询是没有意义的 需要添加条件查询
//使用WHERE作为过滤条件连接查询 效率很低
//WHERE 先生成笛卡尔积 再从笛卡尔积中过滤数据
SELECT * FROM students INNER JOIN classes WHERE students.cid=classes.class_id;
//使用ON作为过滤条件连接查询 INNER JOIN 一般都匹配ON使用
//ON 先判断连接条件是否成立 如果成立两张表的数据进行组合生成一条结果记录
SELECT * FROM students INNER JOIN classes ON students.cid=classes.class_id;
左连接:
//左连接LEFT JOIN 显示左表所有数据 如果在右表中存在与左表记录 满足匹配条件的数据 则进行匹配 如果右表中不存在匹配记录 则显示null
SELECT * FROM students LEFT JOIN classes ON students.cid=classes.class_id;
右连接:
//右连接 RIGHT JOIN
SELECT * FROM students RIGHT JOIN classes ON students.cid=classes.class_id;
子查询:
//先进行一次查询 第一次查询的结果作为第二次查询的源/条件 第二次查询是基于第一次查询的结果来进行的
//查询班级名称为Java2024 班级中的学生信息(只知道班级名称 不知道班级id)
SELECT class_id FROM classes WHERE class_name='Java2024';
//class_id 已经被记录
SELECT * FROM students WHERE cid=1;
//子查询
SELECT * FROM students WHERE cid=
(SELECT class_id FROM classes WHERE class_name='Java2024');
//子查询返回多个值 方法1 UNION 多行单列(查询所有Java班级中的学生信息)
SELECT class_id FROM classes WHERE class_name LIKE '%Java%';
SELECT * FROM students WHERE cid=1
UNION
SELECT * FROM students WHERE cid=2
UNION
SELECT * FROM students WHERE cid=3
//子查询返回多个值 方法2 IN 多行单列(查询所有Java班级中的学生信息)
SELECT * FROM students WHERE
cid IN(SELECT class_id FROM classes WHERE class_name LIKE '%Java%');
//拓展 查询cid=1的班级中 性别为男的同学
SELECT * FROM(SELECT * FROM students WHERE cid=1) t WHERE t.stu_gender='男';
聚合函数:
//查询表中数据总条数 COUNT 计数(括号中不能为空 一般放* 或者放列名)
SELECT COUNT(*)AS 总条数 FROM students;
//查询总数据中 有多少数据为男性
SELECT COUNT(*)AS 总条数 FROM students WHERE stu_gender='男';
//查询最大年龄 MAX
SELECT MAX(stu_age)AS 最大年龄 FROM students;
//查询最小年龄 MIN
SELECT MIN(stu_age)AS 最大年龄 FROM students;
//计算总和(年龄)SUM
SELECT SUM(stu_age)AS 年龄总和 FROM students;
//计算数据男性年龄总和
SELECT SUM(stu_age)AS 年龄总和 FROM students WHERE stu_gender='男';
//计算平均值(年龄)AVG
SELECT AVG(stu_age)AS 年龄平均值 FROM students;
//计算数据女性年龄平均值
SELECT AVG(stu_age)AS 年龄平均值 FROM students WHERE stu_gender='女';
日期函数:
//获取当前系统时间
SELECT NOW();
SELECT SYSDATE();
INSERT INTO students(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq,stu_enterence)
VALUES('20241001','张三','男',23,'18624170526','4880085218','2024-07-28 9:29:29');//正常的
//通过NOW()获取当前时间
INSERT INTO students(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq,stu_enterence)
VALUES('20241003','王五','男',25,'18624170528','4880085220',NOW());
//通过SYSDATE()获取当前时间
INSERT INTO students(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq,stu_enterence)
VALUES('20241002','李四','女',24,'18624170527','4880085219',SYSDATE());
字符串函数:
//拼接 使用CONCAT()将数据拼接后查询
SELECT CONCAT(stu_name,'-',stu_age) FROM students;
//转换 将字段的值转换为大写UPPER()
SELECT UPPER(stu_name)FROM students;
//转换 将字段的值转换为小写LOWER()
SELECT LOWER(stu_name)FROM students;
//截取 从指定列中截取部分显示 SUBTRING(列名,从第几位开始,截取几位)
SELECT stu_name,SUBSTRING(stu_tel,8,4)FROM student;
使用代码:
//使用或切换数据库(常用)
USE School;
//自动增长代码 一般加在主键后 建表时可以额外定义一个与数据无关的列做id 便于以后删改查
AUTO_INCREMENT //只保证唯一性 不保证连续性
CREATE TABLE stu(stu_id INT PRIMARY KEY AUTO_INCREMENT,stu_name VARCHAR(6) NOT NULL,stu_remark VARCHAR(100)
);
// 如果自动增长的数据因为删除 导致不连续 想恢复成连续状态 TRUNCATE
TRUNCATE TABLE students;//删除表中的数据 让自动增长从1开始
约束:
约束:限制 保证数据有效性 完整性 正确性
常见约束:
NOT NULL(非空) 数据不能为空
UNIQUE(唯一) 数据不能重复
FOREIGN KEY(外键) 两表之间的关联关系
PRIMARY KEY(主键) 数据不能为空也不能重复
主键:一般用在表的第一例 表里可以有多个主键
添加主键的第一种方式:
CREATE TABLE IF NOT EXISTS books (
book_isbn CHAR(4)PRIMARY KEY,
book_name VARCHAR(11)NOT NULL,
book_author VARCHAR(6)NOT NULL
);
//删除主键
ALTER TABLE students DROP PRIMARY KEY;
//修改 建表后添加主键约束 stu_num CHAR(4) 必须与表一致
ALTER TABLE books MODIFY book_isbn CHAR(4) PRIMARY KEY;
联合主键:
将数据表中的多列组合在一起设置成主键
外键约束:
数据于数据的四种关系:一对一,一对多,多对多,多对一
外键关联主键(顺序不能乱)
外键关联主键 类型一般为INT 如果为CHAR或者其他类型 数据类型与长度必须一致
CONSTRAINT KF_大写的外键表名_大写的主键表名 FOREIGN KEY(外键列名)
REFERENCES 表名(主键列名);
//在建表时关联主键
CREATE TABLE IF NOT EXISTS classes(class_id INT PRIMARY KEY AUTO_INCREMENT,class_name VARCHAR(40) NOT NULL,class_remark VARCHAR(200)
);
CREATE TABLE IF NOT EXISTS students(stu_num CHAR(8) PRIMARY KEY,stu_name VARCHAR(20) NOT NULL,stu_age INT NOT NULL,stu_gender CHAR(2) NOT NULL,cid INT,CONSTRAINT KF_STUDENTS_CLASSES FOREIGN KEY(cid) REFERENCES classes(class_id);
);
//建表后关联主键
ALTER TABLE students ADD CONSTRAINT KF_STUDENTS_CLASSES FOREIGN KEY(cid) REFERENCES students(class_id);
//删除外键约束
ALTER TABLE students DROP FOREIGN KEY KF_STUDENTS_CLASSES;
//级联关系
副表必须与主表里面没有关联的时候才可以删除
必须先解决关联 先删除副表中的数据 再删除主表中的数据
//在添加外键时 设置级联修改和级联删除
//1.先删除原来的外键
ALTER TABLE students DROP FOREIGN KEY FK_STUDENTS_CLASSES;
//2.重新添加外键 并设置级联修改和级联删除
ALTER TABLE students ADD CONSTRAINT FK_STUDENTS_CLASSES FOREIGN KEY(cid)
REFERENCES classes(class_id) ON UPDATE CASCADE ON DELETE CASCADE;
关键字:
WHERE(子句)后面跟条件 用于筛选满足特定的添加的数据 进行删除修改查询
数值类型:
大小 范围 类型 其他
整数型:
tinyint 1byte 有符号-128~127 无符号0~255 (特小型整数)(年龄)
smallint 2byte (16bit) -32768~32767 D-65535(小整数型)
mediumint 3byte -2^31~2^31-1 0~2^32-1 (中型整数)
int/integer 4byte (整数)
bigint 8byte (大型整数)
小数型:
float 4byte (单精度)
double 8byte (双精度)
decimal 第一参数+2 写法:decimal(10,2)表示数值一个有10位,小数位2位
字符串:
char 0~255 定长字符串 最多255个字符 当我们去指定数据表字段char 10个长度 没用到 会补\u000
varchar 0~65536 可变长度字符串 65536
二进制字符串:tinyblob(0~255),blob(0~65535),mediumbolb(0~1677215),longblob (0~4294967295)
文本数据(字符串):tinytext(0~255),text(0~65535),mediumtext(0~1677215),longtext(0~4294967295)
日期类型:
date 2022-02-26
time 21:56:50
year 2022
datetime 2022-02-26 21:56:59
timestamp 20220226 215659(时间戳)
条件关系运算符:
= 等于
!= 不等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
事物:
转帐案例:
CREATE DATABASE IF NOT EXISTS day06;
USE day06;
CREATE TABLE IF NOT EXISTS account(id INT PRIMARY KEY,uname VARCHAR(20) NOT NULL UNIQUE,money DOUBLE
);
INSERT INTO account(id,uname,money)VALUES(1,'张三',1000);
INSERT INTO account(id,uname,money)VALUES(2,'李四',1000);
SELECT * FROM account;
//mysql事物自动提交
//设置事物为手动提交
SET @@autocommit=0;//设置手动提交
SELECT @@autocommit;
UPDATE account SET money=money-100 WHERE uname='张三';
UPDATE account SET money=money+100 WHERE uname='李四';
ROLLBACK;//回滚
COMMIT;//手动永久提交 不可以回滚
JAVA连接数据库
JDBC
public class MainTest {public static void main(String[] args) {//jdbcConnection conn = null;Statement st = null;ResultSet rs = null;//jdbc必须提供驱动 jar包try {//注册驱动 com.mysql.jdbc.DriverDriverManager.registerDriver(new com.mysql.jdbc.Driver());//Class.forName("com.mysql.jdbc.Driver");//建立连接 协议+访问的数据库名字 用户名 root 用户名密码 123456conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?verifyServerCertificate=false&useSSL=false", "root", "123456");//跟数据库打交道 Statement 这个对象一定要写st = conn.createStatement();//执行查询st.executeQuery() //执行增删改 st.executeUpdate()String sql ="select * from t_stu";rs = st.executeQuery(sql);//返回一个结果集 是一块数据//需要一条一条的数据 要遍历while (rs.next()) {int id = rs.getInt("id");String uname = rs.getString("uname");String pwd = rs.getString("pwd");System.out.println("id=" + id + "\tuname=" + uname + "\tpwd=" + pwd);}} catch (SQLException e) {throw new RuntimeException(e);}finally{if(rs!=null){try {rs.close();} catch (SQLException e) {throw new RuntimeException(e);}}if(st!=null){try {st.close();} catch (SQLException e) {throw new RuntimeException(e);}}if(conn!=null){try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}}
相关文章:
木舟0基础学习Java的第二十一天(数据库,MySQL,SQLyog)
数据库 数据库:按照数据结构来组织 存储数据的厂库 数据管理系统(Database Management System,DBMS):一套操作和管理数据库的软件 用于简历 使用 维护数据库 关系型数据库:采用关系模型作为数据组织方式 逻辑结构是一张二维表 由行和列组成…...

python-鼠标绘画线条程序
闲来无聊简单编写了一个绘图小程序。 主要思路 主要是基于Python中的内置模块turtle编写的,简单扩展了一下,通过绑定事件能够达到鼠标绘制、删除、存储已经绘制图案的线条这几个功能。 路径结构 -draw- define.py- main.py- myturtle.py使用 点住鼠…...

【Python实战】如何优雅地实现 PDF 去水印?
话接上篇,自动化处理 PDF 文档,完美实现 WPS 会员功能 小伙伴们更关心的是如何去除 PDF 中的水印~ 今天,就来分享一个超简单的 PDF 去水印方法~ 1. 原理介绍 在上一篇中,我们介绍了如何将 PDF 文档转换成图片,图片…...

Keysight(原Agilent) E4980AL 精密 LCR 表特性与技术指标
Keysight(原Agilent) E4980AL 精密 LCR 表为基础 LCR 表树立了行业标准,可在多个频率范围内提供更佳的精度、速度和通用性。E4980AL 结合了种类繁多的附件,适用于一般研发和生产环境中的各种元件和材料测量。也可通过频率升级而提升投资回报率。 Keysig…...
【运维】Redis主从复制 配置
【运维】Redis主从复制 配置 主库配置Master # 默认情况下,是 启用保护模式的,其他主机的客户端无法连接到 Redis 。当想要其他主机的客户端连接到 Redis 时,需要修改为 no 。protected-mode no 从库配置Slave # replicaof [master主机ip] …...
C++ 微积分 - 求导 - 自动微分(Automatic Differentiation)
C 微积分 - 求导 - 自动微分(Automatic Differentiation) flyfish 自动微分(Automatic Differentiation,简称 AD)是一种用于精确计算函数导数的技术。它结合了符号微分的准确性和数值微分的效率。自动微分的核心思想…...
面试题-每日5道
26.在 Queue 中 poll()和 remove()有什么区别? 相同点:都是删除第一个元素并返回。 不同点:如果没有元素poll()会返回null,而remove()会抛出NoSuchElementException异常 27.哪些集合类是线程安全的? Vector,Stock,Hashtable都是线程安全的&a…...

STM32卡死、跑飞如何调试确定问题
目录 前言 一、程序跑飞原因 二、调试工具 2.1Registers工具 2.2 Memory工具 2.3 Disassembly工具 2.4 Call Stack工具 三、找到程序跑飞位置 方式一、 方式二、 前言 我们初学STM32的时候代码难免会出现疏忽,导致程序跑飞,不再正常运行&#…...

代理模式和Spring MVC
Spring是一个分层的轻量级的开源Java框架。核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程) AOP 面向切面 AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想&#x…...

深入理解Vue slot的原理
文章目录 前言为什么需要插槽作用域插槽插槽的原理总结 前言 插槽是Vue中一个重要的特性,它有很多种用法:默认插槽、具名插槽、作用域插槽。尤其作用域插槽,还有一堆特性,比如解构prop,解构prop的时候还可以进行属性名…...
git fetch作用与用法
目录 git fetch作用 git fetch用法 git fetch作用 git fetch 命令在 Git 版本控制系统中扮演着重要的角色。其主要作用是从远程仓库获取最新版本的项目文件,但不会自动合并或修改你当前的工作。这意味着,使用 git fetch 后,你需要手动合并…...

pycharm如何查看git历史版本变更信息
通过名字查看不同版本 查看版本不同地方...
【2.2 python中的变量】
2.2 python中的变量 在Python中,变量是存储数据值的容器。Python是一种动态类型语言,这意味着你不需要在声明变量时指定变量的类型;Python会根据你赋给变量的值自动确定其类型。下面我将详细介绍Python中的变量,包括保留字&#…...
Python软体中找出一组字符串的最长公共前缀:算法与实现
Python软体中找出一组字符串的最长公共前缀:算法与实现 在处理字符串数据时,寻找多个字符串之间的共同特征是一个常见的需求。特别是在文件名、URL、或其他文本数据中,找到最长公共前缀(Longest Common Prefix, LCP)可以帮助我们进行更高效的搜索和分类。本文将详细介绍如…...
git lfs使用(huggingface下载大模型文件)-教程记录
写的比较清楚的教程,用于之后有需求时查找用: https://blog.csdn.net/flyingluohaipeng/article/details/130788293...

1. 什么是操作系统
文章目录 1.1 从功能上来看操作系统1.2 硬件资源 1.1 从功能上来看操作系统 对用户来说,操作系统是一个控制软件,可以用来管理应用程序,它可以限制不同的程序来占用的资源。对内部的软件来说,操作系统是一个管理外设和分配资源的…...

数据科学 - 数据预处理 (数据清洗,结构化数据)
1. 前言 数据清洗与结构化数据在数据分析和机器学习项目中扮演着至关重要的角色。随着大数据时代的到来,数据的质量、准确性和可用性成为决定项目成功与否的关键因素。 数据清洗提高数据质量,保证数据集的一致性;促进数据分析与挖掘…...

基于SpringBoot+Vue的校车调度管理系统(带1w+文档)
基于SpringBootVue的校车调度管理系统(带1w文档) 基于SpringBootVue的校车调度管理系统(带1w文档) 如今,因为无线网相关技术的快速,尤其是在网上进行资源的上传下载、搜索查询等技术,以及信息处理和语言开发技术的进步,同时编程语…...

基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划(MATLAB代码)
一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…...

opencascade AIS_Trihedron源码学习 绘制三轴坐标系
opencascade AIS_Trihedron 前言 //! 创建一个可选择的三轴坐标系 //! 该三轴坐标系包括一个原点,三个轴线和三个标签。 //! 标签的默认文本为 “X”, “Y”, “Z”。 //! 可以更改原点和任意轴线的颜色,箭头和标签的颜色也可以改变。 //! 可视化呈现可…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...