JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)
本文用于检验学习效果,忘记知识就去文末的链接复习
1. 网络基础
1.1 计网基础
区分设备:IP地址
区分网络:网络地址
网络互联:路由器
主机上进程间通信:端口
http是常用的协议,基于TCP协议
TCP VS UDP
- TCP
- 有连接(握手,建立连接)
- UDP
- 无连接(不建立连接),快(数据丢失不会重传)
1.2 Socket技术
Socket有什么用?
- 可实现 两台计算机上进程 之间的通信(通过网络)
复习
- Java创建Socket对象和Server对象
- Socket通信过程(协议,域名,端口)
- 用Socket传输数据(字节,字符)
- Socket传输文件(字节)
- Socket访问浏览器(接收数据是一堆字符,有格式)
2. 数据库基础
什么是数据库?
- 数据的有序集合。数据放在数据表中,便于管理数据。
常见数据库
- MySQL
- Microsoft SQL Server
- Oracle
常见数据库管理软件
- Navicat
- DataGrip
常见配置
- 字符集(支持中文):utf8mb4(utf8只有3字节,有时会出问题)
- 排序规则:utf8mb4_general-ci
2.1 安装一个数据库
一般用MySQL学习
- 本地安装(下载安装包,在本地安装)
- 服务器安装(在服务器上安装MySQL,宝塔面板等,可通过公网IP访问)
- 在线购买(在阿里云,腾讯云上购买云数据库产品)
2.2 数据模型
- 实体-联系模型(Entity-Relationship Model)(E-R MODEL)
- ER图(E-R Diagram)
实体
- 属性
联系
- 1:1
- n:1
- n:m
2.3数据库的规范化
键
- 主键
- 外键
范式(具体定义看书)
(逐层递进,减少数据库间的冗余信息和依赖关系)
- 第一范式(1NF):每一列都不可拆分
- 如:“信息”这个列太模糊,可继续细分
- 第二范式(2NF):表中必须有主键,其他属性完全依赖主键
- 如:“学号”作为主键
- 第三范式(3NF):所有属性不传递依赖于主键
- 处理:分表,消除传递依赖
- BCNF: 每个表只存储一种信息,没有任何冗余信息
2.4 SQL语句
增查改删CRUD(Create/Retrive/Update/Delete)
SQL数据类型
char(n):可存储固定长度为n的字符串
varchar(n):可存储任意数量字符串
存储数字
- smallint
- int
- bigint
- float
- double
存储时间
- date:日期
- time:时间
- year:年份
- datetime:日期+时间
2.4.1 数据库定义语言(Data Definition Language,DDL)
--创建数据库
CREATE DATABASE 数据库名
--删除数据库
DROP DATABASE 数据库名
--创建表
CREATE TABLE
--修改表
ALTER TABLE
--删除表
DROP TABLE
创建数据库study
CREATE DATABASE study;
删除数据库study
DROP DATABASE study;
创建一张表
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT
);
查询数据
查看USER表中的tHost,tUSer列
SELECT tHost,tUSer FROM USER;
修改数据
alter
如果你有一个名为 students 的表,并且你想在这个表中添加一个名为 age 的整数列,你可以使用以下命令:
ALTER TABLE students
ADD age INT;
CONSTRAINT
列级约束条件
- 主键Primary Key
- 外键Foreign Key
- 唯一unique
- 检查check
- 默认default
- 非空/空not null/null
表级约束条件
- 主键Primary Key
- 外键Foreign Key
- 唯一unique
- 检查check
2.4.2 数据操纵语言(Data Manipulation Language,DML)
--插入数据
INSERT INTO
--修改数据
UPDATE 表名 SET 列名=值,... WHERE 条件
--删除数据
DELETE FROM 表名
DELETE FROM 表名 WHERE 条件
2.4.3 数据库查询语言(Data Query Language,DQL)
-- 指定查询某一列数据
SELECT 列名[,列名] FROM 表名
-- 会以别名显示此列
SELECT 列名 别名 FROM 表名
-- 查询所有的列数据
SELECT * FROM 表名
-- 只查询不重复的值
SELECT DISTINCT 列名 FROM 表名
--添加where字句来限定查询目标
SELECT * FROM 表名 WHERE 条件
--将查询结果排序SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 ASC|DESC
常用查询条件(WHERE中使用)
- =,>,<,>=,<=,!=
- 是否在集合中:
in
,not in
- 模糊匹配:
like
,not like
- 多重连接:
and
,or
,not
排序(默认升序)
- ASC:升序
- DESC:降序
聚集函数
count([distinct]*)
统计所有的行数(distinct表示去重)count([distinct]列名)
统计某列的值总和sum([distinct]列名)
求一列的和(注意必须是数字类型的)avg([distinct]列名)
求一列的平均值(注意必须是数字类型)max([distinct]列名)
求一列的最大值min([distinct]列名)
求一列的最小值
分组/分页查询
- 分组:
GROUP BY
- 分页:
HAVING
- 限制数量:
LIMIT
--分组
SELECT sum(*) FROM 表名 WHERE 条件 GROUP BY 列名
--分页
SELECT sum(*) FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 约束条件
--限制查询的数量,只取前n个结果
SELECT * FROM 表名 LIMIT 数量
多表查询
--默认笛卡尔积
SELECT * FROM 表1, 表2
SELECT * FROM 表1, 表2 WHERE 条件
--自身连接,要起别名
SELECT * FROM 表名 别名1, 表名 别名2
连接
- 外连接
- 内连接
inner join
:交集 - 左连接
left join
:左边都要有,右边缺失值为空 - 右连接
right join
嵌套查询
将一个查询的结果作为另一个查询的条件
SELECT * FROM 表名 WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 条件)
2.4.4 数据库控制语言(Database Control Language,DCL)
--创建用户
CREATE USER 用户名 identified by 密码;
--登录
login -u 用户名 -p
--授权(授权后才可看数据库)
grant all|权限1,权限2...(列1,...) on 数据库.表 to 用户 [with grant option]--创建视图
CREATE VIEW 视图名称(列名) as 子查询语句 [WITH CHECK OPTION];
--删除视图
drop view apptest-- 创建索引
CREATE INDEX 索引名称 ON 表名 (列名)
-- 查看表中的索引
show INDEX FROM student
--删除索引
drop index 索引名称 on 表名--创建触发器
CREATE TRIGGER 触发器名称 [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON 表名/视图名 FOR EACH ROW DELETE FROM student WHERE student.sno = new.sno
--查看触发器
SHOW TRIGGERS
--删除触发器
DROP TRIGGER 触发器名称--查看数据库引擎
SHOW ENGINES;begin; #开始事务
...
rollback; #回滚事务
savepoint 回滚点; #添加回滚点
rollback to 回滚点; #回滚到指定回滚点
...
commit; #提交事务
-- 一旦提交,就无法再进行回滚了!
视图(本质就是一个查询结果)
- 打开视图时,可看到期待的查询结果。
- 是个虚表,不是真实存在的表
索引(快速查询)
- 类似Hash表,可快速定位元素的位置
触发器
- 在某种条件下会自动触发,在
select
/update
/delete
时,会自动执行我们预先设定的内容,触发器通常用于检查内容的安全性,相比直接添加约束,触发器显得更加灵活。 - 触发器所依附的表称为基本表
- new表/old表
事务
- 把一系列SQL操作整理起来,变成一个整体
- ACID特性
- 原子性
- 一致性
- 隔离性
- 持久性
函数&存储过程
- 它们能够捆绑一组SQL语句运行,并且可以反复使用,大大提高工作效率。
3. java与数据库
3.1 JDBC(Java Data Base Connectivity)
- 用java连接数据库,操作数据库
- 定义了接口(规范),接口由数据库实现
- 使用步骤
- 导入依赖(jar包)
- 用JDBC连接数据库
- 操作数据库
JDBC中一些类
- Driver Manager
- Connection
- Statement:用于执行SQL
操作
- DML操作
- DQL操作
批处理(statement.addBatch())
查询结果映射对象
- 把查询结果传进构造函数
- 反射
SQL注入攻击
- 用户在输入数据时,破坏原有的SQL语句,恶意操作数据库
- 可限制用户输入一些SQL语句关键字,但关键字太多,这方法不太好
- 用
PrepareStatement
执行SQL命令,可解决以上问题- 需要给出SQL语句格式
管理事务
con.setAutoCommit(); //关闭自动提交后相当于开启事务。
// 这里是SQL语句
con.commit();或 con.rollback();
3.2 Lombok
- 自动生成set/get/构造函数
- 编译时处理代码(修改语法树),加上函数
使用方法
- 导入jar包(将jar文件拖入idea,右键-添加为项目)
- 在IDEA中下载插件
标签
- java中的goto
lombok注解
- 减少样板代码,使得 Java 类更加清晰和简洁。
- 在类前加注解,在 方法/属性 前加注解
- 可定义访问权限
- AccessLevel.PUBLIC
- AccessLevel.PRIVATE
- @Setter
- @Getter
- @ToString
- exclude:省略一些内容
- of:留下一些内容(与exclude相反的)
- callsuper:toString中调用父类的toString方法
- 调用get方法,获取属性
- doNotUseGetters:不用get方法,直接用属性
- onlyExplicitlyIncluded:是否包含全部字段
- @ToString.Include:指定要包含的字段
- rank:越大,等级越高
- name:别名
- @EqualsAndHashCode
- @AllArgsConstructor:有所有参数的构造函数
- staticName:静态函数,返回一个对象
- force:给final类型变量一个默认值
- @NoArgsConstructor:无参数的构造函数
- @RequiredArgsConstructor:只构造需要构造的属性
- final类型变量
- @Data
- 包含@Setter,@Getter,@RequiredArgsConstructor,@ToString,@EqualsAndHashCode
- 不建议有继承关系,因为equal方法结果可能与预期不符
- @Value
- 不会生成setter,成员属性都是final的
- @SneakyThrows:自动生成try-catch代码块
- Exception.class
- IOException.class
- @Cleanup:自动调用close(如IO流,用完要close)
- @Builder:快速生成建造者模式
- @Builder.Default:指定默认值
- @Builder.ObtainVia:指定默认值的获取方式
- setterPrefix:方法名前加前缀
- .Default:属性默认值
- .ObtainVia:在Builder过程中通过指定方法,指定属性值
- toBuilder:把对象变回Builder
getter中懒加载有什么用在编程中,lazy 属性或特性通常用于实现懒加载(lazy loading)模式。
懒加载意味着对象的某些属性或资源的初始化会延迟到它们真正被需要时才进行,而不是在对象创建时立即进行。
这种策略对于优化性能非常有用,特别是在处理计算密集型操作或需要消耗大量资源的操作时。在 getter 上下文中,lazy 属性可以确保当你第一次访问某个属性时,其背后的计算或初始化操作才会执行,
并且其结果会被缓存起来,以便后续访问时直接返回,而不需要重新计算或初始化。
3.3 Mybatis
JDBC还是不够好用,用Mybatis可更方便地操作数据库
知道什么是XML
- XML语法跟HTML很像。里面写的是配置
配置
- mybatis-config.xml
- TestMapper.xml
- pojo文件/entity文件中创建java类
- 写selectList
- 不够方便,怎么办?
- 用接口
xxxMapper.java
,与TestMapper.xml相关联
修改xml,切换数据库环境
数据源
别名
增删改查
- 读取到数据后,可映射为实体类或map
- 通过resultMap设定映射规则
- 通过constructor设定要调用的构造函数
自动映射:首字母小写,后面的驼峰
类中有多个构造方法【容易出问题】
- 只能有一个构造方法(有条件的,多了会出问题)
- 部分参数被构造方法使用,实体类没有被正确构建
按学号查找信息
- select * from student where sid = #{sid}
插入学生信息
- insert student(name,sex) values(#{name}, #{sex})
“一对多”
- resultMap
- collection
“多对一”
-resultMap
- association
事务
动态SQL
- if
- chooose(when, otherwise)
- trim(where, set)
- foreach
缓存机制
何时清空缓存?
- 插入操作后
- 会话结束后
缓存分级
- 优先级:二级----一级—数据库(cache—主存—硬盘)
- 一级缓存(对应session)
- 二级缓存(对应mapper)(需要启用)
解决缓存机制导致的不一致问题
- 关闭缓存(但存取数据时会有额外开销)
使用注解开发
- 在mybatis-config.xml中的< mappers >中注册
- 单独注册< mapper>
- 批量注册< packge >
- @select等
- @many/@one
- @ConstructorArgs
3.4 JUnit(单元测试)
测试某个小功能时,没必要重新启动整个项目
使用步骤
- 导入jar包
- 编写测试用例,加注解
- @Test
- 断言Assert.
- @Before:前置操作(@Test执行前,会执行这个)
- 有些前置操作只需要一次,怎么办?(juint5)
- @After
JUL日志系统(JDK提供的)
- 使用流程
- 获取日志打印器
- 调用info,输出信息
日志级别(高到低)
- SEVERE:严重错误
- WARNING:某些警告
- INFO:(默认)常规消息(该等级以下默认不会被打印)
- CONFIG
- FINE
- FINER
- FINEST
我们想:开发时输出所有日志,上线后正常输出日志
输出所有日志
- 修改日志级别
- 不使用默认日志处理器
- 使用自定义日志处理器
可以用文件处理器打印日志
可以添加过滤器,不让某些日志显示
了解Properties配置文件
- 常见操作
- Properties类
- properties.load
- properties.store
- hashtable VS hashmap
可用lombok快速开发日志
- @Log
Mybatis也有日志系统
- 启用
- 读取配置
4. Maven(管理项目)
Maven能管理jar包(手动导入太麻烦)
在IDEA中
- 创建maven项目
- 配置maven路径,
IDEA的设置中
- 设置默认maven配置,在
C:\Users\用户\AppData\Roaming\JetBrains\IntelliJIdea2023.3\options
如何导入jar包
- 在官网找到插入依赖的xml
- 插入到pom中
依赖属性
- type
- scope:依赖的作用域
- compile:编译,测试,运行时有效
- provided:编译,测试时有效(lombok)
- runtime:运行,测试时有效
- test:测试时有效(JUnit)
- optional
- exclusions
从本地找依赖
<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-local-lib</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/my-local-lib-1.0.jar</systemPath> </dependency>
</dependencies>
可选依赖
<optional>true</optional>
排除依赖
<exclusions><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId></exclusion>
</exclusions>
依赖的继承关系
- 父项目中的
<dependencies>
,会被子项目直接继承 - 父项目中的
<dependencyManagement>
,在子项目中引入后,也可继承(不用写版本号) - 子项目间也可互相导入
maven常用命令
clean
:清除target中的文件validate
:验证项目的可用性compile
:编译项目install
:将当前项目安装到本地maven仓库(之后可被其他项目导入)verify
:按顺序执行默认生命周期阶段(validate,compile,package)test
:执行test目录下的所有测试用例package
:把项目打包为jar包(默认不含依赖)- pom中添加插件,可将依赖也一并打包
deploy
:发布命令到本地仓库和远程仓库site
:生成当前项目的发布站点
参考
https://www.itbaima.cn/document/ggwwj09j2vkfftvd
https://www.bilibili.com/video/BV1CL4y1i7qR
相关文章:
JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)
本文用于检验学习效果,忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备:IP地址 区分网络:网络地址 网络互联:路由器 主机上进程间通信:端口 http是常用的协议,基于TCP协议 TCP VS U…...

【HBase】
什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次(数据…...
Vue3:使用Pinia存储、读取、修改数据
一、存储数据 Pinia插件中,存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…...

基于 Quartz.NET 可视化任务调度平台 QuartzUI
一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录…...

前端三剑客 —— CSS (第三节)
目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…...
C# 系统学习(异步编程)
在C#中,异步编程是一种优化程序性能的关键技术,特别是在处理I/O密集型操作(如网络请求、数据库查询、文件读写等)时,能够有效避免由于长时间等待而导致的线程阻塞,从而提高应用的响应速度和资源利用率。asy…...

前端工程师————CSS学习
选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括:标签选择器,类选择器,id选择器,通配符选择器标签选择器 类选择器 语法:.类名{属性1: 属性值;} 类名可以随便起 多类名使用方式&am…...

C# 登录界面代码
背景 MVVM 是一种软件架构模式,用于创建用户界面。它将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离开来,以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…...
点云的Python均值采样
一、代码 Python import numpy as np import open3d as o3ddef mean_sampling(point_cloud, num_samples=None, depth=None, method=knn, k=10):"""对点云进行均值下采样。:param point_cloud: Open3D PointCloud对象:param num_samples: (仅当method=knn时使…...

xss-labs 11-13通关记录
前言 最近复习xss知识,整理一下xss的绕过思路。 level11 观察测试: 1.四个隐藏参数标签 2.全部get传参一遍发现t_sort可赋值,使用的是get传参 3.针对t_sort测试过滤的字符 t_sort< > & ; " 检测到他除了<>,别的全部过滤。 因为…...

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…...

技术揭秘:如何打造完美互动的充电桩硬件与服务平台?
充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述: 前端: 位于图像的顶部,颜色为浅绿色。用户服务端: 紧邻前端,颜色为淡黄色。设备服…...

【Django学习笔记(四)】JavaScript 语言介绍
JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…...
IO和NIO的主要区别在哪里?
Java 中的 IO(输入/输出)和 NIO(新输入/输出)都是处理输入和输出操作的方式,它们的主要区别在于如何处理数据的读写。 阻塞与非阻塞: IO是阻塞的,这意味着当一个线程调用read()或write()时,该线…...

爬虫部署平台crawlab使用说明
Crawlab 是一个基于 Go 语言的分布式网络爬虫管理平台,它支持 Python、Node.js、Jar、EXE 等多种类型的爬虫。 Crawlab 提供了一个可视化的界面,并且可以通过简单的配置来管理和监控爬虫程序。 以下是 Crawlab 的一些主要优点: 集中管理&am…...

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)
问题: 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考: 是不是需要引入uni.scss ? 答案不需要 uni.scss是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…...

Redis的5大常见数据类型的用法
上一篇文章我们讲了Redis的10大应用场景,这一篇文章就针对Redis的常用数据结构进行一个说明,通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时,不同数据类型对应的不同数据结构,如下就对5大常用的数据类型进行…...

刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢?
刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢? ——小品《生日快乐》(中5)的台词 (接上) 赵本山:噢!对对!那谁,老四,是…...

Unity之PUN实现多人联机射击游戏的优化(Section 2)
目录 🎮一、准备工作 🎮二、实现手雷投掷动作 🎮三、手雷投掷同步 💤3.1 photonView.RPC 🎮四、同步手雷伤害 这几周都给我布置任务了,最近可忙。现在终于有机会更新了,也谢谢大家的阅读&a…...

多叉树题目:N 叉树的层序遍历
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:N 叉树的层序遍历 出处:429. N 叉树的层序遍历 难度 4 级 题目描述 要求 给定一个 N 叉树的根结点 root \texttt{root} root…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...