Mybatis源碼解析之執行SQL語句
作者:鄭志傑 mybatis 操作數據庫的過程 // 第一步:讀取mybatis-config.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 第二步:構建SqlSessionFactory(框架初始化) SqlSessionFactory sqlSessionFac
昵称 京東雲開發者
贡献者18
粉丝0
作者:鄭志傑 mybatis 操作數據庫的過程 // 第一步:讀取mybatis-config.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 第二步:構建SqlSessionFactory(框架初始化) SqlSessionFactory sqlSessionFac
昵称 京東雲開發者
目錄 開撕MyBatis源碼 1. 手寫持久層框架-ipersistent 1.1 JDBC操作數據庫\_問題分析 1.2 JDBC問題分析解決思路 1.3 自定義持久層框架\_思路分析 使用JDBC和使用持久層框架區別: 框架,除了思考本身的工程設計,還需要考慮到實際項
昵称 eacape
前言: Java 領域的ORM(Object-Relational Mapping)框架有很多,各家的性能和使用體驗如何?本文將對比體驗以下的Java ORM框架,包括Spring JDBC、Spring Data JPA + Hibernate、QueryDSL、jOOQ、GraphQL、MyBatis、MyBatis-dynamic-sql、MyBatis-plus、Fluent-mybati
昵称 JerryMa
項目介紹 MiniDao 是一款輕量級JAVA持久層框架,基於 SpringJdbc + freemarker 實現,具備Mybatis一樣的SQL分離和邏輯標籤能力。Minidao產生的初衷是為了解決Hibernate項目,在複雜SQL具備Mybatis一樣的靈活能力,同時支持事務同步。 當前版本:v1.8.3 | 2021-08-09 源碼下載 https://github.com/zha
昵称 JEECG低代碼平台
由於編程思想與數據庫的設計模式不同,生出了一些 ORM 框架。核心都是將關係型數據庫和數據轉成對象型。當前流行的方案有 Hibernate 與 myBatis。兩者各有優劣。競爭激烈,其中一個比較重要的考慮的地方就是性能。因此筆者通過各種實驗,測出兩個在相同情景下的性能相關的指數,供大家參考。 測試目標 以下測試需要確定幾點內容:性能差異的場景;性能不在同場景下差異比;找出各架框優劣,各種情
昵称 小谷哥
關鍵詞: mybatis、foreach、foreach context scope、MyBatis3.4.5、BindingException 背景: 隨着團隊開發人數越來越多,項目迭代越來越久,加上一些半吊子開發的盲目自信,項目如果不夠健壯,就會出現莫名其妙的問題,甚至讓測試團隊對某些開發一瞬間喪失全部信任。 起因是團隊有150多個服務的分佈式微服務項目,服務之間有RPC調用關係,也有公
昵称 witt
主要構件及其相互關係 主要構件: 主要的核心部件解釋如下: SqlSession: 作為MyBatis工作的主要頂層API,表示和數據庫交互的會話,完成必要數據庫增刪改查功能 Executor:MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護 StatementHandler: 封裝了JDBC Statement操作,負責對JDBC stateme
昵称 程序員Seven
sqlSessionFactory 與 SqlSession 正如其名,Sqlsession對應着一次數據庫會話。由於數據庫會話不是永久的,因此Sqlsession的生命週期也不應該是永久的,相反,在你每次訪問數據庫時都需要創建它(當然並不是説在Sqlsession裏只能執行一次sql,你可以執行多次,當一旦關閉了Sqlsession就需要重新創建它)。 那麼咱們就先看看是怎麼獲取SqlSessi
昵称 程序員Seven
引入 我們在使用mybatis的時候,會在xml中編寫sql語句。比如這段動態sql代碼: update id="update" parameterType="org.format.dynamicproxy.mybatis.bean.User" UPDATE users trim prefix="SET" prefixOverrides="," if test="n
昵称 程序員Seven
MyBatis數據源DataSource分類 MyBatis把數據源DataSource分為三種: UNPOOLED 不使用連接池的數據源 POOLED 使用連接池的數據源 JNDI 使用JNDI實現的數據源 相應地,MyBatis內部分別定義了實現了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource類來表示UNPOOLED
昵称 程序員Seven
源碼分析 插件機制 首先我們看下MyBatis攔截器的接口定義: public interface Interceptor { Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target); void setProperties(Properties propertie
昵称 程序員Seven
這些都是面試常見的問題,看看下面的問題你都能答得上來嗎? 1.什麼是 MyBatis?它有哪些主要特性和優勢? 2. mybatis 和數據庫交互的原理? 3. mybatis 中#{}、${}的區別 4. Mybatis 自帶連接池都有什麼? 5. Mybatis 的一級、二級緩存? 6. MyBatis 是如何進行分頁的?分頁插件的原理是什麼? 7. m
昵称 王中陽講編程
概述 對數據庫的事務而言,應該具有以下幾點:創建(create)、提交(commit)、回滾(rollback)、關閉(close)。對應地,MyBatis將事務抽象成了Transaction接口: MyBatis的事務管理分為兩種形式: 使用JDBC的事務管理機制:即利用java.sql.Connection對象完成對事務的提交(commit())、回滾(rollback())、關閉(cl
昵称 程序員Seven
一級緩存實現 什麼是一級緩存? 為什麼使用一級緩存? 每當我們使用MyBatis開啓一次和數據庫的會話,MyBatis會創建出一個SqlSession對象表示一次數據庫會話。 在對數據庫的一次會話中,我們有可能會反覆地執行完全相同的查詢語句,如果不採取一些措施的話,每一次查詢都會查詢一次數據庫,而我們在極短的時間內做了完全相同的查詢,那麼它們的結果極有可能完全相同,由於查詢一次數據庫的代價很大,這
昵称 程序員Seven
大家好,我是半夏之沫 😁😁 一名金融科技領域的JAVA系統研發😊😊 我希望將自己工作和學習中的經驗以最樸實,最嚴謹的方式分享給大家,共同進步👉💓👈 👉👉👉👉👉👉👉👉💓寫作不易,期待大家的關注和點贊💓👈👈👈👈👈👈👈👈 👉👉👉👉👉👉👉👉💓關注微信公眾號【技術探界】 💓👈👈👈👈👈👈👈👈 前言
昵称 半夏之沫
配置解析主體方法 public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; //源碼中沒有這一句,只有 parse
昵称 程序員Seven
大家好,我是V哥,2025年的春招馬上就是到來,正在準備求職的朋友過完年,也該收收心,好好思考一下自己哪些技術點還需要補一補了,今天 V 哥要跟大家聊的是MyBatis框架的問題,站在一個高級程序員的角度,我們要如何去思考面試官的問題,馬上開整。 在梳理面試問題之前,V 哥通過千場面試官經驗先從重點定位給大家一些建議,看看是不是這個道理。 前菜很重要 正在準備2025年春招的求職者,特別是針對My
昵称 威哥愛編程
問題背景 在本地環境下,我們以POST方式向Spring Boot應用發起請求,這是一個查詢部門信息的地址。 請求信息:http://localhost:8080/depts 當使用接口測試工具進行接口測試後,報錯如下: { "timestamp": "2025-04-13T10:46:20.933+00:00", "status": 406, "error": "Not
昵称 猿道
作為 Java 後端開發,你是否曾經糾結過:查詢用户信息時,要不要把用户關聯的訂單、地址一起查出來?全部查詢性能肯定受影響,可不查又怕後面用到時反覆訪問數據庫。這種"查不查"的兩難抉擇,其實可以通過 MyBatis 的延遲加載機制漂亮解決。那麼問題來了,MyBatis 到底支持延遲加載嗎?它背後的實現原理又是什麼? MyBatis 的延遲加載支持情況 MyBatis 確實支持延遲加載(Lazy L
昵称 異常君
🚀 最強 Mybatis 代碼提示插件 —— MybatisCodeHelperPro 在寫 Mybatis 的時候,XML 經常沒有代碼提示,開發體驗很差。最近發現了 IntelliJ 下的插件 MybatisCodeHelperPro,寫 Mybatis 代碼時全程代碼提示,非常方便! ✨ #{} 語句智能提示,支持複雜類型 寫 SQL 時輸入 #{},插件會自動提示可用參數,支持對象屬性
昵称 猴哥哈哈
報錯一: Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1 解決辦法: setting - Editor - File Encodings,編碼方式都選擇UTF-8 報錯二: Cause: java.sql
昵称 悲傷的鴨蛋
聲明環境 數據庫:MySQL8.0 springboot框架:使用阿里雲的腳手架 Java:17 常見錯誤 MySQL密碼錯誤 數據庫密碼錯了,到你的application.properties配置文件檢查一下你的MySQL密碼是否輸錯了 找不到數據庫 找不到數據庫,到你的application.properties配置文件檢查一下你的數據庫是不是填錯了或少打多打都用可
昵称 飛天鑄幣
今天練習項目的時候爆了一個錯誤 它爆的錯誤我不認識,所有我想自己先找找看,但是找了好久還沒發現,於是乎問了一下deep seek,它告訴我這個錯誤是MyBatis的OGNL表達式解析異常,就是説在解析動態SQL語言中遇到了一個感嘆號,於是乎,我猜應該是mapper映射文件中的動態SQL寫錯了,找了一下還真是,附上粗心的代碼 在查詢語句的時候,由於粗心少些了一個=號就變成
昵称 飛天鑄幣
分享一些我最近都在用的關於spring和mybatis註解 Spring(Spring boot) 聲明bean註解 @Component 它是一個spring組件掃描的基礎註解,用於標識一個普通bean對象,當被spring的掃描器掃到時,會自動創建為bean對象並放入spring容器管理中其默認名稱是類名首字母小寫。 它可以被@Controller(控制層)、@Service(業務層)、
昵称 飛天鑄幣