MyBatis代碼分析資料_第1頁
MyBatis代碼分析資料_第2頁
MyBatis代碼分析資料_第3頁
MyBatis代碼分析資料_第4頁
MyBatis代碼分析資料_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、MyBatisBy:satan_0103基本配置:3 zrc-t* app+ L_ Main, j vf*莒 r dvipain :+ 0 User, javaUserMappiiiLg. KnlXj logback- semi禺 rnybitiE. KmlHi JKE System Library JavtSE-!. T 目Web A.pp Li br ar i es& WebContentD build:b D META-IHF -G> ffEB-IHFlogback-classj c_1s 0.7f j ar logbiek-core-l_ 0. 7. jar mybati

2、s3a L I. jar postjgresql9- 1902- jd'b|c4biii. j sl£4j-Api-1.7.2.眩S- & libarmybatis.xml<7xml versioE=P|!l, 0" encodi.ng= "JIFF-£" ?>DOCTYPE configuration PUBLIC "-/mybatis工g/DTD Config 3.0/EN"/rnybanrs erg/dtd/mybatis3-eenf1g dtdw> <confiouration

3、><typeAlia3es><tipp&AliLa5 匕匹亡 doiEarn E7占巴£" alias= nUser"/><71 ypeAliases>皂 nvi rc murent s default= Mdevel opmsn t ">< envi r nine nt i d= "dsvelopzEen cnranaacElcnManager type"<dataSouxGe 匸評啟="PCLED1<prope 二匸y nariie= r/dri

4、ver " value= Marg postgrssq;! Dri verpp ><prDperty nane*MuriM valme*pljdhsr:pasturesql:/U70 0-1 rSdJ/Cpen1*?<prcpert;y name wusernanserr value* pppO5tgrres"/><prcipert;y name = ripassvordrr val.口皂="歸國七孑芒合氐眸/></且日匸aSouree></environme口上 ></ envi r o nine

5、 nr s > |<inappers>CniApp-ftr reBouree"wdoBiain./t75*r2d.ppmg. xml W</rftappexs></C0 口壬:1甘口3:且匸1口11UserMappi ng.xml<?xnl version= '*1.On encodlng= "JTF-S'H ?><!DOCTYPE mapper PUBLIC "-/rnybatisaEg/DTD Mapper 30/EN" "http; /mybatis org/dtd/m

6、ybatis-3-inapper dtd*A<mapper namespace= ,rorg-«sybatisr exiupie BiogMppr*><reaultMap Jtype=,rCser,' id= *L7sexResu21*><id coluirmproperty=*id'f/><zesulv colunm=f,口EErnminu* praperty=,iJsernaiEC*/> </resuLtMap><select id= "seisctUser" parameter

7、Type= ifint" resul匸Typ= "sex'” select * from t_user where id = tid</select><insert id= insertUser" paramet;erType= irUsertl>inser匸 Inta t iser values (# id) * # usernarae)</in3&rt></niapper>User.javapackage domain;public class User Int id-l;Spring nsema

8、nie;public int getld()return id;public void 呂總匸Id(int id) tbis,id - id;public String getUsername) return lib&tnair.e:piibli void BetUsemame (String usernarte this p勻亡main亡 - username;Main .javapublic class Main * gpaLram args* throws Exception*/public static void main(String args) throws Except!

9、an String resource = llmyfciati.s xml?。籖eader reader Re?corees -resource);SqlSiss5ionFactory sqlMappex = 口居科 SqlSessionFactoryBuildex().build(zeadex); SqLSession session = sqlMapper.apenSessianO;User ujer new CJ亍皀r ();口iSer seld. (1);user set-Username (Ww丄d2 n):session insert("Ies皂工tUsern ruser

10、);代碼分析一:建立SessionFactorypublic static void main( Stri ng args)throwsExcepti on /指向配置文件路徑,格式為classpathStri ng resource ="mybatis.xml" ;/使用Mybatis的資源讀取器獲得reader對象Reader reader = Resources.getResourceAsReader (resource);/ 建立 SqlSessionFactorySqlSessi onF actory sqlMapper =new SqlSessi onF act

11、oryBuilder().build(reader);/創(chuàng)建一個(gè)會(huì)話SqlSessi on sessi on = sqlMapper.ope nSessi on();User user = new User();user.setld(1);user.setUsername( "satan_0103");/ 調(diào)用 sessionsessi on .i nsert("in sertUser",user);sessi on. commit();sessi on. close();分析Resources資源查詢器:基本原理:使用 ClassLoader.getR

12、esourceAsStream(resource)方法實(shí)現(xiàn)而Resources 對象,使用ClassLoader 數(shù)組對象,進(jìn)行遍歷查詢.分析:可以使用Resources的靜態(tài)方法還獲得對應(yīng)輸入輸出流的對象public static Reader getReso口工:皂盒呂11皂且1 亡二(5匸工zing resource) throws IOException Reader reader;if (charset = null reader = new 工llfu匸5匸工亡mRe:己且皂工 (g巴匕Rpsdui?匚巴衛(wèi)sBtTi&szE(工皂已口口工匚亡); else <read

13、er = new 工口口tStTeaziReadersource) charset);return reader;調(diào)用 getResourceAsStream()方法.public static InpuuStream getResour ceAsStream (Class Loader loadeiji String r:皂 source) throw InpuSlureami in cl a ssLoj deirffr aippez" gr匸工 uA:3 5 匸工eaiu (工厚 口口工匚匕# loader);if (zn null) throw new IOException(

14、'Could not find resaurc皂 M + resource); return xn;)這里使用了 classLoaderWrapper這個(gè)靜態(tài)對象,而這個(gè)對象包含了兩個(gè)ClassLoader對象.分別為 systemClassLoader 和 defaultClassLoader對象.pnbllc class ClassLoaderWrapper ClassLoader defa'jltClasLo&der;ClaasLcader systeiaClasaLaader;ClasBLoaderWrapper()try ays匸呂日Lciadu= = Cla

15、ssLoader getSysteClafr(); eAteh (SecurityException ignored) / AccessContrclExcepion on Google App Engine繼續(xù)跟進(jìn)調(diào)用.這里使用了 getClassLoaders()這個(gè)方法來獲得系統(tǒng)中存在的合理的類加載對象ClassLoader,注意這里的ClassLoader不止一個(gè).public Input St re am getRes 口 uru 邑 Jk;3St工民卻耳匸工九:!© rescuraer ClassLaa 且己工 classLca 且已 return getResQurce

16、AsStream(resaurcef g皂tClassLoaders(elassLcader);查看 getClassLoader()方法,返回一個(gè)ClassLoader數(shù)組對象.ClasaLoader;) genClassLaad&ra(ClaasLcader classLaader) return new ClassLoailer classLcader efaul-cClasaLoddz,Thread,Thread () . getConcexClassLcader ( rgerClass().gecClassLcader(), syflEercClassLaader>返回

17、上級進(jìn)入調(diào)用getResourceAsStream()InpocStxeam gecReiourceAsSi&ream(Scrlg resource, ClaBslo&der(J alassLoader) for (CLassL口aid亡工 cl : classLoaderJ fif (null !* el) 查看到對資源(mtbatis.xml) 的.的加載,是通過對 ClassLoader數(shù)組的迭代查詢來獲得/ try ta find rhe resource as passedInputStream returnvalue = cl>getRsourceASrear

18、n(reso口ru亡):ifnawj someloader« wanx his leadingso we * 11 add it and cry again(null = retuxnValue) ret 口亡 = 匚丄.get Res 口 uz匸巳工亡!azif 艸/*1 + resource);ifk(null != z皂turnValue) return returnValue;returnim 11;并且注意到,可以使用的路徑表達(dá)式為1. org/sata n/mybatis.xml2. /org/sata n/mybatis.xml工廠類)代碼:都可以.分析 SqlSess

19、ionFactoryBuilder(原理分析:通過 reader 獲得 mybatis.xml配置文件,然后通過創(chuàng)建XMLCo nfigBuilder象來包含mybatis.xml中的內(nèi)容,最后調(diào)用XMLConfigBuilder中parse() 方法,來獲得一個(gè) Configuration對象,來完成 SqlSessionFactory對象.類是包含了一組build() 方法,用來創(chuàng)建基本結(jié)構(gòu):SqlSessi onF actoryBuilderSqlSessionFactory對象的類.SqlSessi onFactoryEuiIder SllSessionFactcryBuilder 0

20、0 build (InputS trem) build dnputStr tan, 0 build (InputS tre Mb, build driputStrtan, 0 build (Re aderD build (Ke "er 0 build (Re ider, build (Rad:SqlSessi orJctoryString) SqlS&ssi orJ aeloryString, Properties) SqlS&ssi onFic Fr op «r ties) SiLessi »nf actcry :SqlSessionFictor

21、yStriy) 列止汕訂mF t hryString, FropertieEloriF&c tciryProperti ts) SqlSnssi .rJF d .:.fy Lniild (Ccnfi gurati on) : SqlSessi onFactc-i y各個(gè)方法的最終目的就是產(chǎn)生一個(gè)Configuration對象,然后使用build(C on figurati on)方法,來創(chuàng)建 SqlSessionFactory 對象.代碼跟蹤和分析下面的代碼是進(jìn)入了產(chǎn)生 ConfigurationXMLConfigBuilder 對象創(chuàng)建,和其對象方法parse() 調(diào)用對象,并且最后

22、調(diào)用build(Configuration)的過程.puullc SqlSessienFactQiy teuila(Reader readerr Spring enviranraeriLr Properties properties) try (XMLCnnfIgBuilder parser new XMLConfIgBuilder(reader, envircnnentr properties); return build (parses.parse()n catch (EMceptlon e) throw Excepticbuilding SqlSessiGn. n t e) j fina

23、lly (ErrorConcexc亠巴乞七占應(yīng)卞巴)resec(;try <reader.close):* catch (IQExcept i n e) (H Intenclonally ignore Prefer previous errorreader 是指向mybatis.xml 對象的IO流.environment是顯示指示使用那個(gè)environment配置環(huán)境,如果不指定,則使用default="some" 的環(huán)境.properties指定了替代屬性的Key-Value ,$username進(jìn)入 XMLConfigBuilder 過程.XMLCqnfigBi

24、iild皂工 parser = new XtQConf igBuilder (reader, envircmaent.f properties);首先創(chuàng)建一個(gè)XPathParser解析對象,這個(gè)對象是對 MybatisC on figurati on .xml對象的解析器,解析出一段Document格式的報(bào)文.還使用XMLMapperEntityResolver()對象來驗(yàn)證 mybatis.xml 使用的DTD約束對象是否正確.public XMLCDnfig3u.ild.er Reader readerf String enviresnment-r Prcpertiea praps) (t

25、hi a 1 new KPathEarser (leader, tms, props, new XMLMsapperEntityReaDiver ) r enTircnnse口匸尸 propa;對象.在this()自構(gòu)造方法中,看到new 出一個(gè) Configurationprivate XMLConfigBni.lciE:r IXTathPaLEBer parser, String envirarjnentf Frcperties props) | super(new Configuration() *:Em上orCanext;丄寰£D&iiue () resauree (

26、''SQL Eappe上 ConfigurationM) jtills configuracion».setVariablea (口工亡ps);tuift.paried falejthi 3- s e-nvizo iraent = environjuent:thiStparser = parsers而在Configuration構(gòu)造方法中,是對typeAliasRegistry對象預(yù)先填充一些必要的別名,女口 JDBC,POOLED,UNPOOLED 等而其中VENDOR別名對象設(shè)置過程中啟動(dòng)了log,日志系統(tǒng).public Cnfigua&ian t-ype

27、AliaRsgiscry?registerAlias (HJDBC',f# JcLbcTransationFactory-class.getName (): type Al iasRe gi s Er y 工電 gis:匚色:rliBLis ("KJJTASED" f ManagedT r ansact ± 口 gF縣匕七口::茁 口丄艮勻弓亠 §<5匸應(yīng)呂上1段(); cypeSiliasRegiscry 工egisC-erAlias (pijNDItrf JndiDataScu.rceFact £y匚丄“國芳g色匸EJ皿亡(

28、r type Al lasRegi s " r y 工亡gi 日匚亡工?LL丄巴色("FOOLED PooledDataSourceFaccor y class 口亡 tNme:(); typeAllasRegistry,regiscerAlias(HUNFOO1EDWP UnpooledDaca5ourceFactory.class.getNane():type Al iasRegi 3 try Hegiis 匸丄工上LliaLm (氏 FiERFETHi工用, Perpet ualCache * class B getName *); cypeAliasRei3&quo

29、t;ry 工egiscerAlias ("FIFO", FlfaCache匚1盤宮審?fù)鰐NaL就(): cypeAiiasRegisry 上己qi.戟匕亡上島丄丄己s ("LRUTr, LruCacfie.csl比乞合.gexWEme () J ;type Al issEle g i si; ry B xe gi s terAl i a s (H SOFT11ScltCche1«, clsiss«ijetNae ();CypeAliaBReg±st.ry 工egisterAlias (円百丘盤號卯# WeakCache .cfIk序孚

30、.gEtH且me ();cypeAliasRegis ry 工亡gi曹c亡工Rlin已:("NDOR"f VendorDatfibaseldProvlder .class(H值得注意的是 typeAliasRegistry在構(gòu)造的時(shí)候自己也注冊了一些別名org.apache.ibatis.mapp in g.Ve ndorDatabaseldProvider在ClassLoader 加載它的時(shí)候,執(zhí)行如下代碼為日志輔助類private staticfinal Log log = LogFactory.getLog (BaseExecutor.class );在LogFact

31、ory 中,看到static 代碼,就是這段代碼完成了對日志系統(tǒng)的初始化static tryTnLpleicentatian (new Runnable ()(public void run( LiseSlf 4jLogji.nj (;H;trylmpiemsntatioH(new Runnable() public void tliel ()wsKainianwSggf 蜩();;on (new Runnable ()public void run( ujsLoj4 JLogginj);八;trylnLplementirji sji (new Runnable (public void ru

32、n( 口 se JdkLogTng-();H;trylmpiementation(new Runnable() public void run()s i LqTWjrT cer * n/r / *回到原來的build() 方法,我們查看parser.parse()方法的執(zhí)行查看到這個(gè)方法是對 mybatis.xml 中configuration標(biāo)簽的解析public Configuration parae () )if (parsea)(th row tiew BulldftEExeeptlDn rrEAe:h MApp-erConfiPArser can cnly be uafrd crne

33、-e 畤): Jparsed true;parse Configurate 口 n (丘呂工 re:工亡 ¥赳1甘口£1 亡 C1 / eonf i gur a t id n,r) j return eanfigurat-ionj進(jìn)入parseConfiguration()方法后,可以看到一些熟悉的字樣,接下來就是對configuration標(biāo)簽的子元素進(jìn)行解析,填充完一個(gè)Configuration象中的屬性,返回這個(gè)Configuration對象給上級build().private void parseConfigura 匸丄口口(XNcidje root J try &

34、#163;propextiesElement (rootevalNod-e (tl-propex!txe5w) ) ;. is- til"? rs&d propercies firsttypeAliasesElemeiLt (root B evaINode ( "tpeSLlzases B);plsugiilE 1 ement (root eraLlNczcie ("pluginsrr)!);obj ectFaetoryE(root亡("objeccFactary):Obe呂(比口口匸它甘彳丄兇口日旨(用口:呂匚匸*芝冃涇口亡:扌3匸匸0工

35、65;1'1); settingsEleioent (root. eva3N 口 且£ (° settings1,1);芒口 viz a nme nt sE lenuei-t (roc 七 evalN 口:iis (trenvizonn.eiits11;diatafcaaeldPr口暫SditE丄匸 «:£匸亡廿nlNDd亡("datataselciPi:口誓久厲匕工11);te-EiandlerEleent (root 旨vbINid過它(ceHandl&is"):mapperE1 BJ&enc (root

36、evaXNQds (mappers11); catch (Exception e throw new aailderExcepticn("Err口:r parsing SQL Mapper CcnCiguratlcn Cause: <r + e);對properties標(biāo)簽解析:可以看到最后是在con figurati on中設(shè)置解析完成的properties.private void propertiesElenient (XNode caD&ex.) throws 'Exception if (contejtu nisLl Prcpexties defaul

37、ts = coBxext - gei&ChildrenllsPTopexties (;Serina resource 二 eontext,aetszrinQAetrlbute("resouree"):String url ® context . gets tri agAt tribute ("urlji jif (resource != nul丄 £.& url != 口丄 1).resQuxcfthrow new BuilderEx-cepion(The properties element cannot specify ba

38、th a URL and if (zeaDurce ? 口all) (defaults.putAll(Resonzces getSesourceAsPxcpertzes(resaurce);>-If (UZ1! != 7)1311 derfiulcs Pput All(Resources.gsturle i (urlH;IPrcpert ies vaszs = conf igu rat ion * get Vari abl e s (J ;if (vas != nail) idefaalca rputAll (vaxsj-;Ipasser u setVarxables(defaults)

39、;confionr(defaul);對typeAliases標(biāo)簽解析:privats voidtypeAliaseaElemer.iXl-Tode parent) if (parec != ncll> for (Xllade child : paren 匸.get Children () ) if ("packagen亡qUAla(ChildBgeCSame O)txasPackage = child>geS匸£|丄口0丸匸匸1|)且5匸它(耐孔期卄|;c nf igux at ion .gistTypTdiBiBRegjLtzzytJi 工 egisCerAl

40、iases (tn: eAlias Eac rage); else String alias = childg皀七號七匕工匸護(hù)七1:1:工掃11七已(叩ml工ms用);String 七沖亡 - child try Class<?> clazz RescurcesIE taliks = ball typeAliasRegisicry工egisterAlias (clazz);卜 else (typeAliasRegistry .zeffisterAlias (aliaSj clazz|i: catch (Cla53tTci:FouEciEx.cepclon eJ fCause:thr

41、ow new EuxlderException (nError regi3terzng t1 as for 用 + alias +如果沒有使用alias 元素,則直接把type類路徑指向的類名作為alias 注冊到Configuration對象中去.Cla35<?> clasz = Resources ,(te);if (alias = im 11) reAliasRegiBtry. regis匸芒工良丄且(clazz) * else typeAliasRegistry.registerAlias(alias f clazz);對objectFactory 標(biāo)簽解析:的 Objec

42、tFactory 屬性中.把 factory對象注冊至U configurationprivate void objecrFactoryElsment(XNade context) throws Exception < if (context != null SVriug type = can'text;. gev5CxiizvAttribute ( "T.ype ");Properties preperties = context. getCtiiLcireKAsPiepertiss );ObjecuEacrory faccary = (ObjecEFact

43、ory resolveClass-newlnstance (>factory setPrcpertiea(properties);confiijuxation,setObject-Factory (factoiy);對environments標(biāo)簽解析:可以看到參數(shù)evironment設(shè)置了啟動(dòng)哪個(gè)環(huán)境配置.如果沒有制定,則使用default 指向的環(huán)境在配置evironment 過程中,總共配置了1. transactionManager(事務(wù)管理)2. dataSource( 數(shù)據(jù)源) 兩個(gè)內(nèi)容.最后把配置完成的環(huán)境交給configuration對象.pr-ivate void env

44、liraELraentsEleme乃匸(:KMo吐比 esnLexT J tliFcwa ExeepEiDB if (context !* nzilll if (enviroTunent nnll> esivizon!匸 w cancEMt ijietS 匸工丄iigAtt工itoircit ( ttdefau 1 匸*);far (XlTode 亡hlJLd t eonEeKt .getChildreni () )String id 匸匚u (“丄日呼):if (1 sSpecifiedEnvirarunent; (id) TxasaOTionEactury cxFaG&ory

45、 = t z anaccxa nManagexElerDe "匸 qatiild 巳v刊JL卻口(1芒(Htxai!aactiQnHanagex") J; DacaSaurseEac匸口Ey dsFaccory - dacaSourceE 1 eoeIalilld»evaIKode (TldacaSource");DtCLSource tiatsSou rce - dsFa cto r y, ge t Data Soy r ce 0 -Environment. Builder environmentBuilder - new Environment rB

46、uilder (id)»txanaacLianFactDry cxfacr-oiy).daiaSaurce (da匸在巨口口工巴旦);eo nf Iguratien* setEnvlreironene (envi ronMHT.Biillder. t mid );tran sact ionMan ager(事務(wù)管理):首先獲得transactionManager的type 類型,接著用通過resolveClass(type)對象,獲得合適的 TransactionFactory對象private TransaatianFactoxy traEsacuionHanagerEleme口匸

47、 KXNcidte context) throws Escepion if (context !- mail) String typ亡 = context; .亡匸宮匸工丄匚弓査匸丄士工匕口匕亡匸匕丫卞巴1'1,Proper 匸導(dǎo) props = context匸Trans a at ion Fact dry f actDry (T rans a t i nF act r y) re salve Cl a asnewlnstance (J ;factory 3etFraperE(ie3 (props);return factary;)throw new Builder Ex cep 匸

48、 jldh (*'E;nvjL:cc:mne::n:c decliar a cjldii requires a Trans ac tia nFa c 匸口 ry.11*);方法解析,從 configuration別名容器中把type設(shè)置為別名,調(diào)用resolveAlias() 獲取對應(yīng)的Class<T>來實(shí)例化.protected Class<?> r皀solveClass(String alias) if (alias = im 11) return rm丄 1_:try <return reaolv&Alias(alias); catch (E

49、xception e) throw new BuilderException(r,Error resolving class . Cause: " + ef e);最后卻是使用configuration中對typeAlias標(biāo)簽配置默認(rèn)值進(jìn)行解析alias,來獲得一個(gè)合適的TransactionFactory對象的Class 對象.protected Cl«ss<?> resolveAlias(String Alias ret口cn cypeAliasRegiscryhusoI甘亡耳li社勻(alia勻);dataSource( 數(shù)據(jù)源):數(shù)據(jù)源配置和事務(wù)配置類

50、似,通過別名來獲得configuration容器中一個(gè)Class填充相應(yīng)的屬性就可以使用了private DaaSourceFaetfliy dataSaureeElement(XlJode eantexE) throws EKception if (contexE J - null> Spring= context哲亡匸SEringAiLEribute;ProperLues props = cont.exL.geLChjLlcLrenJLsPropertie3 (J ;De匸aSouro巳F<au匕口工y factory = (Da匸包巳E"rc匕口工y) resfll

51、veClasa (te) newlD3tance (); factory導(dǎo)皂xP上口左皂上匸丄亡si (preps;return factory;throw new Bui Ider Except ion ("'Environment; declaration requires a DataSourceFacTory.pr);對typeHandlers標(biāo)簽分析:也利用了 configuration中容器,把type作為別名解析.private void tiT-eHandlerElement(XNcde parent) throws Exception if (paxen匸!

52、= null) (for (XNode child : parent ,getChildren.() ) i f (irFac k已 ger, -B e (jiials (chil d g亡匸己皿巳 0 ) 5ltmg tfpeHaEdlerPackage = childg巳匸5tringAu匸ribute ( BnaaeH);zypeHandlerRegi5 tr y regLsuerz ypeHandler Package);)else String j avaTypeNaifte = cHildB get3-cxingAtribue ("javalype");Stri

53、ng jdfcaTpeName = child, gets匸工耳匸tritiiit:巳("jdfcuType:*);String handlerTyp皂Ne:nie = child 旺皂匸5匸1:兀11旺直£匸二:113口匸皂(口dl皂芷"1);Clas3<?> javaTeClasa = resolveClass (javaTinpeNane);JdbcTiTe jdbcTe = resolveJdbcTirpe (jdbcTippeMazie);Cla33<?> Ei'peHa口d_l亡上亡 1且弓弓=TesclveClasj

54、(handle:rTeName;if (javaTypeClass !- null if (jdbcljT-e = null)(typeHandlerRegistry> register (javalypeClaaSi tipeHand 1 ezClas3); else 匸yF皂HandlerRegLstry. r皂gi_st:皂it (javaTiT皂二JL且導(dǎo)SdbcTiT皂 匸亡Handl皂工匚丄己53=); else eHandler Reg la 匚上 y 工匸建上(e ype Handl e r Class):其他標(biāo)簽的實(shí)現(xiàn)也是類是的方式現(xiàn)在回到build(Configura

55、tion),使用config創(chuàng)建了一個(gè)默認(rèn)的SqISessionFactory對象.pilblic SqlSesBionFac'tory build f亡cmfigura匸丄on config) return new DefaulcSqlSessionFacory(config):可以發(fā)現(xiàn)整個(gè) DefaultSqlSessio nFactory對象就包含了一個(gè)Con figuration對象public static void main -args) throws Exception String xesouzce: w niybatis auril1'1:Reader rea

56、dez = Hesn口工口巳卻§芒匸貫藝序0112_口&衛(wèi)占1?!5臼已三27 工巳!sou工口皀);SqlSessionFactory sqlMappex = new SqlSessionFacxciryBuilder () .build(reader):5qlSes51on -lessier User user n-ew Oa 口sez setId(1); usersetUsername(mgllrt 叩p er- Deful 皓評電si “rJ actory (i 4255)4 e coEtf pu- *ti &n= Confiiir b.ti on (i )到

57、此完成了對 SqISessionFactory 對象的創(chuàng)建資灘尋址轉(zhuǎn)換XM報(bào)文為Dmu代n側(cè)謀基本過程如下:1. 使用Resources中靜態(tài)方法查詢獲得 reader 對象2. 通過XMLConfigBuilder 構(gòu)造方法對reader 進(jìn)行讀取,具體的讀取工作給XPathParser對象完成返回一份 Document對象,然后配置類的屬性,完成構(gòu)造過程.3. 通過XMLConfigBuilder對象的parse()方法對讀取到的文檔 (Document)進(jìn)行解析對mybatis.xml中標(biāo)簽內(nèi)容進(jìn)行解析,設(shè)置到一個(gè) Configuration對象中而這個(gè)過程中,多次利用到typeAlias標(biāo)簽對象的Configuration屬性操作通過標(biāo)簽屬性type轉(zhuǎn)化為alias來查詢?nèi)萜髦邢鄳?yīng)的Class對象.4. 最后new 出一個(gè) DefaultSqlSessionFactory對象,而這個(gè)Factory屬性中只是包含了 Configuration對象.的構(gòu)造所以 XMLCo nfigBuild

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論