銆婃墜鍐橫ybatis銆嬬鍥涚珷锛歁apperXML鐨勮В鏋愪笌娉ㄥ唽%AC1%E7%AB%A0%EF%BC%9A%E5%BC%80%E7%AF%87%E4%BB%8B%E7%BB%8D%EF%BC%8C%E6%89%8B%E5%86%99Mybatis%E8%83%BD%E7%BB%99%E4%BD%A0%E5%B8%A6%E6%9D%A5%E4%BB%80%E4%B9%88%EF%BC%9F.html娌夋穩銆佸垎浜€佹垚闀匡紝璁╄嚜宸卞拰浠栦汉鏈夋墍鏀惰幏锛侌煒?.鍓嶈█浣犲浣曢潰瀵瑰嚱鏁拌凯浠o紵浜嬪疄涓婏紝寰堝绋嬪簭鍛樺湪鍒氬紑濮嬬紪绋嬫垨鑰呭姞鍏ユ柊鍏徃鐨勬椂鍊欙紝骞舵病鏈夊お澶氱殑鏈轰細鍘诲仛涓€涓柊鐨勯」鐩€傚ぇ澶氭暟鏃跺€欙紝浠栦滑閮藉湪涓嶆柇鍦拌凯浠f洿鏂版棫椤圭洰銆傚湪杩欎釜杩囩▼涓紝浣犲彲鑳借瀛︿範N浣嶅墠杈堢暀涓嬬殑鍚勭椋庢牸鍚勫紓鐨勪唬鐮佺墖娈点€傚湪杩欎簺绾垫í浜ら敊鐨勬祦绋嬩腑锛屾壘涓€涓湴鏂癸紝鍔犲叆鑷繁鐨刬felse銆傝櫧鐒惰繖涔堣儭涔卞姞浜唅felse锛屼絾涓€寮€濮嬧€滃潖鈥濈殑蹇冩€佸緢涓嶈垝鏈嶃€備絾鏄湪宸茬粡鍘嬬缉鐨勫伐鏈熶笅浜や粯楂樿川閲忕殑浠g爜鍏跺疄鏄潪甯稿洶闅剧殑锛屾墍浠ラ儴鍒嗙爺鍙戣杩彲鐢紝璺戣捣鏉ュ氨澶熶簡銆備笉杩囪瘽铏藉姝わ紝鍏跺疄浣犱笉鍙兘閫愭笎娓呯悊涓€鍫嗙嫍灞庯紝璁╀唬鐮佸湪浣犳墜涓€愭笎娓呮櫚銆佹暣榻愩€佸共鍑€銆傚緢澶氭椂鍊欐槸鍥犱负鑷繁浣滀负coder鐨勭粡楠屼笉瓒筹紝涓嶆噦绯荤粺閲嶆瀯锛屼笉鎳傝璁″師鍒欙紝涓嶇啛鎮変笟鍔¤儗鏅紝涓嶆竻妤氫骇鍝佹柟鍚戠瓑鍘熷洜銆傛墍浠ユ渶濂界殑鍔炴硶灏辨槸鎻愰珮鑷繁鐨勮兘鍔涖€傛瘡娆℃偍鏀跺埌璇锋眰鏃讹紝閮戒細鏈変竴浜涙妧鏈洿鏀广€傛棦鐒舵槸鐙楀睅灞憋紝閭e氨褰撴垚鎵撴€崌绾т簡銆備慨涓€鐐癸紝鎹竴鍧楋紝淇竴鍧椼€備綘鏈夎秺鏉ヨ秺澶氱殑鏄撲簬缁存姢鍜屾墿灞曘€?.鐩爣鍦ㄩ€愭瀹炵幇Mybatis妗嗘灦鐨勮繃绋嬩腑锛岄鍏堣鏈変竴涓洰鏍囧鍚戠殑鎬濊矾锛屽嵆濡備綍瀹炵幇Mybatis鐨勬牳蹇冮€昏緫銆傚叾瀹炴垜浠彲浠ョ畝鍗曠殑鎶婅繖鏍蜂竴涓狾RM妗嗘灦鐨勭洰鏍囨弿杩颁负涓轰竴涓帴鍙f彁渚涗竴涓唬鐞嗙被銆傝绫诲寘鎷琈apper锛屽嵆xml鏂囦欢涓殑SQL淇℃伅锛堢被鍨嬨€佸叆鍙傘€佸嚭鍙傘€佹潯浠讹級銆傝В鏋愬拰澶勭悊锛岃繖涓鐞嗚繃绋嬪氨鏄鏁版嵁搴撹繘琛屾搷浣滐紝骞跺皢鐩稿簲鐨勭粨鏋滆繑鍥炵粰鎺ュ彛銆傚鍥?-1鎵€绀猴紝鏍规嵁ORM鏍稿績杩涚▼鐨勬墽琛屾祦绋嬶紝鎴戜滑闇€瑕佸湪涓婁竴绔犵殑鍩虹涓婄户缁睍寮€瀵筂apper鏂囦欢鐨勫垎鏋愶紝鎻愬彇鍑哄搴旂殑SQL鏂囦欢銆傝€岀幇闃舵锛屽綋鎴戜滑璋冪敤DAO鎺ュ彛鏂规硶鏃讹紝鎴戜滑鍙互鍦∕apper涓繑鍥炵浉搴旂殑SQL璇彞鏉ユ墽琛屻€備负浜嗕笉鎶婃暣涓」鐩睍寮€锛屼粯鍝ヤ細甯︾潃澶у涓€姝ユ瀹屾垚杩欎簺鍐呭锛屾墍浠ユ湰绔犳殏鏃朵笉浼氬鏁版嵁搴撹繘琛屾搷浣滐紝浠ュ悗浼氶€愭瀹炵幇銆傛壂鎻忚矾寰勪互娉ㄥ唽鏄犲皠鍣ㄥ苟鍦―efaultSqlSession涓娇鐢ㄣ€傞偅涔堬紝褰撴垜浠皢杩欎簺鍛藉悕绌洪棿銆丼QL鎻忚堪銆佹槧灏勪俊鎭粺涓€缁存姢鍒板悇涓狣AO瀵瑰簲鐨凪apperXML鏂囦欢涓悗锛孹ML鍏跺疄灏辨槸鎴戜滑鐨勬簮澶淬€侻apper鏄犲皠鍣ㄧ殑娉ㄥ唽鍜孲QL绠$悊鍙互閫氳繃瀵筙ML鏂囦欢鐨勮В鏋愬拰澶勭悊鏉ュ畬鎴愩€傝繖鏍锋柟渚挎垜浠搷浣滃拰浣跨敤銆傚鍥?-2鎵€绀猴紝棣栧厛闇€瑕佸畾涔塖qlSessionFactoryBuilder宸ュ巶寤洪€犺€呮ā寮忕被锛岄€氳繃鍏ュ彛IO瑙f瀽XML鏂囦欢銆傜洰鍓嶄富瑕侀泦涓湪瑙f瀽SQL閮ㄥ垎鍜屾敞鍐宮apper鏉ヨ繛鎺ユ暣涓牳蹇冩祦绋嬨€傛枃浠惰В鏋愬悗锛屼細瀛樻斁鍦–onfiguration閰嶇疆绫讳腑銆傛帴涓嬫潵浣犱細鐪嬪埌杩欎釜閰嶇疆绫讳細涓茶仈鍒版暣涓狹ybatis杩涚▼涓€傛墍鏈夌殑鍐呭瀛樺偍鍜岄槄璇婚兘绂讳笉寮€杩欎釜绫汇€傚鏋滄垜浠湪DefaultSqlSession涓幏鍙朚apper骞舵墽琛宻electOne锛屾垜浠繕闇€瑕佸湪Configuration閰嶇疆绫讳腑杩涜璇诲彇銆傚洓銆佸疄鐜?銆侀」鐩粨鏋刴ybatis-step-03鈹斺攢鈹€src鈹溾攢鈹€main鈹傗敂鈹€鈹€java鈹傗敂鈹€鈹€cn.bugstack.mybatis鈹傗敎鈹€鈹€binding鈹傗敎鈹€鈹€MapperMethod.java鈹傗攤鈹溾攢鈹€MapperProxy.java鈹傗攤鈹溾攢鈹€MapperProxyFactory.java鈹傗攤鈹斺攢鈹€MapperRegistry.java鈹傗敎鈹€鈹€builder鈹傗攤鈹溾攢鈹€xml鈹傗攤鈹斺攢鈹€XMLConfigBuilder.java鈹傗攤Base鈧斺攢鈹€Builder.java鈹溾攢鈹€io鈹傗攤鈹斺攢鈹€Resources.java鈹傗敎鈹€鈹€mapping鈹傗攤鈹溾攢鈹€MappedStatement.java鈹傗攤鈹斺攢鈹€SqlCommandType.java鈹傗敂鈹€鈹€session鈹傗敎鈹€鈹€defaults鈹傗敎鈹€鈹€DefaultSqlSession銆俲ava鈹傗攤鈹斺攢鈹€DefaultSqlSessionFactory.java鈹傗敎鈹€鈹€Configuration.java鈹傗敎鈹€鈹€SqlSession.java鈹傗敎鈹€鈹€SqlSessionFactory.java鈹傗敂鈹€鈹€SqlSessionFactoryBuilder.java鈹斺攢鈹€test鈹溾攢鈹€java鈹傗敂鈹€鈹€cn.bugstack.mybatis.test.dao鈹傗敎鈹€鈹€dao鈹傗攤鈹斺攢鈹€IUserDao.java鈹傗敎鈹€鈹€po鈹傗攤鈹斺攢鈹€User.java鈹傗敂鈹€鈹€ApiTest.java鈹斺攢鈹€resources鈹溾攢鈹€mapper鈹傗敂鈹€鈹€User_Mapper.xml鈹斺攢鈹€mybatis-config-datasource.xml椤圭洰婧愮爜锛歨ttps://t.zsxq.com/bmqNFQ7XML瑙f瀽涓庢敞鍐岀被瀹炵幇鍏崇郴锛屽鍥?-2鎵€绀猴紝SqlSessionFactoryBuilder浣滀负鏁翠釜Mybatis鐨勫叆鍙o紝鎻愪緵鏋勫缓鍣ㄥ伐鍘傦紝鍖呰XML瑙f瀽澶勭悊锛岃繑鍥炲搴旂殑SqlSessionFactory澶勭悊绫伙紝閫氳繃瑙f瀽灏哫ML淇℃伅娉ㄥ唽鍒癈onfiguration閰嶇疆绫讳腑锛屼互鍙婄劧鍚庡皢Configuration閰嶇疆绫讳紶閫掔粰鍚勪釜閫昏緫澶勭悊绫讳腑锛屽寘鎷珼efaultSqlSession锛岃繖鏍峰湪鑾峰彇mapper鍜屾墽琛孲QL鐨勬椂鍊欙紝灏卞彲浠ヤ粠閰嶇疆绫讳腑鑾峰彇瀵瑰簲鐨勫唴瀹广€?.鏋勫缓SqlSessionFactory鏋勫缓鍣ㄥ伐鍘傛簮鐮侊紝鍙傝锛歝n.bugstack.mybatis.session.SqlSessionFactoryBuilderpublicclassSqlSessionFactoryBuilder{publicSqlSessionFactorybuild(Readerreader){XMLConfigBuilderxmlConfigBuilder=newXMLConfigBuilder(reader);杩斿洖鐢熸垚鍣紙璇诲彇鍣級锛況eturnbuilder(xmlCon)}publicSqlSessionFactorybuild(Configurationconfig){杩斿洖鏂扮殑DefaultSqlSessionFactory(config);}}SqlSessionFactoryBuilder鏄暣涓狹ybatis鐨勫叆鍙g被锛岄€氳繃鎸囧畾瑙f瀽XML鐨処O鏉ュ紩瀵兼暣涓祦绋嬬殑鍚姩銆備粠杩欎釜绫诲紑濮嬶紝鏂板浜嗕袱涓鐞嗙被XMLConfigBuilder鍜孋onfiguration锛屽垎鍒敤鏉ヨВ鏋怷ML鍜岃鎺ユ暣涓祦绋嬬殑瀵硅薄淇濆瓨鎿嶄綔銆傛帴涓嬫潵鎴戜滑鍒嗗埆浠嬬粛杩欎簺鏂板紩鍏ョ殑瀵硅薄銆?銆乆ML瑙f瀽澶勭悊瑙佹簮鐮侊細cn.bugstack.mybatis.builder.xml.XMLConfigBuilderpublicclassXMLConfigBuilderextendsBaseBuilder{privateElementroot;publicXMLConfigBuilder(Readerreader){//1.璋冪敤鐖剁被鍒濆鍖朇onfigurationsuper(newConfiguration());//2.dom4j澶勭悊xmlSAXReadersaxReader=newSAXReader();灏濊瘯{Documentdocument=saxReader.read(newInputSource(reader));root=document.getRootElement();}catch(DocumentExceptione){e.printStackTrace();}}publicConfigurationparse(){try{//瑙f瀽mapperElement(root.element("mappers"));}catch(Exceptione){thrownewRuntimeException("瑙f瀽SQLMapper閰嶇疆鏃跺嚭閿欍€傚師鍥狅細"+e,e);}杩斿洖閰嶇疆锛泒privatevoidmapperElement(Elementmappers)throwsException{List