這篇文章的主要是目的是解釋清楚datasourceproxy、connectionproxy、statementproxy幾個proxy**各自的實現以及相互之間的聯絡。
希望通過這篇文章,能夠解釋清楚乙個核心問題,就是上述的三個proxy是如何實現**並同時保證和原有的jdbc的資料訪問邏輯保持不變。
當然,我個人覺得只有理清楚了三個**的實現機制以後,才能更好的理解rm的工作原理。
}說明:
說明:
說明:
datasourceproxy原始碼介紹
public abstract class abstractdatasourceproxy implements datasource
public druiddatasource gettargetdatasource()
@override
public t unwrap(classiface) throws sqlexception
@override
}@override
public printwriter getlogwriter() throws sqlexception
@override
public void setlogwriter(printwriter out) throws sqlexception
@override
public void setlogintimeout(int seconds) throws sqlexception
@override
public int getlogintimeout() throws sqlexception
@override
public logger getparentlogger() throws sqlfeaturenotsupportedexception
}
public class datasourceproxy extends abstractdatasourceproxy implements resource
public datasourceproxy(druiddatasource targetdatasource, string resourcegroupid)
private void assertmanaged()
}public connection getplainconnection() throws sqlexception
public string getdbtype()
@override
public connectionproxy getconnection() throws sqlexception
@override
public connectionproxy getconnection(string username, string password) throws sqlexception
@override
public string getresourcegroupid()
@override
public string getresourceid()
}
說明:
說明:
connectionproxy原始碼介紹
public abstract class abstractconnectionproxy implements connection
public datasourceproxy getdatasourceproxy()
public connection gettargetconnection()
public string getdbtype()
@override
public statement createstatement() throws sqlexception
@override
public preparedstatement preparestatement(string sql) throws sqlexception
@override
public callablestatement preparecall(string sql) throws sqlexception
}
public class connectionproxy extends abstractconnectionproxy
@override
public void commit() throws sqlexception catch (transactionexception e)
try
targetconnection.commit();
} catch (throwable ex) else
}report(true);
context.reset();
} else
}private void register() throws transactionexception
@override
public void rollback() throws sqlexception }
context.reset();}}
說明:
說明:
public abstract class abstractstatementproxyimplements statement
public abstractstatementproxy(connectionproxy connectionproxy, t targetstatement)
throws sqlexception
public abstractconnectionproxy getconnectionproxy()
public t gettargetstatement()
public string gettargetsql()
}
public class statementproxyextends abstractstatementproxy
throws sqlexception
@override
public connectionproxy getconnectionproxy()
@override
public resultset executequery(string sql) throws sqlexception
}, sql);
}@override
public int executeupdate(string sql) throws sqlexception
}, sql);
}@override
public boolean execute(string sql) throws sqlexception
}
說明: 建立主鍵 建立外來鍵 建立約束
建立主鍵 三種方法 建立學生表 第一種 create table student sno char 5 primary key,學號 可以直接指定主鍵 sname char 20 not null,姓名 s char 3 not null,性別 sage integer not null,年齡 sd...
Oracle建立儲存過程 建立函式 建立包
一 oracle建立儲存過程 1 基本語法 create orreplace procedureupdate emp sal name inout type,name inout type,is begin endupdate emp sal 2 寫乙個簡單的例子修改emp表的ename欄位 cre...
Oracle建立儲存過程 建立函式 建立包
一 oracle建立儲存過程 1 基本語法 create or replace procedure update emp sal name in out type,name in out type,is begin end update emp sal 2 寫乙個簡單的例子修改emp表的ename欄...