string resource = "mybatis-config.xml"
;inputstream inputstream = resources.getresourceasstream(resource);
sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream);
//建立sqlsession
sqlsession session = sqlsessionfactory.opensession();
try finally
前面五句是讀取配置檔案,然後構建sqlsessionfactory和sqlsession,具體怎麼解析配置檔案,再構建sqlsessionfactory現在暫時不看,我們現在主要看看怎麼拿到sql語句,然後去資料庫執行。
重點在sqlsession的selectone實現:
org.apache.ibatis.session.defaults.defaultsqlsession
selectone方法:
public
t selectone(string statement, object parameter) else
if (list.size() > 1) else
}
這邊selectone方法就是selectlist後,再拿第乙個。正常邏輯。
selectlist方法:
public
list
selectlist(string statement, object parameter, rowbounds rowbounds) catch (exception e) finally
}
rowbounds:查詢列表時的limit限制。包括offset(偏移量)和limit(大小)。
select * from person where id = #
select>
list
result = executor.query(ms, wrapcollection(parameter), rowbounds, executor.no_result_handler);
executor是哪兒來的?
我能說是在opensession的時候建立的。然後以後再看嗎?
好吧,我錯了。上**
org.apache.ibatis.session.defaults.defaultsqlsessionfactory#opensessionfromdatasource
private sqlsession opensessionfromdatasource(executortype exectype, transactionisolationlevel level, boolean autocommit) catch (exception e) finally
}
就是在opensession的時候建立的。根據tx(事務管理器),和執行器型別建立的。這裡面就不深究下去了。因為太深。還是以後有功夫再看吧。
回到selectlist。
看executor.query的引數。
第乙個是ms,上面講到的sql語句的一些環境配置資訊。
第二個是引數,sql要執行的引數。這裡做了乙個wrapcollection。實際上就是list和array塞到map中,好方面之後獲取。
private object wrapcollection(final object object) else
if (object != null && object.getclass
().isarray
())
return
object;
}
第三個是rowbounds上面也講到了。
最後乙個是resulthandler就是結果處理器,sql執行完後,怎麼印射到相應物件中。
靠。就講了乙個方法要一章節啊。煩不煩啊!
附這節的uml圖:
別問我為什麼帶個2.
mybatis原始碼解讀(7)
private void typealiaseselement xnode parent else else catch classnotfoundexception e alias author type domain.blog.author alias blog type domain.blog...
spring session原始碼解讀 3
省略 sessionrepositoryfilter繼承了onceperrequestfilter,父類的dofilter最終會將具體的處理邏輯交給子類處理。abstract class onceperrequestfilter implements filter else onceperreque...
mobx原始碼解讀3
計算屬性 function todo var vm new todo mobx.autorun function 這種方式 已經被廢掉 要求使用修飾符或修飾方法 function todo this var vm new todo mobx.autorun function 也可以使用ie8發明的g...