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

Java实现数据库表中的七种连接【Mysql】

Java实现数据库表中的七种连接【Mysql】

  • 前言
  • 版权
  • 推荐
  • Java实现数据库表中的七种连接
    • 左外连接
    • 右外连接
    • 其他连接
  • 附录
    • 七种连接
    • SQL测试
    • Java测试
      • 转换方法
      • 类 Cla1
      • 类 Cla2
      • 类Cla3
  • 最后

前言

2023-8-4 16:51:42

以下内容源自《【Mysql】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

推荐

Java实现数据库表中的七种连接

左外连接

  /*** 左外连接* 计算*     SELECT cla1.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     LEFT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (Where cla2.id IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @param out 输出吗?* @return*/public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> leftJoin=new ArrayList<>();//左表遍历list1.forEach(c1->{//在右表中有没有找到AtomicBoolean flag= new AtomicBoolean(false);list2.forEach(c2->{//找到了if(c1.id.equals(c2.id)){//如果cla2.id is null,就不需要添加if (!isNull) {leftJoin.add(new Cla3(c1.id, c1.type, c2.name));}flag.set(true);}});//没有找到添加 右表属性 NULLif(!flag.get()){leftJoin.add(new Cla3(c1.id,c1.type,"null"));}});return leftJoin;}

右外连接

    /*** 右外连接* 计算*     SELECT cla2.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     RIGHT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (WHERE cla1.`id` IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @return*/public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> rightJoin=new ArrayList<>();//右表遍历list2.forEach(c2->{//在左表中有没有找到AtomicBoolean flag= new AtomicBoolean(false);list1.forEach(c1->{//找到了if(c1.id.equals(c2.id)){//如果cla1.id is null,就不需要添加if (!isNull){rightJoin.add(new Cla3(c2.id, c1.type,c2.name));}flag.set(true);}});//没有找到添加 左表属性 NULLif(!flag.get()){rightJoin.add(new Cla3(c2.id,"null",c2.name));}});return rightJoin;}

其他连接

外连接* 左外+右外* 右外+左外
内连接* 左外-左外ISNULL* 右外-右外ISNULL
外连接-内连接

附录

七种连接

MySQL笔记:第06章_多表查询

在这里插入图片描述

SQL测试

CREATE DATABASE cla;USE cla;CREATE TABLE cla1(`id` 	VARCHAR(10),`type` 	VARCHAR(10)
);CREATE TABLE cla2(`id` 	VARCHAR(10),`name` 	VARCHAR(10)
);INSERT INTO cla1 VALUES('22','cde');
INSERT INTO cla1 VALUES('11','abc');
INSERT INTO cla1 VALUES('44','cdef');
INSERT INTO cla1 VALUES('55','cdefg');INSERT INTO cla2 
VALUES
('11','name1'),
('22','name2'),
('33','name3'),
('44','name4'),
('aa','nameaa');#leftJoin 
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
*/#leftJoin isnull
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
55	cdefg	\N
*/#rightJoin 
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
*/#rightJoin ISNULL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
33	\N	name3
aa	\N	nameaa
*/#innerJoin leftBefore
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
INNER JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/#innerJoin rightBefore
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla2
INNER JOIN cla1
ON cla2.`id`=cla1.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/#outJoin leftBefore
#左1+右2
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
33	\N	name3
aa	\N	nameaa
*/#outJoin rightBefore
#右1+左2
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
55	cdefg	\N
*/

Java测试

转换方法


package test.algo;import test.algo.main2.Cla1;
import test.algo.main2.Cla2;
import test.algo.main2.Cla3;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;public class testJoin {static List<Cla1> claList1 = new ArrayList<>();static List<Cla2> claList2 = new ArrayList<>();static List<Cla3> list1 = new ArrayList<>();static List<Cla3> list2 = new ArrayList<>();public static void main(String[] args) {test();init(claList1,claList2);leftJoin(list1, list2,false,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}{id: 55, type: cdefg, name: null}*/leftJoin(list1, list2,true,true);;/*{id: 55, type: cdefg, name: null}*/rightJoin(list1, list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 33, type: null, name: name3}{id: 44, type: cdef, name: name4}{id: aa, type: null, name: nameaa}*/rightJoin(list1, list2,true,true);/*{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin(list1, list2,true,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}{id: 55, type: cdefg, name: null}{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin(list1, list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 33, type: null, name: name3}{id: 44, type: cdef, name: name4}{id: aa, type: null, name: nameaa}{id: 55, type: cdefg, name: null}*/innerJoin(list1,list2,true,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}*/innerJoin(list1,list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 44, type: cdef, name: name4}*/outJoin_InnerJoin(list1,list2,true,true);/*{id: 55, type: cdefg, name: null}{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin_InnerJoin(list1,list2,false,true);/*{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}{id: 55, type: cdefg, name: null}*/}/*** 初始两个表中的数据*/public static void test(){claList1.add(new Cla1("22", "cde"));claList1.add(new Cla1("11", "abc"));claList1.add(new Cla1("44", "cdef"));claList1.add(new Cla1("55", "cdefg"));claList2.add(new Cla2("11", "name1"));claList2.add(new Cla2("22", "name2"));claList2.add(new Cla2("33", "name3"));claList2.add(new Cla2("44", "name4"));claList2.add(new Cla2("aa", "nameaa"));}/*** 初始结果表中的数据*/public static void init(List<Cla1> claList1, List<Cla2> claList2){claList1.forEach(cla1 -> list1.add(new Cla3(cla1.getId(), cla1.getType(), "null")));claList2.forEach(cla2 -> list2.add(new Cla3(cla2.getId(), "null", cla2.getName())));}/***外连接-内连接* @param list1* @param list2* @param leftBefore 左边在前* @param out 是否输出* @return*/public static List<Cla3> outJoin_InnerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){List<Cla3> outJoin_InnerJoin=new ArrayList<>();outJoin_InnerJoin.addAll(outJoin(list1, list2, leftBefore, false));outJoin_InnerJoin.removeAll(innerJoin(list1, list2, leftBefore, false));if(out){System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");outJoin_InnerJoin.forEach(System.out::println);System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return outJoin_InnerJoin;}/*** 内连接* 左外-左外ISNULL* 右外-右外ISNULL* @param list1* @param list2* @param leftBefore 左边在前* @param out 是否输出* @return*/public static List<Cla3> innerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){List<Cla3> innerJoin=new ArrayList<>();if(leftBefore){innerJoin.addAll(leftJoin(list1, list2, false, false));innerJoin.removeAll(leftJoin(list1, list2, true, false));}else {innerJoin.addAll(rightJoin(list1, list2, false, false));innerJoin.removeAll(rightJoin(list1, list2, true, false));}if(out){System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");innerJoin.forEach(System.out::println);System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return innerJoin;}/*** 左外连接* 计算*     SELECT cla1.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     LEFT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (Where cla2.id IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @param out 输出吗?* @return*/public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> leftJoin=new ArrayList<>();list1.forEach(c1->{AtomicBoolean flag= new AtomicBoolean(false);list2.forEach(c2->{if(c1.id.equals(c2.id)){if (!isNull) {leftJoin.add(new Cla3(c1.id, c1.type, c2.name));}flag.set(true);}});if(!flag.get()){leftJoin.add(new Cla3(c1.id,c1.type,"null"));}});if(out){System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");leftJoin.forEach(System.out::println);System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");System.out.println();}return leftJoin;}/*** 右外连接* 计算*     SELECT cla2.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     RIGHT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (WHERE cla1.`id` IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @return*/public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> rightJoin=new ArrayList<>();list2.forEach(c2->{AtomicBoolean flag= new AtomicBoolean(false);list1.forEach(c1->{if(c1.id.equals(c2.id)){if (!isNull){rightJoin.add(new Cla3(c2.id, c1.type,c2.name));}flag.set(true);}});if(!flag.get()){rightJoin.add(new Cla3(c2.id,"null",c2.name));}});if (out){System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");rightJoin.forEach(System.out::println);System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");System.out.println();}return rightJoin;}/*** 外连接* 左外+右外* 右外+左外*     SELECT **     FROM tableA A*     FULL OUTER JOIN TableB B*     ON A.key=B.key** @param leftBefore 结果集左表在前还是右边在前* @param out 输出吗* @return*/public static List<Cla3> outJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out) {List<Cla3> outJoin=new ArrayList<>();List<Cla3> leftJoin = leftJoin(list1, list2,!leftBefore,false);List<Cla3> rightJoin = rightJoin(list1, list2,leftBefore,false);if (leftBefore){outJoin.addAll(leftJoin);outJoin.addAll(rightJoin);}else {outJoin.addAll(rightJoin);outJoin.addAll(leftJoin);}if(out){System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");outJoin.forEach(System.out::println);System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return outJoin;}}

类 Cla1

package test.algo.main2;public class Cla1 {public String id;public String type;public Cla1(String id, String type) {this.id = id;this.type = type;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic String toString() {return "{id: " + id + ", type: " + type + "}";}
}

类 Cla2

package test.algo.main2;public class Cla2 {public String id;public String name;public Cla2(String id, String name) {this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "{id: " + id + ", name: " + name + "}";}
}

类Cla3

需要重写equals()
id==id

package test.algo.main2;import java.util.Objects;public class Cla3 {public String id;public String name;public String type;public Cla3(String id, String type, String name) {this.id = id;this.type = type;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Cla3 cla3 = (Cla3) o;return Objects.equals(id, cla3.id);}@Overridepublic int hashCode() {return Objects.hash(id);}@Overridepublic String toString() {return "{id: " + id + ", type: " + type + ", name: " + name + "}";}
}

最后

2023-8-4 17:04:28

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

相关文章:

Java实现数据库表中的七种连接【Mysql】

Java实现数据库表中的七种连接【Mysql】 前言版权推荐Java实现数据库表中的七种连接左外连接右外连接其他连接 附录七种连接SQL测试Java测试转换方法类 Cla1类 Cla2类Cla3 最后 前言 2023-8-4 16:51:42 以下内容源自《【Mysql】》 仅供学习交流使用 版权 禁止其他平台发布时…...

452. 用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可…...

HTML <rp> 标签

实例 一个 ruby 注释&#xff1a; <ruby> 漢 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt> </ruby>浏览器支持 元素ChromeIEFirefoxSafariOpera<rp>5.05.538.05.015.0 Internet Explorer 9, Firefox, Opera, Chrome 以及 S…...

常见的设计模式(超详细)

文章目录 单例模式饿汉式单例模式懒汉式单例模式双重检索单例模式 工厂模式简单工厂模式工厂&#xff08;方法&#xff09;模式抽象工厂模式 原型模式代理模式 单例模式 确保一个类只有一个实例&#xff0c;并且自行实例化并向整个系统提供这个实例。 饿汉式单例模式 饿汉式单…...

Excel 超牛的格式调整汇总——你还在担心你做出来的表不好看吗

Excel格式调整技巧 绘图逆序绘制条形图设置条形图宽度 条件格式透视表上的条件格式 数字格式千分位逗号数字同时显示 K M 数据分列非重复计数区域透视图新增计算列隐藏行列快捷键其他小技巧 绘图 逆序绘制条形图 设置条形图宽度 条件格式 透视表上的条件格式 条件格式随切片…...

hyperf 十二、自动化测试

文档教程&#xff1a;Hyperf 用co-phpunit提供测试&#xff0c;在composer中测试。 "scripts": {"test": "co-phpunit --prepend test/bootstrap.php -c phpunit.xml --colorsalways", } 测试中使用Hyperf\Testing\Client模拟请求,该类调用Hyp…...

dblink简单使用

1.配置tns [oraclepg1 admin]$ cat tnsnames.ora 19c (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.56.100)(PORT 1521)))(CONNECT_DATA (SERVICE_NAME orcl)))11g (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.56…...

Typescript 第十一章 与JavaScript互操作(外参变量声明,外参类型声明,外参模块声明)

第十一章 与JavaScript互操作 本章讨论在实际开发中如何编写Typescript。有可能你真正把代码从无类型语言向Typescript迁移。也有可能要使用第三方库。 使用类型声明逐步从JavaScript迁移到Typescript使用第三方JavaScript和Typescript 11.1 类型声明 类型声明文件的扩展名…...

从0到1框架搭建,Python+Pytest+Allure+Git+Jenkins接口自动化框架(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口测试是对系统…...

在windows配置redis的一些错误及解决方案

目录 Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException:用客户端Redis Desktop Manager一样的密码端口&#xff0c;是可以正常连接的&#xff0c;但是运行java程序之后使用接口请求就会报错 Unable to connect to Redis; nested e…...

真机搭建中小网络

这是b站上的一个视频&#xff0c;演示了如何搭建一个典型的中小网络&#xff0c;供企业使用 一、上行端口&#xff1a;上行端口就是连接汇聚或者核心层的口&#xff0c;或者是出广域网互联网的口。也可理解成上传数据的端口。 二、下行端口&#xff1a;连接数据线进行下载的端…...

Linux:shell脚本:基础使用(1)

Shell的作用 命令解释器&#xff0c;“翻译官”&#xff0c;介于系统内核与用户之间&#xff0c;负责解释命令行 用户的登录Shell 登录后默认使用的Shell程序&#xff0c;一般为 /bin/bash 不同Shell的内部指令、运行环境等会有所区别 cat /etc/shells 编写第一个Shell脚本 …...

carla中lka实现(一)

前言&#xff1a; 对于之前项目中工作内容进行总结&#xff0c;使用Carla中的车辆进行lka算法调试&#xff0c;整体技术路线&#xff1a; ①在Carla中生成车辆&#xff0c;并在车辆上搭载camera&#xff0c;通过camera采集图像数据&#xff1b; ②使用图像处理lka算法&#…...

常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)

线性表&#xff08;Linear List&#xff09;  1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度&#xff1a; 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack  1.什么是栈  2.栈的基本方法 队列…...

(12)理解委托,反射,Type,EvenInfo,插件, 组合枚举,BindingFlags,扩展方法及重载,XML认识

一、复习委托事件 1、委托复习。 private delegate int MyDelegate(int a, int b); //1.定义委托类型private static void Main(string[] args){MyDelegate md new MyDelegate(AddDelegate);//2.声明委托变量int result md(1, 2);//3.调用委托Console.WriteLine(result);Cons…...

软件建设方案技术方案实施方案密码评测方案等保测评方案人员培训方案项目建设与运行管理项目招标方案模板目录

第一章 项目概述 1.项目名称(包含项目全称和简称) 2.项目建设单位及负责人、项目责任人 3.项目建设依据 (1)政策依据(主要从国家、省、市、行业部门相关的政策文件要求等方面进行描述) (2)技术标准 4.项目建设目标、建设任务 5.项目主要建设内容、规模、建设周期…...

pytorch中torch.einsum函数的详细计算过程图解

第一次见到 rel_h torch.einsum(“bhwc,hkc->bhwk”, r_q, Rh)这行代码时&#xff0c;属实是懵了&#xff0c;网上找了很多博主的介绍&#xff0c;但都没有详细的说明函数内部的计算过程&#xff0c;看得我是一头雾水&#xff0c;只知道计算结果的维度是如何变化的&#xf…...

【iOS】App仿写--天气预报

文章目录 前言一、首页二、搜索界面三、添加界面四、浏览界面总结 前言 最近完成了暑假的最后一个任务——天气预报&#xff0c;特此记录博客总结。根据iPhone中天气App的功能大致可以将仿写的App分为四个界面——首页&#xff0c;搜索界面&#xff0c;添加界面&#xff0c;浏…...

快速远程桌面控制公司电脑远程办公

文章目录 第一步第二步第三步 远程办公的概念很早就被提出来&#xff0c;但似乎并没有多少项目普及落实到实际应用层面&#xff0c;至少在前几年&#xff0c;远程办公距离我们仍然很遥远。但2019年末突如其来的疫情&#xff0c;着实打了大家一个措手不及。尽管国内最初的大面积…...

亚信科技AntDB数据库专家出席数据库标准研讨会并参与研讨

2023年7月12日&#xff0c;全国信息技术标准化技术委员会数据库标准工作组&#xff08;SAC/TC28/WG31&#xff09;秘书处组织召开数据库标准研讨会&#xff0c;会议围绕数据库标准工作组2023年上半年开展的标准编制情况进行交流。亚信科技AntDB数据库相关专家出席会议&#xff…...

ESP8266轻量MQTT Broker:零依赖离线直连实现

1. 项目概述MQTTbroker 是一款专为 ESP8266 设计的轻量级嵌入式 MQTT 消息代理&#xff08;Broker&#xff09;实现&#xff0c;其核心目标是构建一个零依赖、离线可用、端到端直连的物联网本地通信枢纽。它并非传统意义上的全功能云级 Broker&#xff08;如 Mosquitto 或 EMQX…...

构建具备批判性思维的AI Agent

构建具备批判性思维的AI Agent&#xff1a;从理论到生产级RAG反思循环系统 副标题&#xff1a;拆解GPT-4o、Claude Opus的「逻辑过滤」核心&#xff0c;用LangChain AutoGen Python落地高准确率Agent第一部分&#xff1a;引言与基础 1. 引人注目的标题 &#xff08;本文已单独…...

从代码工厂到智能协作者:AI原生研发组织变革的5阶跃迁模型(附SITS2026评估矩阵V2.1)

第一章&#xff1a;从代码工厂到智能协作者&#xff1a;AI原生研发组织变革的5阶跃迁模型&#xff08;附SITS2026评估矩阵V2.1&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 传统研发组织正经历一场静默却深刻的范式迁移&#xff1a;代码不再由人单向输出&#…...

ShutUp10++ vs 其他隐私工具:实测对比哪款更适合你的Windows系统优化需求

ShutUp10 vs 其他隐私工具&#xff1a;实测对比哪款更适合你的Windows系统优化需求 在数字时代&#xff0c;隐私保护已成为每个Windows用户不可忽视的重要议题。面对系统内置的各种数据收集功能&#xff0c;第三方隐私工具应运而生&#xff0c;它们承诺能帮助我们重新掌控自己的…...

GTE中文文本向量模型实战:快速搭建支持6大任务的Web应用

GTE中文文本向量模型实战&#xff1a;快速搭建支持6大任务的Web应用 1. 为什么选择GTE中文文本向量模型 在日常工作中&#xff0c;我们经常遇到需要处理大量中文文本的场景。无论是客服对话记录、产品评论分析&#xff0c;还是新闻事件提取&#xff0c;传统的关键词匹配方法往…...

SeqGPT-560M镜像免配置教程:无需pip install,直接运行Web服务

SeqGPT-560M镜像免配置教程&#xff1a;无需pip install&#xff0c;直接运行Web服务 本文介绍如何快速使用SeqGPT-560M镜像&#xff0c;无需任何环境配置&#xff0c;直接启动Web服务进行文本分类和信息抽取。 1. 什么是SeqGPT-560M&#xff1f; SeqGPT-560M是阿里达摩院推出…...

Qwen3-ASR-1.7B效果实测:1.7B参数量带来的上下文联想能力提升验证

Qwen3-ASR-1.7B效果实测&#xff1a;1.7B参数量带来的上下文联想能力提升验证 1. 语音识别新标杆&#xff1a;Qwen3-ASR-1.7B深度解析 语音识别技术正在经历一场静默的革命。当我们还在为0.6B参数模型的准确率感到惊喜时&#xff0c;Qwen3-ASR-1.7B已经以近乎三倍的参数量重新…...

【26最新大英赛】2012-2026年全国大学生英语竞赛ABCD类历年真题、样题及答案电子版PDF

2026年全国大学生英语竞赛&#xff08;NECCS&#xff09;初赛通知 2026年全国大学生英语竞赛初赛定于4月12日&#xff08;周日&#xff09;举行&#xff0c;现进入最后2天倒计时阶段。 备考资料已全面更新&#xff0c;涵盖2012-2026年A、B、C、D四类真题、样题、参考答案及听…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)贡

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能&#xff0c;现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包&#xff0c;包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

Ansible AWX实战:5分钟搞定Web界面管理你的Playbook

Ansible AWX实战&#xff1a;5分钟极速部署与高效运维指南 当Ansible遇上AWX&#xff0c;运维效率将迎来质的飞跃。想象一下&#xff0c;原本需要在命令行反复敲击的Playbook&#xff0c;现在只需在浏览器中轻点几下就能完成编排、执行和监控——这正是AWX赋予运维团队的超能力…...