MyBatis復雜查詢——一對一、一對多

目錄

(一)復雜查詢:1對1關系

【任務】數據庫里有學生表(student)和學生證信息表(student_card),表結構如下所示,要求使用MyBatis框架查詢所有的學生信息以及每位學生的學生證信息

解決方案1:關聯查詢實現

定義實體類

定義接口

配置SQL并完成數據映射

執行SQL

解決方案2:嵌套查詢實現

定義實體類和接口

配置SQL并完成數據映射

執行SQL

(二)復雜查詢:1對多關系

【任務】數據庫里有客戶表(customer)和訂單表(orders),表結構如下所示,要求用MyBatis框架查詢所有的客戶信息以及每位客戶的訂單信息

解決方案1:關聯查詢實現

定義實體類

定義接口

配置SQL并完成數據映射

執行SQL

解決方案2:嵌套查詢實現


(一)復雜查詢:1對1關系

在前面的課程中,我們已經學習了使用MyBatis框架實現單表的數據查詢。在實際的開發中,我們遇到的需求更多的是需要多表進行關聯查詢獲取需要的數據。

【任務】數據庫里有學生表(student)和學生證信息表(student_card),表結構如下所示,要求使用MyBatis框架查詢所有的學生信息以及每位學生的學生證信息

學生表(student)

學生證信息表(student_card)

【分析】

  • 題目中要求我們查出所有的學生以及學生證信息,因此需要涉及兩張表的關聯查詢
  • 通過表結構分析,學生表和學生證表之間是1對1的關系,擁有相同的主鍵stu_id。
  • 兩表關聯查詢的SQL語句如下:
select stu.*,
card.stu_id as card_stu_id,card.class_info,card.major 
from student stu 
LEFT JOIN student_card card 
on stu.stu_id=card.stu_id
  • 查詢結果如下

【實現步驟】

  1. 定義實體類
  2. 定義接口
  3. 配置SQL并完成數據映射
  4. 執行SQL
解決方案1:關聯查詢實現
定義實體類

基于表結構創建兩個實體類:學生類(Student)和學生證類(StudentCard),因為學生實體和學生證實體是1對1的關系,所以在學生類中加入一個學生證類型的屬性,表示一個學生擁有一個學生證。

@Data
//學生證實體類
public class StudentCard {private int stuId;private String classInfo;private String major;
}
//學生實體類
@Data
public class Student {private int stuId;private String stuNo;private String stuName;//一個學生擁有一個學生證,體現1對1關系private StudentCard studentCard;
}
定義接口

在com.cg.mapper下新建一個接口StudentMapper,接口中加入方法

public interface StudentMapper {/*** 查詢學生信息(包含學生證)* @return 學生信息列表*/List<Student> selectStudents();
}

配置SQL并完成數據映射

在src/main/resources/mapper下新建一個SQL映射文件StudentMapper.xml,完成SQL配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cg.mapper.StudentMapper"><!--定義查詢結果和Student實體類映射關系--><resultMap id="studentCardMap" type="Student"><!-- 先設置Student自身屬性和字段的對應關系 --><id column="stu_id" property="stuId"/><result column="stu_no" property="stuNo"/><result column="stu_name" property="stuName"/><!-- 使用association標簽配置“一對一”關聯關系,也就是實體類型屬性的映射關系 --><!-- property屬性:實體類型屬性名 --><!-- javaType屬性:實體類型屬性全類名 --><association property="studentCard" javaType="StudentCard"><!-- 配置StudentCard類的屬性和字段的對應關系 --><id column="card_stu_id" property="stuId"/><result column="class_info" property="classInfo"/><result column="major" property="major"/></association></resultMap><select id="selectStudents" resultMap="studentCardMap">select stu.*,card.stu_id as card_stu_id,card.class_info,card.majorfrom student stuLEFT JOIN student_card cardon stu.stu_id=card.stu_id</select>
</mapper>

注:

  • 一定要記得通過namespace關聯接口
  • 使用association標簽配置“一對一”關聯關系,也就是實體類型屬性的映射關系
  • 新建的SQL映射文件需要在全局配置文件中配置地址
<!--SQL映射文件地址配置--><mappers><mapper resource="mapper/StudentMapper.xml" /></mappers>
  • 配置優化:在以上配置中,很多屬性名稱和列都是符合駝峰命名規范的,這些屬性和列的映射關系可以省略不寫,但是需要在全局配置文件(mybatis-config.xml)中配置如下內容
<settings><!--配置控制臺日志輸出--><setting name="logImpl" value="STDOUT_LOGGING"/><!--開啟駝峰式命名自動映射駝峰式命名--><setting name="mapUnderscoreToCamelCase" value="true"/><!--開啟自動映射--><setting name="autoMappingBehavior" value="FULL"/></settings>

開啟了MyBatis自動映射之后,<resultMap>標簽的配置可以簡化為如下:

<!--定義查詢結果和Student實體類映射關系--><resultMap id="studentCardMap" type="Student"><!--通過association元素定義實體類型屬性的映射關系--><association property="studentCard" javaType="StudentCard"><id column="card_stu_id" property="stuId"/></association></resultMap>
執行SQL

在測試方法中調用MyBatis API執行SQL,完成數據查詢。

    @Testpublic void test1() throws IOException {//1.加載MyBatis核心配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//2.獲取SqlSessionFactory對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.獲取SqlSession會話對象SqlSession sqlSession = sqlSessionFactory.openSession();//4.執行SQL配置StudentMapper studentMapper= sqlSession.getMapper(StudentMapper.class);List<Student> students = studentMapper.selectStudents();for (Student student : students) {System.out.println(student);}//6.關閉數據庫會話sqlSession.close();}

控制臺打印結果如下:

解決方案2:嵌套查詢實現

【實現原理】嵌套查詢就是將原來多表查詢中的關聯查詢語句拆成單個表的查詢,再使用MyBatis的語法嵌套在一起。結合本任務,首先執行主查詢“select * from student”,查詢出所有的學生信息列表,然后遍歷每一條學生記錄,根據學生信息的主鍵列(stu_id)的值執行子查詢“select * from student_card where stu_id=?”查詢出每位學生的學生證信息,然后將查詢出的學生和學生證數據映射到到Student實體類對象的屬性中完成數據映射。

定義實體類和接口

實體類和接口的設計內容和解決方案1是一致的。

配置SQL并完成數據映射

結合嵌套查詢的實現原理可知,我們需要完成如下兩個SQL配置(主查詢和子查詢),然后將他們關聯起來。

  1. 主查詢:select * from student
  2. 子查詢:select * from student_card where stu_id=?

首先子查詢的配置如下,子查詢的查詢結果需要和StudentCard建立映射關系。

<!--定義映射關系--><resultMap id="cardMap" type="StudentCard"><id column="stu_id" property="stuId"/><result column="class_info" property="classInfo"/><result column="major" property="major"/></resultMap><!--子查詢配置,根據stuId查詢學生證信息并映射到實體類(StudentCard)上--><select id="selectCardByStuId" resultMap="cardMap">select * from student_card where stu_id=#{stuId}</select>

然后配置主查詢,在主查詢映射關系配置中,需要在<association>標簽中,通過select屬性關聯要執行的子查詢的SQL配置id,通過column屬性指定子查詢所需參數的來源字段,來源于主查詢結果中的stu_id字段的值。

<!--定義映射關系--><resultMap id="studentCardMap" type="Student"><!-- 先設置Student自身屬性和字段的對應關系 --><id column="stu_id" property="stuId"/><result column="stu_no" property="stuNo"/><result column="stu_name" property="stuName"/><!-- 使用association標簽配置實體類型屬性的映射關系通過select關聯子查詢SQL,通過column指定子查詢參數來源字段--><association property="studentCard"javaType="StudentCard"select="selectCardByStuId"column="stu_id"></association></resultMap><!--主查詢配置,將查詢結果映射到Student實體類上--><select id="selectStudents" resultMap="studentCardMap">select * from student</select>
執行SQL

調用MyBatis API執行接口方法,代碼和解決方案1是一樣的,控制臺打印內容如下,從打印的內容可以看到,MyBatis底層首先執行了一次主查詢SQL獲取學生信息列表,然后遍歷查詢結果的每一條記錄,根據記錄stu_id字段的值執行子查詢SQL獲取學生證信息,從而完成數據的映射,因為有4個學生記錄,因此嵌套查詢共執行了1+4次select查詢。

==>  Preparing: select * from student
==> Parameters: 
<==    Columns: stu_id, stu_no, stu_name
<==        Row: 5, 189000101, 張哲
====>  Preparing: select * from student_card where stu_id=?
====> Parameters: 5(Integer)
<====    Columns: stu_id, class_info, major
<====        Row: 5, 18級軟工1班, 軟件工程
<====      Total: 1
<==        Row: 6, 189000102, 王霜
====>  Preparing: select * from student_card where stu_id=?
====> Parameters: 6(Integer)
<====    Columns: stu_id, class_info, major
<====        Row: 6, 18級軟工2班, 數字媒體技術
<====      Total: 1
<==        Row: 7, 189000103, 趙鋒
====>  Preparing: select * from student_card where stu_id=?
====> Parameters: 7(Integer)
<====    Columns: stu_id, class_info, major
<====        Row: 7, 18級軟工3班, 軟件工程
<====      Total: 1
<==        Row: 8, 189000104, 李娜
====>  Preparing: select * from student_card where stu_id=?
====> Parameters: 8(Integer)
<====      Total: 0
<==      Total: 4
Student(stuId=5, stuNo=189000101, stuName=張哲, studentCard=StudentCard(stuId=5, classInfo=18級軟工1班, major=軟件工程))
Student(stuId=6, stuNo=189000102, stuName=王霜, studentCard=StudentCard(stuId=6, classInfo=18級軟工2班, major=數字媒體技術))
Student(stuId=7, stuNo=189000103, stuName=趙鋒, studentCard=StudentCard(stuId=7, classInfo=18級軟工3班, major=軟件工程))
Student(stuId=8, stuNo=189000104, stuName=李娜, studentCard=null)

(二)復雜查詢:1對多關系

【任務】數據庫里有客戶表(customer)和訂單表(orders),表結構如下所示,要求用MyBatis框架查詢所有的客戶信息以及每位客戶的訂單信息

客戶表(customer)

訂單表(orders)

【分析】

  • 題目中要求我們查出所有的客戶以及客戶的訂單信息,因此需要涉及兩張表的關聯查詢
  • 通過表結構分析,訂單表通過外鍵customer_id與客戶表關聯,一個客戶可以擁有多個訂單,因此客戶與訂單是1對多的關系
  • 兩表關聯查詢的SQL語句如下:
select c.*,o.id as order_id,o.order_no,o.price,o.customer_idfrom customer cleft join orders o on c.id=o.customer_id

【實現步驟】

  1. 定義實體類
  2. 定義接口
  3. 配置SQL并完成數據映射
  4. 執行SQL
解決方案1:關聯查詢實現
定義實體類

基于表結構創建兩個實體類:客戶類(Customer)和訂單類(Order),因為客戶實體和訂單實體是1對多的關系,所以在客戶類中加入訂單類型的集合(List<Order>)屬性,表示一個客戶擁有多個訂單。

@Data
//訂單實體類
public class Order {private int id;private String orderNo;private BigDecimal price;private int customerId;
}
//客戶實體類
@Data
public class Customer {private int id;private String account;private String username;//一個客戶擁有多個訂單,體現1對多關系private List<Order> orders;
}
定義接口

在com.cg.mapper下新建一個接口CustomerMapper,接口中加入方法

public interface CustomerMapper {/*** 查詢所有的客戶列表(包含客戶的訂單列表)* @return 客戶列表*/List<Customer> selectCustomers();
}

配置SQL并完成數據映射

在src/main/resources/mapper下新建一個SQL映射文件CustomerMapper.xml,完成SQL配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cg.mapper.CustomerMapper"><!--定義查詢結果和Customer實體類映射關系--><resultMap id="customerOrderMap" type="Customer"><!-- 先設置Customer自身屬性和字段的對應關系 --><id column="id" property="id"/><result column="account" property="account"/><result column="username" property="username"/><!-- 使用collection標簽配置“一對多”關聯關系,也就是集合類型屬性的映射關系 --><!-- property屬性:集合類型屬性名 --><!-- ofType屬性:集合中的實體全類名 --><collection property="orders" ofType="Order"><!-- 配置Order實體類的屬性和字段的對應關系 --><id column="order_id" property="id"/><result column="order_no" property="orderNo"/><result column="price" property="price"/><result column="customer_id" property="customerId"/></collection></resultMap><!--關聯查詢SQL配置--><select id="selectCustomers" resultMap="customerOrderMap">select c.*,o.id as order_id,o.order_no,o.price,o.customer_idfrom customer cleft join orders oon c.id=o.customer_id</select>
</mapper>

注:

  • 一定要記得通過namespace關聯接口
  • 使用collection標簽配置“一對多”關聯關系,也就是集合類型屬性的映射關系
  • 新建的SQL映射文件需要在全局配置文件中配置地址
<!--SQL映射文件地址配置--><mappers><mapper resource="mapper/CustomerMapper.xml" /></mappers>
執行SQL

在測試方法中調用MyBatis API執行SQL,完成數據查詢。

@Testpublic void test2() throws IOException {//1.加載MyBatis核心配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//2.獲取SqlSessionFactory對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.獲取SqlSession會話對象SqlSession sqlSession = sqlSessionFactory.openSession();//4.執行SQL配置CustomerMapper customerMapper = sqlSession.getMapper(CustomerMapper.class);List<Customer> customers= customerMapper.selectCustomers();//5.處理結果for (Customer customer : customers) {System.out.println(customer);}//6.關閉數據庫會話sqlSession.close();}

控制臺打印結果如下,可以看到客戶劉丹擁有兩個訂單,客戶李義擁有1個訂單,客戶王偉擁有兩個訂單,客戶張慶沒有訂單。

==>  Preparing: select c.*, o.id as order_id,o.order_no,o.price,o.customer_id from customer c left join orders o on c.id=o.customer_id
==> Parameters: 
<==    Columns: id, account, username, order_id, order_no, price, customer_id
<==        Row: 1, 13996065424, 劉丹, 1, 10001, 234.00, 1
<==        Row: 2, 13996068885, 李義, 2, 10002, 115.00, 2
<==        Row: 1, 13996065424, 劉丹, 3, 10003, 214.00, 1
<==        Row: 4, 13996063954, 王偉, 4, 10004, 321.00, 4
<==        Row: 4, 13996063954, 王偉, 5, 10005, 115.00, 4
<==        Row: 3, 13996062222, 張慶, null, null, null, null
<==      Total: 6
Customer(id=1, account=13996065424, username=劉丹, orders=[Order(id=1, orderNo=10001, price=234.00, customerId=1), Order(id=3, orderNo=10003, price=214.00, customerId=1)])
Customer(id=2, account=13996068885, username=李義, orders=[Order(id=2, orderNo=10002, price=115.00, customerId=2)])
Customer(id=4, account=13996063954, username=王偉, orders=[Order(id=4, orderNo=10004, price=321.00, customerId=4), Order(id=5, orderNo=10005, price=115.00, customerId=4)])
Customer(id=3, account=13996062222, username=張慶, orders=[])
解決方案2:嵌套查詢實現

【練習】參考1對1關系任務中的解決方案2中嵌套查詢的實現原理,思考本任務如何使用嵌套查詢來實現?

【提示】結合本任務,首先執行主查詢“select * from customer”,查詢出所有的客戶信息列表,然后遍歷每一條客戶記錄,根據客戶信息的主鍵列(id)的值執行子查詢“select * from orders where customer_id=?”查詢出每位客戶的訂單列表,然后將查詢出的客戶以及訂單數據映射到到Customer實體類對象的屬性中完成數據映射。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75138.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【服務端】使用conda虛擬環境部署Django項目

寫在開頭 為了與客戶端的Deep search配合&#xff0c;需要整一個后臺管理來保存和管理deep search的數據資料。選擇前端框架Vue-Vben-Admin Django后臺服務來實現這個項目。 廢話結束&#xff0c;從零開始。。。。 一、環境搭建 1. 安裝 Anaconda 下載 Anaconda&#xff1…

Python爬蟲-爬取大麥網演出詳情頁面數據

前言 本文是該專欄的第50篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者以大麥網平臺為例。基于Python,實現獲取演出詳情頁面的演出信息。 廢話不多說,具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。接下來,跟著筆者直接往下看正文詳細內…

多onnx模型導出合并調研(文本檢測+方向分類+文本識別)

??主頁:吾名招財 ??簡介:工科學碩,研究方向機器視覺,愛好較廣泛… ???簽名:面朝大海,春暖花開! 多onnx模型合并導出調研(文本檢測+方向分類+文本識別) 引言1,嘗試合并兩個模型(文本方向分類+文本識別模型)(并行合并)(1)文本方向分類(2)文本識別模型(…

Flink介紹——實時計算核心論文之S4論文詳解

引入 在上一篇我們對Flink的發展歷史有了全局的了解&#xff0c;下面我們會通讀幾篇分布式實時處理相關的重要論文&#xff0c;從S4到Storm&#xff0c;再從MillWheel到Dataflow&#xff0c;最后到Flink。 通過深入梳理分布式實時處理技術的發展脈絡&#xff0c;了解這些年技…

【商城實戰(97)】ELK日志管理系統的全面應用

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…

Linux系統-ls命令

一、ls命令的定義 Linux ls命令&#xff08;英文全拼&#xff1a;list directory contents&#xff09;用于顯示指定工作目錄下之內容&#xff08;列出目前工作目錄所含的文件及子目錄)。 二、ls命令的語法 ls [選項] [目錄或文件名] ls [-alrtAFR] [name...] 三、參數[選項…

游戲被外掛攻破?金融數據遭篡改?AI反作弊系統實戰方案(代碼+詳細步驟)

一、背景與需求分析 隨著游戲行業與金融領域的數字化進程加速,作弊行為(如游戲外掛、金融數據篡改)日益復雜化。傳統基于規則的防御手段已難以應對新型攻擊,而AI技術通過動態行為分析、異常檢測等能力,為安全領域提供了革命性解決方案。本文以游戲反作弊系統和金融數據安…

Node.js 路由 - 初識 Express 中的路由

目錄 Node.js 路由 - 初識 Express 中的路由 1. 什么是路由&#xff1f; 2. 安裝 Express 3. 創建 server.js 4. 運行服務器 5. 測試路由 5.1 訪問主頁 5.2 訪問用戶路由 5.3 發送 POST 請求 6. 結語 1. 什么是路由&#xff1f; 路由&#xff08;Routing&#xff09…

面經-項目

項目 項目(重點)問題1:描述在網頁中題目點擊提交后到題目結果出現的一系列后臺反應【1】如何獲取到用戶提交的代碼的?【2】_1. 題目細節都有哪些?【2】_2. 題目信息怎么存儲的?【3】負載均衡算法的實現?【4】oj_server怎么連接對應的compile_server(編譯主機)的?【5】oj_…

網絡基本概念認識(2)

目錄 前言&#xff1a; 局域網協議 MAC/IP地址 Socket編程 TCP/UDP 網絡字節序 前言&#xff1a; 本文同樣作為博主的二刷網絡課程的文章&#xff0c;主要涵蓋的主題還是網絡基本概念的認識&#xff0c;從上一篇文章遺漏的點加上引入的一些知識點共同組成當前的知識點。…

Kafka中的消息是如何存儲的?

大家好&#xff0c;我是鋒哥。今天分享關于【Kafka中的消息是如何存儲的&#xff1f;】面試題。希望對大家有幫助&#xff1b; 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在 Kafka 中&#xff0c;消息是通過 日志&#xff08;Log&#xff09; 的方式進行存儲的。…

openEuler24.03 LTS下安裝ZooKeeper集群

目錄 前提條件 ZooKeeper集群規劃 下載ZooKeeper 解壓 配置環境變量 配置ZooKeeper 配置zoo.cfg 配置myid 分發到其他機器 修改其他機器myid 啟動集群 關閉集群 集群啟停腳本 前提條件 準備3臺Linux機器&#xff0c;并安裝好Java8 ZooKeeper集群規劃 node2node3…

Python 實現機器學習小項目實戰教程*

markdown 復制 Python 實現機器學習小項目實戰教程 本教程將通過一個完整的機器學習項目案例&#xff0c;從數據預處理到模型部署&#xff0c;幫助初學者快速掌握機器學習核心流程。項目以經典的鳶尾花分類為例&#xff0c;使用 Scikit-learn 庫實現。 1. 項目概述 目標 構…

rust學習筆記21-閉包

在 Rust 中&#xff0c;閉包&#xff08;Closures&#xff09; 是一種可以捕獲其環境中的變量的匿名函數。它們非常靈活&#xff0c;既可以作為普通函數使用&#xff0c;也可以捕獲和操作定義它們的作用域中的變量。閉包是 Rust 中處理短小邏輯代碼塊的強大工具&#xff0c;特別…

linux實現rsync+sersync實時數據備份

1.概述 rsync(Remote Sync) 是一個Unix/linux系統下的文件同步和傳輸工具 2.端口和運行模式 tcp/873 采用C/S模式&#xff08;客戶端/服務器模式&#xff09; 3.特點 可以鏡像保存整個目錄和文件第一次全量備份(備份全部的文件),之后是增量備份(只備份變化的文件) 4. 數…

【第30節】MFC編程:ListCtrl控件和TreeCtrl控件

目錄 引言 一、高級控件ListCtrl 二、高級控件TreeCtrl 三、Shell控件 四、CImageList 五、綜合代碼示例 引言 在MFC編程里&#xff0c;高級控件能大幅提升應用程序的交互性與功能性。接下來&#xff0c;咱們會詳細講講ListCtrl和TreeCtrl這兩個高級控件。不僅會介紹它們…

為什么 ThreadLocalMap 的 key 是弱引用 value是強引用

問題一&#xff1a;為什么 ThreadLocalMap 的 key 是弱引用&#xff1f; 【假設 Entry 的 key 是對 ThreadLocal 對象的強引用】&#xff1a;這個 Entry 又持有 ThreadLocal 對象和 value 對象的強引用。如果在其他地方都沒有對這個 ThreadLocla 對象的引用了、然后在使用 Thr…

DeepSeek本地部署(linux)

一、下載并安裝Ollama 1.下載Ollama Ollama官網:Ollama 點擊"Download",會跳轉至下載頁面。 1.1在線下載安裝 可復制此命令到Linux服務器進行在線下載,如下載速度過慢,可選擇離線下載安裝。 curl -fsSL https://ollama.com/install.sh | sh1.2離線下載安裝 …

基于Halcon仿VM流程列表的執行效果

Halcon本身應用需要一定的門檻&#xff0c;但是也可以封裝成類似VM簡單易操作的樣子 上期文章分享的是連線功能&#xff0c;本期分享數據傳參 1&#xff0c;定義通用屬性和方法 public class BaseModel {public HObject HInput { get; set; }//圖像輸入public HObject HOutpu…

打車APP訂單系統邏輯梳理與實現

一、邏輯分析 打車 APP 訂單系統是整個打車業務的核心&#xff0c;負責處理從乘客下單到行程結束的一系列流程&#xff0c;涉及乘客、司機和平臺三方的交互。 乘客端 下單&#xff1a;乘客打開 APP&#xff0c;輸入上車地點、目的地&#xff0c;選擇車型等信息后提交訂單。此時…