Mybatis 关联查询

在 MyBatis 中,关联查询(也称为复杂映射)是指将多个表的数据通过 SQL 查询和结果映射的方式,组合成一个或多个 Java 对象。这种查询方式用于处理实体之间的关系,如一对一、一对多和多对多关系。通过关联查询,你可以更好地表示现实世界中的业务逻辑,并简化数据访问层的代码。

一、数据准备

1、用户表

CREATE TABLE `users` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`username` varchar(20),
`password` varchar(50),
`realname` varchar(20)
);
INSERT INTO `users` VALUES (1, 'admin', '123456', '管理员');
INSERT INTO `users` VALUES (2, 'tom', '123', '汤姆');
INSERT INTO `users` VALUES (3, 'jerry', '456', '杰瑞');
INSERT INTO `users` VALUES (4, 'zhangsan', '111', '张三');
INSERT INTO `users` VALUES (5, 'lisi', '222', '李四');

2、订单表

CREATE TABLE `orders` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`order_number` varchar(30),
`total_price` double,
`status` varchar(5),
`user_id` int(11)
);
INSERT INTO `orders` VALUES (1, '202112290838001', 2535, '已评价', 2);
INSERT INTO `orders` VALUES (2, '202112290838002', 4704.6, '已签收', 2);
INSERT INTO `orders` VALUES (3, '202112290838003', 3620, '已支付', 2);
INSERT INTO `orders` VALUES (4, '202112290840001', 600, '已发货', 3);
INSERT INTO `orders` VALUES (5, '202112290840002', 280, '未支付', 3);

3、订单详情表

CREATE TABLE `orders_detail` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`amount` int(11),
`goods_id` int(11),
`orders_id` int(11)
);
INSERT INTO `orders_detail` VALUES (1, 1, 1, 1);
INSERT INTO `orders_detail` VALUES (2, 3, 8, 1);
INSERT INTO `orders_detail` VALUES (3, 1, 2, 2);
INSERT INTO `orders_detail` VALUES (4, 2, 7, 2);
INSERT INTO `orders_detail` VALUES (5, 1, 3, 3);
INSERT INTO `orders_detail` VALUES (6, 6, 6, 3);
INSERT INTO `orders_detail` VALUES (7, 2, 4, 4);
INSERT INTO `orders_detail` VALUES (8, 1, 5, 5);

4、商品表

CREATE TABLE `goods` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`goods_name` varchar(50),
`description` varchar(500),
`price` double
);
INSERT INTO `goods` VALUES (1, '手机', '手机', 2499);
INSERT INTO `goods` VALUES (2, '笔记本电脑', '笔记本电脑', 4699);
INSERT INTO `goods` VALUES (3, 'IPAD', 'IPAD', 3599);
INSERT INTO `goods` VALUES (4, '运动鞋', '运动鞋', 300);
INSERT INTO `goods` VALUES (5, '外套', '外套', 280);
INSERT INTO `goods` VALUES (6, '可乐', '可乐', 3.5);
INSERT INTO `goods` VALUES (7, '辣条', '辣条', 2.8);
INSERT INTO `goods` VALUES (8, '水杯', '水杯', 12);

5、数据模型分析

二、一对一查询——订单查询关联用户信息查询

(一)、通过resultType方式实现

1、实体类:

实体类Orders类不能映射全部字段,需要新创建的实体类,创建一个包括查询字段较多的实体类。
OrdersQuery中包含了Orders以及Users需要查询的属性。

package org.example.vo;public class OrdersQuery {//订单属性private Integer id;private String orderNumber;private Double totalPrice;private String status;private Integer userId;//用户属性private String username;private String password;private String realname;public OrdersQuery() {}public OrdersQuery(Integer id, String orderNumber, Double totalPrice, String status, Integer userId, String username, String password, String realname) {this.id = id;this.orderNumber = orderNumber;this.totalPrice = totalPrice;this.status = status;this.userId = userId;this.username = username;this.password = password;this.realname = realname;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getOrderNumber() {return orderNumber;}public void setOrderNumber(String orderNumber) {this.orderNumber = orderNumber;}public Double getTotalPrice() {return totalPrice;}public void setTotalPrice(Double totalPrice) {this.totalPrice = totalPrice;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRealname() {return realname;}public void setRealname(String realname) {this.realname = realname;}@Overridepublic String toString() {return "OrdersQuery{" +"id=" + id +", orderNumber='" + orderNumber + '\'' +", totalPrice=" + totalPrice +", status='" + status + '\'' +", userId=" + userId +", username='" + username + '\'' +", password='" + password + '\'' +", realname='" + realname + '\'' +'}';}
}

2、mapper接口


import org.example.vo.OrdersQuery;
import java.util.List;public interface OrdersMapper {//通过resultType实现查询订单信息,关联查询相关的用户信息List<OrdersQuery> selectUseResultType();
}

3、mapper文件

<?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="org.example.mapper.OrdersMapper"><!--1、ResultType类型实现一对一查询--><select id="selectUseResultType" resultType="org.example.vo.OrdersQuery">SELECT o.*,u.username,u.`password`,u.realname FROM orders o,users u WHERE o.user_id=u.id</select>
</mapper>

4、测试代码

 //ResultType类型实现一对一查询@Testpublic void testOneToOneResultType() {SqlSession sqlSession = MybatisUtil.getSession();OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);List<OrdersQuery> list = ordersMapper.selectUseResultType();for (OrdersQuery ordersQuery : list) {System.out.println(ordersQuery);}sqlSession.close();}

(二)、通过resultMap方式实现

1、用户类

package org.example.entity;public class Users {private Integer id;private String username;private String password;private String realname;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRealname() {return realname;}public void setRealname(String realname) {this.realname = realname;}@Overridepublic String toString() {return "Users{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", realname='" + realname + '\'' +'}';}
}

2、订单类

在Orders类中加入Users属性,Users属性用于存储关联查询的用户信息。
因为订单关联查询用户是一对一关系,所以这里使用单个Users对象存储关联查询的用户信息。

public class Orders {
private Integer id;
private String orderNumber;
private Double totalPrice;
private String status;
private Integer userId;
private Users users;//一对一映射属性:一个订单属于一个用户
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Double totalPrice) {
this.totalPrice = totalPrice;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", orderNumber='" + orderNumber + '\'' +
", totalPrice=" + totalPrice +
", status='" + status + '\'' +
", userId=" + userId +
", users=" + users +
'}';
}
}

3、mapper接口

//通过resultMap实现查询订单信息,关联查询相关的用户信息List<Orders> selectUseResultMap();

4、mapper文件

<?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="org.example.mapper.OrdersMapper">
<!--2、resultMap实现一对一查询--><resultMap id="selectResultMap" type="org.example.entity.Orders"><id column="id" property="id"/><result column="order_number" property="orderNumber"/><result column="total_price" property="totalPrice"/><result column="status" property="status"/><result column="user_id" property="userId"/><!--一对一映射property:要映射的实体类的属性名javaType:指定映射属性的类型--><association property="users" javaType="org.example.entity.Users"><id column="user_id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="realname" property="realname"/></association></resultMap><select id="selectUseResultMap" resultMap="selectResultMap">select o.id, o.order_number, o.total_price, o.status, o.user_id, u.username,u.password, u.realname from orders o, users u where o.user_id=u.id</select>

5、测试代码

 //resultMap实现一对一查询@Testpublic void testOneToOneResultMap() {SqlSession sqlSession = MybatisUtil.getSession();OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);List<Orders> list = ordersMapper.selectUseResultMap();for (Orders orders : list) {System.out.println(orders);}sqlSession.close();}

三、一对多查询——查询订单信息,关联订单详情信息

1、订单详情类

package org.example.entity;public class OrderDetail {private Integer id;private Integer amount;private Integer ordersId;private Integer goodsId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}public Integer getOrdersId() {return ordersId;}public void setOrdersId(Integer ordersId) {this.ordersId = ordersId;}public Integer getGoodsId() {return goodsId;}public void setGoodsId(Integer goodsId) {this.goodsId = goodsId;}@Overridepublic String toString() {return "OrderDetail{" +"id=" + id +", amount=" + amount +", ordersId=" + ordersId +", goodsId=" + goodsId +'}';}
}

2、订单类

在Order类中加入List<OrdersDetail> detailList 属性,details属性用于存储关联查询的订单详
情。
因为订单关联查询订单详情是一对多关系,所以这里使用集合对象存储关联查询的订单详情信息。

package org.example.entity;import java.util.List;public class Orders {private Integer id;private String orderNumber;private Double totalPrice;private String status;private Integer userId;private Users users;//一对一映射属性:一个订单属于一个用户List<OrderDetail> orderDetailList;//一对多关系属性:一个订单包含多个订单详情public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getOrderNumber() {return orderNumber;}public void setOrderNumber(String orderNumber) {this.orderNumber = orderNumber;}public Double getTotalPrice() {return totalPrice;}public void setTotalPrice(Double totalPrice) {this.totalPrice = totalPrice;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Users getUsers() {return users;}public void setUsers(Users users) {this.users = users;}public List<OrderDetail> getOrderDetailList() {return orderDetailList;}public void setOrderDetailList(List<OrderDetail> orderDetailList) {this.orderDetailList = orderDetailList;}@Overridepublic String toString() {return "Orders{" +"id=" + id +", orderNumber='" + orderNumber + '\'' +", totalPrice=" + totalPrice +", status='" + status + '\'' +", userId=" + userId +", users=" + users +", orderDetailList=" + orderDetailList +'}';}
}

3、mapper接口

 //查询订单信息,关联订单详情信息List<Orders> selectOrdersAndDetail();

4、mapper文件

<?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="org.example.mapper.OrdersMapper"><!--3、一对多关系属性--><resultMap id="detailResultMap" type="org.example.entity.Orders" ><id column="id" property="id"/><result column="order_number" property="orderNumber"/><result column="total_price" property="totalPrice"/><result column="status" property="status"/><result column="user_id" property="userId"/><association property="users" javaType="org.example.entity.Users"><id column="user_id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="realname" property="realname"/></association><!--一对多映射property:订单实体的属性ofType:集合里面存储的类型--><collection property="orderDetailList" ofType="org.example.entity.OrderDetail"><id column="detail_id" property="id"/><result column="amount" property="amount"/><result column="orders_id" property="ordersId"/><result column="goods_id" property="goodsId"/></collection></resultMap><select id="selectOrdersAndDetail" resultMap="detailResultMap">SELECT o.*,u.username,u.`password`,u.realname ,d.id detail_id,d.amount,d.orders_id,d.goods_idFROM orders o,users u,orders_detail dWHERE o.user_id=u.id and o.id=d.orders_id</select>
</mapper>

5、测试代码

//一对多查询@Testpublic void testOneToMany() {SqlSession sqlSession = MybatisUtil.getSession();OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);List<Orders> list = ordersMapper.selectOrdersAndDetail();for (Orders orders : list) {System.out.println(orders);}sqlSession.close();}

四、多对多查询——查询订单信息,关联查询商品信息

1、商品类

将OrderDetail类中Integer类型的goods_id属性修改为Goods类型属性,goods属性用于存储关联查询的商品信息。
订单与订单详情是一对多关系,订单详情与商品是一对一关系,反之商品与订单详情是一对多关系,订单详情与订单是一对一关系,所以订单与商品为多对多关系。

package org.example.entity;public class Goods {private Integer id;private String goodsName;private String description;private Double price;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "Goods{" +"id=" + id +", goodsName='" + goodsName + '\'' +", description='" + description + '\'' +", price=" + price +'}';}
}

2、订单详情类

package org.example.entity;public class OrderDetail {private Integer id;private Integer amount;private Integer ordersId;private Integer goodsId;private Goods goods;//在订单详情里面定义与商品表的关系public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}public Integer getOrdersId() {return ordersId;}public void setOrdersId(Integer ordersId) {this.ordersId = ordersId;}public Integer getGoodsId() {return goodsId;}public void setGoodsId(Integer goodsId) {this.goodsId = goodsId;}public Goods getGoods() {return goods;}public void setGoods(Goods goods) {this.goods = goods;}@Overridepublic String toString() {return "OrderDetail{" +"id=" + id +", amount=" + amount +", ordersId=" + ordersId +", goodsId=" + goodsId +", goods=" + goods +'}';}
}

3、mapper接口

//查询订单信息,关联查询商品信息//订单信息和商品表没有直接关系,在订单详情中定义与商品的关系List<Orders> selectOrdersAndGoods();

4、mapper文件

<?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="org.example.mapper.OrdersMapper"><!--4、多对多--><resultMap id="goodsResultMap" type="org.example.entity.Orders" ><id column="id" property="id"/><result column="order_number" property="orderNumber"/><result column="total_price" property="totalPrice"/><result column="status" property="status"/><result column="user_id" property="userId"/><!--一对一--><association property="users" javaType="org.example.entity.Users"><id column="user_id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="realname" property="realname"/></association><!--一对多映射--><collection property="orderDetailList" ofType="org.example.entity.OrderDetail"><id column="detail_id" property="id"/><result column="amount" property="amount"/><result column="orders_id" property="ordersId"/><result column="goods_id" property="goodsId"/><!--多对多--><association property="goods" javaType="org.example.entity.Goods"><id column="goods_id" property="id"/><result column="goods_name" property="goodsName"/><result column="description" property="description"/><result column="price" property="price"/></association></collection></resultMap><select id="selectOrdersAndGoods" resultMap="goodsResultMap">SELECT o.*,u.username,u.`password`,u.realname ,d.id detail_id,d.amount,d.orders_id,d.goods_id,g.goods_name,g.description,g.priceFROM orders o,users u,orders_detail d,goods gWHERE o.user_id=u.id and o.id=d.orders_id and d.goods_id=g.id</select></mapper>

5、测试代码

 //多对多查询@Testpublic void testManyToMany1() {SqlSession sqlSession = MybatisUtil.getSession();OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);List<Orders> list = ordersMapper.selectOrdersAndGoods();for (Orders orders : list) {System.out.println(orders);}sqlSession.close();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

分布式光伏电站如何实现监控及集中运维管理?

安科瑞戴婷 Acrel-Fanny 前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电…

大模型分类1—按应用类型

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据应用领域,大模型可分为自然语言处理、计算机视觉和多模态大模型。 1. 自然语言处理大模型(NLP) 1.1 应用领域与技术架构 自然语言处理大模型(NLP)的应用领域广泛,包括但不限于文本分类、…

2024 32kstar 的目前最佳开源RAG框架之一的 Langchain-Chatchat开源项目实践(一)

2024 32kstar 的目前最佳开源RAG框架之一的 Langchain-Chatchat开源项目实践&#xff08;一&#xff09; 文章目录 2024 32kstar 的目前最佳开源RAG框架之一的 Langchain-Chatchat开源项目实践&#xff08;一&#xff09;一、前言二、实践步骤1、软硬件要求&#xff08;1&#…

网络安全应急响应流程图

一、网络安全应急响应建设的背景和现状 当前&#xff0c;许多地区和单位已经初步建立了网络安全预警机制&#xff0c;实现了对一般网络安全事件的预警和处置。但是&#xff0c;由于网络与信息安全技术起步相对较晚&#xff0c;发展时间较短&#xff0c;与其他行业领域相比&…

2024 阿里云Debian12.8安装apach2【图文讲解】

1. 更新系统&#xff0c;确保您的系统软件包是最新的 sudo apt update sudo apt upgrade -y 2. 安装 Apache Web 服务器 apt install apache2 -y 3. 安装 PHP 及常用的扩展 apt install php libapache2-mod-php -y apt install php-mysql php-xml php-mbstring php-curl php…

本地windows环境下,在vscode里将go项目打成docker镜像,并运行访问

此处只展示一个简单go代码实例. #前提:需要装好docker和golang环境,本地docker启动且配置好镜像源地址: # 容器镜像加速服务-云港网络 1.首先在vscode中写一个简单输出的demo go mod init &#xff0b;go mod tidy编译一下,命令运行如下: 2.使用命令生成Dockerfile文件 $ g…

GIT的使用方法以及汉化方法

1.下载git软件&#xff0c;可以从官网下载 下载后默认安装即可。 2.找到一个文件夹&#xff0c;或者直接打开gitbash gitbash可以使用cd指令切换目录的 打开后输入 git clone https:[git仓库的网页]即可克隆仓库 就是这个地址 克隆后即可使用代码 如果忘记了命令可以使用 -…

前缀和(四)除自身以外数组的乘积

238. 除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&…

图解RabbitMQ七种工作模式生产者消费者模型的补充

文章目录 1.消费者模型2.生产者-消费者模型注意事项2.1资源释放顺序问题2.2消费者的声明问题2.3虚拟机和用户的权限问题 3.七种工作模式3.1简单模式3.2工作模式3.3发布/订阅模式3.4路由模式3.5通配符模式3.6RPC通信3.7发布确认 1.消费者模型 之前学习的这个消息队列的快速上手…

头歌 Linux之线程管理

第1关&#xff1a;创建线程 任务描述 通常我们编写的程序都是单进程&#xff0c;如果在一个进程中没有创建新的线程&#xff0c;则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务&#xff1a;学会使用C语言在Linux系统中使用pthrea…

BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。

2024-11-29, 由罗马尼亚布加勒斯特大学创建BioDeepAV数据集&#xff0c;它专门设计来评估最先进的深度伪造检测器在面对未见过的深度伪造生成器时的泛化能力&#xff0c;这对于提高检测器的鲁棒性和适应性具有重要意义。 数据集地址&#xff1a;biodeep 一、研究背景&#xff1…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 &#xff08;一&#xff09;概念差异 &#xff08;二&#xff09;应用场景 二、有状态计算中的状态分类 &#xff08;一&#xff09;托管状态&#xff08;Managed State&#xff09;与原生状态&#xff08;Raw State&#xff09; 两者的…

opencv-android编译遇到的相关问题处理

1、opencv-android sdk下载 下载地址&#xff1a;https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细&#xff0c;大家可安装官方给出的步骤导入。…

OpenSSH-9.9p1 OpenSSL-3.4.0 升级步骤详细

前言 收到漏洞扫描通知 OpenSSH 安全漏洞(CVE-2023-38408) OpenSSH 安全漏洞(CVE-2023-51385) OpenSSH 安全漏洞(CVE-2023-51384) OpenSSH 安全漏洞(CVE-2023-51767) OpenSSH 安全漏洞(CVE-2023-48795) OpenSSH&#xff08;OpenBSD SecureShell&#xff09;是加拿大OpenBSD计划…

Python毕业设计选题:基于Flask的医疗预约与诊断系统

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 疾病信息 就诊信息 个人中心 管理员登录界面 管理员功能界面 用户界面 医生…

sql删除冗余数据

工作或面试中经常能遇见一种场景题&#xff1a;删除冗余的数据&#xff0c;以下是举例介绍相应的解决办法。 举例&#xff1a; 表结构&#xff1a; 解法1&#xff1a;子查询 获取相同数据中id更小的数据项&#xff0c;再将id不属于其中的数据删除。-- 注意&#xff1a;mysql中…

数据链路层(四)---PPP协议的工作状态

1 PPP链路的初始化 通过前面几章的学习&#xff0c;我们学了了PPP协议帧的格式以及组成&#xff0c;那么对于使用PPP协议的链路是怎么初始化的呢&#xff1f; 当用户拨号上网接入到ISP后&#xff0c;就建立起了一条个人用户到ISP的物理链路。这时&#xff0c;用户向ISP发送一…

基于“微店 Park”模式下 2+1 链动模式商城小程序的创新发展与应用研究

摘要&#xff1a;本文以“微店 Park”从“开店工具”向“众创平台”的转型为背景&#xff0c;深入探讨 21 链动模式商城小程序在该平台情境下的应用潜力与创新发展路径。通过剖析“微店 Park”的运营模式&#xff0c;包括灵活承租、低成本入驻、多元流量引流等特点&#xff0c;…