2024年150道高頻Java面試題(七十四)

147. 如何在 MyBatis 中實現一對多和多對一的關系映射?

在 MyBatis 中實現一對多(One-to-Many)和多對一(Many-to-One)的關系映射,主要是通過 <resultMap> 元素中的 <collection><association> 子元素來完成的。

1)一對多(One-to-Many)

一對多關系常見于一個父級實體對應多個子級實體的場景。以下是具體實現步驟:

  1. 實體類定義:在父級實體類中包含一個子級實體的集合。

    public class Parent {private int id;private List<Child> children;// getters and setters
    }
    public class Child {private int id;// getters and setters
    }
    
  2. Mapper XML配置:在 <resultMap> 中使用 <collection> 標簽定義子集。

    <resultMap id="parentWithChildren" type="Parent"><id column="parent_id" property="id"/><collection property="children" ofType="Child"><id column="child_id" property="id"/><!-- 其他字段映射 --></collection>
    </resultMap>
    
  3. 查詢語句:在 SQL 語句中使用 <resultMap>

    <select id="selectParentWithChildren" resultMap="parentWithChildren">SELECT p.*, c.*FROM parent pLEFT JOIN child c ON p.id = c.parent_idWHERE p.id = #{id}
    </select>
    
2)多對一(Many-to-One)

多對一關系通常是指多個子級實體對應一個父級實體。

  1. 實體類定義:在子級實體類中包含一個父級實體的引用。

    public class Child {private int id;private Parent parent;// getters and setters
    }
    
  2. Mapper XML配置:在 <resultMap> 中使用 <association> 標簽定義父級實體。

    <resultMap id="childWithParent" type="Child"><id column="child_id" property="id"/><association property="parent" javaType="Parent"><id column="parent_id" property="id"/><!-- 其他字段映射 --></association>
    </resultMap>
    
  3. 查詢語句

    <select id="selectChildWithParent" resultMap="childWithParent">SELECT c.*, p.*FROM child cLEFT JOIN parent p ON c.parent_id = p.idWHERE c.id = #{id}
    </select>
    

通過這樣的方式,MyBatis 提供了一種靈活且強大的機制來實現一對多和多對一的關系映射。

148. MyBatis 的事務管理是如何工作的?

MyBatis 的事務管理主要是通過在配置文件中定義事務管理器和事務隔離級別來實現的。MyBatis 支持兩種事務管理方式:JDBC 事務管理和 MANAGED 事務管理。

  1. JDBC 事務管理:
    • MyBatis 默認使用 JDBC 事務管理,它會將事務交給 JDBC 來控制。
    • 在 JDBC 事務管理方式下,MyBatis 會使用 Connection 對象的 setAutoCommit(false) 方法來關閉自動提交事務,然后執行一系列的 SQL 語句,最后可以選擇提交(commit())或回滾(rollback())事務。
    • 這種方式適用于單個數據庫連接,如果涉及到多個數據庫連接,需要手動處理事務傳播和同步。

以下是一個簡單的 JDBC 事務管理示例:

SqlSession sqlSession = sqlSessionFactory.openSession();
try {// 獲取Mapper接口的代理對象SomeMapper someMapper = sqlSession.getMapper(SomeMapper.class);// 執行一系列數據庫操作someMapper.updateData();someMapper.insertData();// 提交事務sqlSession.commit();
} catch (Exception e) {// 回滾事務sqlSession.rollback();
} finally {// 關閉SqlSessionsqlSession.close();
}
  1. MANAGED 事務管理:
    • MANAGED 事務管理是指 MyBatis 不管理事務,而是將事務管理交給容器(如 Spring 容器)來處理。
    • 在這種情況下,MyBatis 會忽略 commit 和 rollback 方法,因為它認為容器已經處理了這些操作。
    • 這種方式適用于分布式事務或者需要與其他事務資源(如消息隊列、分布式緩存等)一起工作的情況。

以下是一個簡單的 MANAGED 事務管理示例(在 Spring 環境中):

@Service
public class SomeService {@Autowiredprivate SomeMapper someMapper;@Transactionalpublic void someMethod() {// 執行一系列數據庫操作someMapper.updateData();someMapper.insertData();// 事務提交或回滾由Spring容器處理}
}

總的來說,MyBatis 的事務管理通過配置文件和編程方式實現,可以根據實際需求選擇適當的事務管理方式。在開發過程中,需要注意合理處理事務邊界、事務傳播行為和事務隔離級別,以確保數據的一致性和安全性。

編程資料包領取:https://pan.quark.cn/s/601cbea644ff
編程、AI、副業交流:https://t.zsxq.com/19zcqaJ2b
領【150 道精選 Java 高頻面試題】請 go 公眾號:碼路向前 。

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

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

相關文章

深度學習模型在OCR中的可解釋性問題與提升探討

摘要&#xff1a; 隨著深度學習技術在光學字符識別&#xff08;OCR&#xff09;領域的廣泛應用&#xff0c;人們對深度學習模型的可解釋性問題日益關注。本文將探討OCR中深度學習模型的可解釋性概念及其作用&#xff0c;以及如何提高可解釋性&#xff0c;使其在實際應用中更可…

在Linux系統上使用Nginx的詳解指南

目錄 簡介 準備工作 安裝Nginx 通過包管理器安裝 源碼編譯安裝 Nginx基礎配置 主配置文件nginx.conf詳解 基本服務器塊配置 SSL/TLS配置 動靜分離 反向代理配置 負載均衡配置 常見問題及解決方法 結論 1. 簡介 Nginx是一款高性能HTTP和反向代理服務器&#xff…

上位機圖像處理和嵌入式模塊部署(f103 mcu唯一的id)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】 對于stm32f103系列mcu來說,一般每一顆原廠的mcu,都會對應一個唯一的id。那這個id可以用來做什么用呢?個人認為,可以用來做激活使用。舉個例子,第一次mcu模塊使用的時候,一般可…

Java 零基礎入門學習(小白也能看懂!)

&#x1f4da;博客主頁&#xff1a;愛敲代碼的小楊. ?專欄&#xff1a;《Java SE語法》 | 《數據結構與算法》 | 《C生萬物》 |《MySQL探索之旅》 |《Web世界探險家》 ??感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb;&#xff0c;您的三連就是我持續更…

第16篇:JTAG UART IP應用<三>

Q&#xff1a;如何通過HAL API函數庫訪問JTAG UART&#xff1f; A&#xff1a;Quartus硬件工程以及Platform Designer系統也和第一個Nios II工程--Hello_World的Quartus硬件工程一樣。 Nios II軟件工程對應的C程序調用HAL API函數&#xff0c;如open用于打開和創建文件&#…

前端最新面試題(ES6模塊篇)

目錄 1 ES5、ES6和ES2015有什么區別? 2 babel是什么,有什么作用? 3 let有什么用,有了var為什么還要用let? 4 舉一些ES6對String字符串類型做的常用升級優化? 5 舉一些ES6對Array數組類型做的常用升級優化 6 舉一些ES6對Number數字類型做的常用升級優化 7 舉一些ES…

前端基礎入門三大核心之JS篇:JavaScript,不只是咖啡因那么簡單!—— 進階案例集錦篇

前端基礎入門三大核心之JS篇&#xff1a;解鎖JavaScript的魔法密鑰—— 進階案例集錦 &#x1f9d9; 基礎概念與作用&#xff1a;JS&#xff0c;不僅僅是“腳本”&#x1f4da; 變量聲明的進化史 &#x1f50d; 多維度功能使用&#xff1a;函數、數組與對象&#x1f916; 函數&…

前后端聯調小細節

前端向后端發數據&#xff0c;有時候前端和后端的字段是一樣的&#xff0c;字段沒有問題&#xff0c;前端發過來的載荷也沒有問題&#xff0c;但后端接收到的字段是null的&#xff0c;這時候可以排查前端發過來的數據是不是多嵌套了一層&#xff0c;比如發過來的是。 實例如下…

使用YOLOv9訓練和測試自己的數據集

任務&#xff1a;檢測舌頭上的裂紋和齒痕 已經有了labelme標注的數據集&#xff0c;并且轉為了coco格式 參考&#xff1a; 詳細&#xff01;正確&#xff01;COCO數據集&#xff08;.json&#xff09;訓練格式轉換成YOLO格式&#xff08;.txt&#xff09;_coco數據集的train…

服務器數據恢復—服務器raid常見故障表現原因解決方案

RAID&#xff08;磁盤陣列&#xff09;是一種將多塊物理硬盤整合成一個虛擬存儲的技術&#xff0c;raid模塊相當于一個存儲管理的中間層&#xff0c;上層接收并執行操作系統及文件系統的數據讀寫指令&#xff0c;下層管理數據在各個物理硬盤上的存儲及讀寫。相對于單獨的物理硬…

2023年全國青少年人工智能創新挑戰賽真題

為了大家備考2024年第七屆全國青少年人工智能創新挑戰賽&#xff0c;今天分享2023年第6屆全國青少年人工智能創新挑戰賽C信息學專項真題&#xff0c;圖形化編程及Python編程基本大同小異&#xff0c;參考6547網的Python及圖形化編程題庫。 一、單項選擇題(共 15 題,每題 2 分,共…

jpom linux發布前端 ruoyi

前置條件 輔助安裝 一鍵安裝maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一鍵安裝node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服務下載啟動 下載安裝 安裝服務 安裝服…

vscode中使用conda虛擬環境

每一次配置環境&#xff0c;真的巨煩&#xff0c;網上的資料一堆還得一個個嘗試&#xff0c;遂進行整理 1.準備安裝好Anaconda 附帶一篇測試教程&#xff0c;安裝anaconda 2.準備安裝vscode 安裝地址&#xff1a;Visual Studio Code 3.創建Conda環境 搜索框搜索Anaconda…

位運算符——原碼-反碼-補碼(重點 難點)【二進制在運算中的說明】

如果連二進制的知識還沒搞懂, 那么計算機最基礎的你都還沒明白, 所以2進制對我們程序員來說, 是必會, 必學的知識 二進制在運算中的說明: 一. 二進制是逢2進位的進位制, 0,1是基本算符 二. 現代的電子計算機技術全部采用的是二進制, 因為它只使用0, 1兩個數字符號,非常簡單…

Nginx添加訪問密碼

安裝密碼生成工具 yum -y install httpd-tools生成用戶和密碼文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 這里輸入密碼 Re-type new password: 再次輸入密碼 Adding password for user web01參數說明&#xff1a; web01 是自定…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《計及液態空氣儲能與綜合需求響應的綜合能源系統低碳經濟調度》

本專欄欄目提供文章與程序復現思路&#xff0c;具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

HTML靜態網頁成品作業(HTML+CSS)——游戲陰陽師介紹網頁(4個頁面)

&#x1f389;不定期分享源碼&#xff0c;關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 &#x1f3f7;?本套采用HTMLCSS&#xff0c;未使用Javacsript代碼&#xff0c;共有4個頁面。 二、作品演示 三、代…

Android ANR簡介

ANR&#xff08;App not respond&#xff09;是Android定義的一種穩定性問題類型&#xff1b;系統發出關鍵消息&#xff0c;同時發出此消息的超時消息。處理邏輯有兩種情況&#xff1a; 關鍵消息被執行&#xff0c;超時消息被清除&#xff1b;ANR不會發生超時消息被執行&#x…

JAVASE2

封裝的步驟&#xff1a; 1、所有屬性私有化&#xff0c;使用private關鍵字進行修飾&#xff0c;private表示私有的&#xff0c;修飾的所有數據只能在本類中訪問 2、對外提供簡單入口&#xff1a;比如說被private修飾的成員變量&#xff0c;在其他類中只能通過getXxx/setXxx方法…

網絡風暴:揭秘DDoS攻擊的幕后黑手

在數字化時代的浪潮中&#xff0c;網絡攻擊已成為一種新型的戰爭手段。其中&#xff0c;分布式拒絕服務攻擊&#xff08;DDoS&#xff09;以其強大的破壞力和隱蔽性&#xff0c;成為網絡安全領域的一大挑戰。DDoS攻擊通過發動海量的惡意流量&#xff0c;如同狂風暴雨般席卷目標…