MySQL多表聯查

一、數據庫表結構

假設我們有兩個表:users?和?ordersusers?表存儲用戶信息,orders?表存儲訂單信息,一個用戶可以有多個訂單,通過?user_id?關聯兩個表。

users?表
字段名數據類型描述
user_idINT用戶 ID,主鍵
nameVARCHAR用戶姓名
emailVARCHAR用戶郵箱
orders?表
字段名數據類型描述
order_idINT訂單 ID,主鍵
order_dateDATE訂單日期
user_idINT用戶 ID,外鍵,關聯?users?表的?user_id

二、多表聯查類型及對應的 MyBatis 和 DAO 代碼

1. 內連接(INNER JOIN):

內連接只返回兩個表中匹配的行。

MyBatis Mapper XML 文件(UserOrderMapper.xml

<?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.example.dao.UserOrderDao"><select id="getUserOrdersInnerJoin" resultType="java.util.Map">SELECT users.user_id, users.name, orders.order_id, orders.order_dateFROM usersINNER JOIN orders ON users.user_id = orders.user_id;</select>
</mapper>

DAO 接口(UserOrderDao.java

package com.example.dao;import java.util.List;
import java.util.Map;public interface UserOrderDao {List<Map<String, Object>> getUserOrdersInnerJoin();
}

2. 左連接(LEFT JOIN)

左連接返回左表中的所有行,以及右表中匹配的行。如果右表中沒有匹配的行,則返回?NULL

MyBatis Mapper XML 文件(UserOrderMapper.xml
<select id="getUserOrdersLeftJoin" resultType="java.util.Map">SELECT users.user_id, users.name, orders.order_id, orders.order_dateFROM usersLEFT JOIN orders ON users.user_id = orders.user_id;
</select>

DAO 接口(UserOrderDao.java

List<Map<String, Object>> getUserOrdersLeftJoin();

3. 右連接(RIGHT JOIN)

右連接返回右表中的所有行,以及左表中匹配的行。如果左表中沒有匹配的行,則返回?NULL

MyBatis Mapper XML 文件(UserOrderMapper.xml

<select id="getUserOrdersRightJoin" resultType="java.util.Map">SELECT users.user_id, users.name, orders.order_id, orders.order_dateFROM usersRIGHT JOIN orders ON users.user_id = orders.user_id;
</select>

DAO 接口(UserOrderDao.java

List<Map<String, Object>> getUserOrdersRightJoin();

代碼解釋

  • Mapper XML 文件:定義了 SQL 查詢語句,通過?select?標簽指定查詢的 ID 和返回結果類型。
  • DAO 接口:定義了調用 SQL 查詢的方法,返回值類型與 Mapper XML 中指定的?resultType?相對應。

使用示例

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.List;
import java.util.Map;public class Main {public static void main(String[] args) throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);try (SqlSession session = sqlSessionFactory.openSession()) {UserOrderDao userOrderDao = session.getMapper(UserOrderDao.class);List<Map<String, Object>> userOrders = userOrderDao.getUserOrdersInnerJoin();for (Map<String, Object> order : userOrders) {System.out.println(order);}}}
}

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

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

相關文章

如何遷移AxureCloud到新服務器?

前言 常有朋友遇到在更換服務器時或者本地AxureCloud遷移到服務器上時&#xff0c;如何正確遷移AxureCloud&#xff0c;讓原有的原型可以正常訪問呢&#xff1f; 事前準備 Navicat&#xff1a;用于遷移數據庫。 AxureCloud&#xff1a;和原安裝版本一致。 MySQL&#xff1…

CSGO 皮膚交易平臺后端 (Spring Boot) 代碼結構與示例

csgo-market/ ├── pom.xml (or build.gradle) └── src/└── main/├── java/│ └── com/│ └── yourcompany/│ └── csgomarket/│ ├── CsgomarketApplication.java # Spring Boot 啟動類│ ├── conf…

mac Python多版本第三方庫的安裝路徑

終端查看python版本是 3.12&#xff0c;但是pycharm使用的python版本是 3.9 終端正常安裝包以后&#xff0c;pycharm都可以正常使用&#xff0c;但是將 pycharm的python換成 3.12 版本&#xff0c;之前安裝的庫都沒有了 通過終端查看安裝庫的位置&#xff0c;確實是安裝到py…

Java常用異步方式總結

使用建議 完整代碼見https://gitee.com/pinetree-cpu/parent-demon 提供了postMan調試json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可導入postMan中進行調試 Java異步方式以及使用場景 繼承Thread類 新建三個類繼承Thread&…

【VUE3】Pinia

目錄 0前言 1 手動添加Pinia 2 創建與使用倉庫&#xff08;Setup Store 組合式&#xff09; 2.1 創建倉庫 2.2 使用倉庫數據 2.3 解構響應式數據 3 持久化插件 0前言 官網&#xff1a;Pinia | The intuitive store for Vue.js 1 手動添加Pinia 上手之后&#xff0c;可…

JVM 每個區域分別存儲什么數據?

JVM&#xff08;Java Virtual Machine&#xff09;的運行時數據區&#xff08;Runtime Data Areas&#xff09;被劃分為幾個不同的區域&#xff0c;每個區域都有其特定的用途和存儲的數據類型。以下是 JVM 各個區域存儲數據的詳細說明&#xff1a; 1. 程序計數器 (Program Cou…

C++中shared_ptr 是線程安全的嗎?

在 C 中&#xff0c;shared_ptr 的線程安全性和實現原理可以通過以下方式通俗理解&#xff1a; 1. shared_ptr 是線程安全的嗎&#xff1f; 答案&#xff1a;部分安全&#xff0c;需分場景&#xff01; 安全的操作&#xff1a; 引用計數的增減&#xff1a;多個線程同時復制或銷…

什么是 CSSD?

文章目錄 一、什么是 CSSD&#xff1f;CSSD 的職責 二、CSSD 是如何工作的&#xff1f;三、CSSD 為什么會重啟節點&#xff1f;情況一&#xff1a;網絡和存儲都斷聯&#xff08;失聯&#xff09;情況二&#xff1a;收到其他節點對自己的踢出通知&#xff08;外部 fencing&#…

arm64平臺下linux訪問寄存器

通用寄存器 示例&#xff1a;讀取寄存器值 // 用戶態程序或內核代碼中均可使用 unsigned long reg_value; asm volatile ("mov %0, x10" // 將X10的值保存到reg_value變量: "r" (reg_value) ); printk("X10 0x%lx\n", reg_value);示例&…

超級好用的小軟件,連接電腦和手機。

將手機變成電腦攝像頭的高效工具Iriun Webcam是一款多平臺軟件&#xff0c;能夠將手機攝像頭變成電腦的攝像頭&#xff0c;通過簡單的設置即可實現視頻會議、直播、錄制等功能。它支持Windows、Mac和Linux系統&#xff0c;同時兼容iOS和Android手機&#xff0c;操作簡單&#x…

Mysql MIC高可用集群搭建

1、介紹 MySQL InnoDB Cluster&#xff08;MIC&#xff09;是基于 MySQL Group Replication&#xff08;MGR&#xff09;的高可用性解決方案&#xff0c;結合 MySQL Shell 和 MySQL Router&#xff0c;提供自動故障轉移和讀寫分離功能&#xff0c;非常適合生產環境 2、部署 …

PERL開發環境搭建>>Windows,Linux,Mac OS

特點 簡單 快速 perl解釋器直接對源代碼程序解釋執行,是一個解釋性的語言, 不需要編譯器和鏈接器來運行代碼>>速度快 靈活 借鑒了C/C, Basic, Pascal, awk, sed等多種語言, 定位于實用性語言,既具備了腳本語言的所有功能,也添加了高級語言功能 開源.免費 沒有&qu…

ubuntu改用戶權限

在 Linux 系統中&#xff0c;賦予普通用戶 sudo 權限可以讓他們執行一些需要 root 權限的命令&#xff0c;而不需要頻繁切換到 root 用戶。以下是具體步驟&#xff1a; 創建用戶(useradd和adduser兩種方式) 首先&#xff0c;需要創建一個新的用戶。可以使用 adduser 或 usera…

藍橋杯 web 學海無涯(axios、ecahrts)版本二

答案&#xff1a; // TODO: 待補充代碼// 初始化圖表的數據&#xff0c;設置周視圖的初始數據 option.series[0].data [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 周數據&#xff08;每周的總學習時長&#xff09; option.xAxis.data ["2月第1周", "…

Java 大視界 -- Java 大數據在智慧文旅虛擬場景構建與沉浸式體驗增強中的技術支撐(168)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

API vs 網頁抓取:獲取數據的最佳方式

引言 在當今數字化時代&#xff0c;對于企業、研究人員以及開發人員而言&#xff0c;獲取準確且及時的數據是大多數項目成功的關鍵因素。目前&#xff0c;收集網頁數據主要有兩種常用方法&#xff0c;即使用 API&#xff08;應用程序接口&#xff09;和網頁抓取。然而&#xf…

車載以太網網絡測試-25【SOME/IP-報文格式-1】

目錄 1 摘要2 SOME/IP-報文格式2.1 **Service ID / 16 bits**2.2 **Method ID / Event ID / 16 bits**2.3 **Length / 32 bits**2.4 **Client ID / 16 bits**2.5 Session ID / 16 bits2.6 Protocol Version / 8 bits2.7 Interface Version / 8 bits2.8 Message Type / 8 bits2.…

Python數據可視化-第3章-圖表輔助元素的定制

環境 開發工具 VSCode庫的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本書為《Python數據可視化》一書的配套內容&#xff0c;本章為第3章-圖表輔助元素的定制 本章主要介紹了圖表輔助元素的定制&#xff0c;包括認識常用的輔助元素、設置坐標軸的標簽、設置刻度范…

小程序30-wxml語法-聲明和綁定數據

小程序頁面中使用的數據均需要在Page() 方法的 data對象中進行聲明定義 在將數據聲明好以后&#xff0c;在 WXML 使用 Mustache 語法 ( 雙大括號{{ }} ) 將變量包起來&#xff0c;從而將數據綁定 在 {{ }} 內部可以做一些簡單的運算&#xff0c;支持如下幾種方式: 算數運算三…

ubuntu開啟黑屏現象解決

文章目錄 前言一、問題描述二、解決方案1. 檢查顯卡驅動解決步驟&#xff1a; 2. 修復 GRUB 配置解決步驟&#xff1a; 3. 使用恢復模式解決步驟&#xff1a; 三、驗證與總結 前言 在使用 Ubuntu 操作系統時&#xff0c;一些用戶可能會遇到開機后屏幕黑屏的現象。這種問題可能…