execute執行
執行sqlsessiontemplate中的方法
注釋:跟蹤sql
語句的原始碼過程
// mybatis-spring
public object invoke(object proxy, method method, object args) throws throwable catch (throwable var5)
} else
}
先判斷執行的方法是不是object類的方法,比如tostring
,hashcode
等方法,是的話則直接反射執行這些方法
// 根據方法從快取中獲取
// 不存在則建立乙個
// 放入快取
}}}判斷sql
的執行型別,執行相應的方法
}抽出這一段**跟蹤一下原始碼
// 其他型別
param = this.method.convertargstosqlcommandparam(args);
result = sqlsession.selectone(this.command.getname(), param);
paramnameresolver.getnamedparams
public object convertargstosqlcommandparam(object args)
解析@param註解
names
是sortedmap,在建構函式中賦值的,判斷入參有沒有@param
註解。
key是入參的順序,從0開始;value是@param
中的值
如果沒有@param
註解,則value值為arg0
、arg1
…
將入參名與值匹配
public object getnamedparams(object args) else
}return param;
}} else
}
示例1:多個入參,沒有加@param註解
@select("select count(0) from es_inter_invokfaillog where rownum = # and invok_type=#")
public integer selectany(int num,string type);
這樣執行sql
會報錯,找不到num
,可以改為#
或#
示例2:多個入參,加@param註解
示例3:多個入參,部分加@param註解,部分不加
提示:只有乙個入參時不存在這些問題,因為乙個入參直接返回的是它的值,是乙個string不是map這裡的sqlsession
就是sqlsessiontemplate,mybatis與spring的整合之sqlsessiontemplate
public t selectone(string statement, object parameter)
sqlsessionproxy
是動態**生成的,每一次執行方法時都會重新去new
乙個defaultsqlsession,可以看下invoke
方法部分**
// 獲取session,這裡有個事物的判斷
sqlsession sqlsession = sqlsessionutils.getsqlsession(sqlsessiontemplate.this.sqlsessionfactory, sqlsessiontemplate.this.executortype, sqlsessiontemplate.this.exceptiontranslator);
try
}
MyBatis核心元件Executor(一)
executor 是mybaits核心介面之一,定義了資料庫操作最基本的方法,sqlsession的功能都是基於它來實現的。這裡我們由上述executor類的query方法來了解下它的基礎實現類baseexecutor類 這裡它在查詢之前會先判斷是否設定了禁用一級快取,要是禁用的話,它在去快取之前會...
MyBatis核心之介面呼叫
在平時開發中,我們一般使用mybatis是這樣的 建立乙個介面 此處暫時忽略mybatis載入配置檔案的過程 public void update user user 配置乙個xml檔案 user name pass word where id 到這裡,就有乙個問題,介面是不能例項化的,那麼我們是怎...
NGUI核心元件之UIAtlas
uiatlas是乙個容器,他包含了許多sprite的座標資訊。如果你對這個概念不是很熟悉,你可以這樣理解 與使用很多小的貼圖來渲染ui相比,使用一張包含了所有小貼圖的大貼圖的效率要高許多。這些小的貼圖就被叫做sprite,這個大的貼圖就被叫做atlas。在使用ngui渲染任何東西之前,首先需要建立乙...