原创 Mybatis 源碼分析(2)—— 參數處理

Mybatis對參數的處理是值得推敲的,不然在使用的過程中對發生的一系列錯誤直接懵逼了。 以前遇到參數綁定相關的錯誤我就是直接給加@param註解,也稀裏糊塗地解決了,但是後來遇到了一些問題推翻了我的假設:單個參數不需要使用 @p

原创 Mybatis源碼分析(4)—— Mapper的創建和獲取

Mybatis我們一般都是和Spring一起使用的,它們是怎麼融合到一起的,又各自發揮了什麼作用? 就拿這個Mapper來說,我們定義了一個接口,聲明瞭一個方法,然後對應的xml寫了這個sql語句, 它怎麼就執行成功了?這傢伙是怎

原创 Mybatis 源碼分析(8)—— 一二級緩存

一級緩存 其實關於 Mybatis 的一級緩存是比較抽象的,並沒有什麼特別的配置,都是在代碼中體現出來的。 當調用 Configuration 的 newExecutor 方法來創建 executor: public Execut

原创 Mybatis源碼分析(7)—— 結果集處理

解析封裝 ResultMap 是和結果集相關的東西,最初在解析 XML 的時候,於 parseStatementNode 方法中,針對每一個 select 節點進行解析,轉換爲 MappedStatement(類似 Spring

原创 Mybatis 源碼分析(9)—— 事物管理

Mybatis 提供了事物的頂層接口: public interface Transaction { /** * Retrieve inner database connection * @return Data

原创 Mybatis源碼分析(6)—— 從JDBC看Mybatis的設計

Java數據庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。 六步流程: 加載驅動(5.

原创 Mybatis源碼分析(1)—— Mapper文件解析

感覺CSDN對markdown的支持不夠友好,總是伴隨各種問題,很惱火! xxMapper.xml的解析主要由XMLMapperBuilder類完成,parse方法來完成解析: public void parse() {

原创 Mybatis源碼分析(5)—— 插件的原理

MyBatis 允許你在已映射語句執行過程中的某一點進行攔截調用。 默認情況下,可以使用插件來攔截的方法調用包括: Executor (update, query, flushStatements, commit, rollba

原创 Mybatis源碼分析(3)—— 從Mybatis的視角去看Bean的初始化流程

不涉及Spring完整的啓動流程,僅僅從Mybatis的視角去分析幾個關鍵的方法,找到Mybatis是如何通過這幾個擴展點植入進去的,反過來看Spring是如何設計,埋下這些伏筆,實現其可擴展性。 springContext-my

原创 DelegatingFilterProxy幹了什麼?

org.springframework.web.filter.DelegatingFilterProxy 一般情況,創建一個Filter是交給自己來實現的。基於servlet規範,在web.xml中配置,自定義filter實現

原创 方法調用

解析 所有方法調用中的目標方法在Class文件裏面都是一個常量池中的符號引用,在類加載的解析階段,會將其中的一部分符號引用轉化爲直接引用,這種解析能成立的前提是:方法在程序真正運行之前就有一個可確定的調用版本,並且這個方法的調用版

原创 Shiro過濾器的維護與匹配執行

servlet的初始化會觸發核心過濾器的創建: public Object getObject() throws Exception { if (instance == null) { instance =

原创 Java虛擬機結構

運行時數據區 PC寄存器 每一條Java虛擬機線程都有自己的pc寄存器。在任意時刻,一條Java虛擬機線程只會執行一個方法的代碼,這個正在被線程執行的方法稱爲該線程的當前方法。如果這個方法不是native的,那pc寄存器就保存Ja

原创 取消與關閉

任務取消 中斷 線程中斷是一種協作機制,線程可以通過這種機制來通知另一個線程,告訴它在合適的或者可能的情況下停止當前工作,並轉而執行其他的工作。 public class Thread{ public void inter

原创 ShiroFilterFactoryBean分析

創建核心Filter 同其他框架一樣,都有個切入點,這個核心Filter就是攔截所有請求的。 通過web.xml中配置的Filer進入,執行init方法獲取這個instance,調用下面的createInstance方法創建核心F