MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          ibatis原理與源碼分析

          Posted on 2011-03-17 00:44 leekiang 閱讀(3784) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): ibatis
          ? //SqlMapClientBuilder的buildSqlMapClient(Reader reader)方法
          public static SqlMapClient buildSqlMapClient(Reader reader) {
          ??? return new SqlMapConfigParser().parse(reader);
          ? }

          ? //SqlMapConfigParser的parse(Reader reader)方法
          ? public SqlMapClient parse(Reader reader) {
          ??? try {
          ????? usingStreams = false;
          ????? parser.parse(reader);//此處的parser是NodeletParser
          ????? return state.getConfig().getClient();
          ??? } catch (Exception e) {
          ????? throw new RuntimeException("Error occurred.? Cause: " + e, e);
          ??? }
          ? }
          ?在new SqlMapConfigParser()時(shí)就預(yù)先對(duì)配置文件xml的各個(gè)節(jié)點(diǎn)上要執(zhí)行哪些事件做了定義(就是一些回調(diào)方法),放在NodeletParser對(duì)象的一個(gè)HashMap屬性里,真正調(diào)用這些方法是在nodeletParser.parse(reader)里完成的。
          執(zhí)行上述操作后會(huì)把配置文件的詳細(xì)屬性存儲(chǔ)到該SqlMapConfigParser對(duì)象的XmlParserState對(duì)象、XmlParserState對(duì)象持有的SqlMapConfiguration對(duì)象以及(SqlMapConfiguration持有的SqlMapClientImpl和SqlMapExecutorDelegate)。

          SqlMapExecutor接口定義了CRUD等方法,SqlMapTransactionManager接口定義了跟事務(wù)相關(guān)的方法,SqlMapClient接口和SqlMapSession接口都繼承了SqlMapExecutor和SqlMapTransactionManager。只是SqlMapClient增加了opensession等方法,SqlMapSession接口只增加了一個(gè)方法close()。

          SqlMapSessionImpl對(duì)象和SqlMapClientImpl對(duì)象持有共同的委托對(duì)象SqlMapExecutorDelegate delegate.并且利用此委托對(duì)象實(shí)例化了一個(gè)sessionScope對(duì)象,然后對(duì)增刪改查的調(diào)用均委托對(duì)象執(zhí)行處理并傳入這個(gè)跟線程綁定的sessionScope對(duì)象.

          可在SqlMapConfig.xml里設(shè)置settings屬性,具體有哪些屬性,分別表示什么含義還不清楚。這些屬性在ibatis啟動(dòng)后估計(jì)都保存在SqlMapExecutorDelegate對(duì)象里。
          <settings
          cacheModelsEnabled="false"
          enhancementEnabled="false"
          lazyLoadingEnabled="false"
          />

          問(wèn)題:
          1,使用SqlMapClient的最佳實(shí)踐,應(yīng)該用單例,并發(fā)如何處理
          2,事務(wù)。單個(gè)操作不需要手動(dòng)控制,如果是多個(gè)操作,先startTransaction,執(zhí)行多個(gè)操作后commitTransaction,最后還要endTransaction

          參考:
          1,ibatis源碼簡(jiǎn)析
          2,實(shí)現(xiàn)ibatis的動(dòng)態(tài)加載sqlmap配置文件
          3,深入分析 iBATIS 框架之系統(tǒng)架構(gòu)與映射原理
          4,Spring集成ibatis問(wèn)題

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
          相關(guān)文章:
           
          主站蜘蛛池模板: 罗甸县| 河东区| 武宁县| 淮滨县| 申扎县| 滦南县| 荥经县| 滕州市| 乐清市| 特克斯县| 聂拉木县| 曲周县| 磴口县| 洞口县| 九寨沟县| 永寿县| 喀什市| 南澳县| 惠东县| 望奎县| 循化| 福州市| 偃师市| 开鲁县| 顺义区| 姚安县| 关岭| 广南县| 中卫市| 八宿县| 揭阳市| 长沙县| 木里| 渑池县| 凉城县| 抚远县| 绍兴市| 沙坪坝区| 宣化县| 澜沧| 松溪县|