鐑埍瀛︿範锛岀儹鐖辩敓娲伙紒馃槃娌夋穩銆佸垎浜€佹垚闀匡紝璁╀綘鍜屼粬浜烘湁鎵€鏀惰幏锛侌煒?.鍓嶈█鎴戜滑鍦ㄤ娇鐢∕ybatis鐨勬椂鍊欙紝鎬讳細鏈夎繖鏍蜂竴涓枒闂細鈥滀负浠€涔圡ybatis鍙渶瑕佸畾涔変竴涓帴鍙o紝涓嶇敤鍐欏疄鐜扮被灏卞彲浠ョ敤XML涓殑SQL璇彞鎴栬€呮敞瑙f潵瀹屾垚瀵规暟鎹簱鐨勫鍒犳敼鏌ワ紵鈥濄€傜湅浜哅ybatis鐨勬簮鐮侊紝鎵嶇煡閬揗ybatis浣跨敤浜哅apper鎺ュ彛浠g悊绫伙紝鎶婃墍鏈夌殑鏁版嵁搴撴搷浣滈兘浜ょ粰浜嗕唬鐞嗙被銆?.Binding妯″潡Mapper鎺ュ彛浠g悊绫诲湪Binding妯″潡涓紝鏍稿績绫绘槸org.apache.ibatis.binding.MapperProxy銆侭inding妯″潡鐨勬牳蹇冪被濡備笅锛歰rg.apach.ibatis.binding.MapperRegistry锛歁apper鎺ュ彛娉ㄥ唽绫伙紝绠$悊Mapper鎺ュ彛绫诲瀷涔嬮棿鐨勬槧灏勫強鍏朵唬鐞嗗垱寤哄伐浣溿€傛垜浠湪寮€鍙戞椂鍒涘缓鐨凪apper鎺ュ彛绫婚兘浼氭敞鍐屽埌杩欓噷杩涜绠$悊銆俹rg.apach.ibatis.binding.MapperProxyFactory锛歁apper鎺ュ彛浠g悊绫诲垱寤哄伐鍘傜被銆俹rg.apach.ibatis.binding.MapperProxy锛歁apper鎺ュ彛浠g悊绫伙紝灏佽浜哠qlSession鐩稿叧鐨勬搷浣滐紝鍚庨潰鎴戜滑浼氬涔犲埌锛屾槸SQL鎵ц銆俹rg.apach.ibatis.binding.MapperMethod锛氬皝瑁呬簡Mapper鎺ュ彛瀵瑰簲鐨勬柟娉曞拰SQL鎵ц淇℃伅銆傝繖鏄垜浠紑鍙戞椂鍒涘缓鐨凪apper鎺ュ彛绫荤殑姣忎釜鏂规硶鐨刋ML閰嶇疆瀵瑰簲鐨凷QL璇彞銆傛祦绋嬪浘濡備笅锛?銆佷竴鑸鏋滆璁¤兘鎵惧埌澶у鍦ㄥ仛鐨勪簨鎯呯殑鍏卞悓鍐呭锛屾湁缁熶竴鐨勬祦绋嬪鐞嗭紝閭d箞灏卞彲浠ユ祿缂╂彁鐐硷紝灏佽鎴愪竴涓叡鍚岀殑缁勪欢鎴栨湇鍔★紝鍏变韩缁欏ぇ瀹跺ぇ瀹惰鍑忓皯閲嶅鏃犵敤鐨勫伐浣溿€傚弬鑰冩垜浠娇鐢ㄦ渶澶氱殑JDBC鏂瑰紡锛屼粠鑾峰彇鏁版嵁搴撹繛鎺ワ紝鏌ヨ锛屽皝瑁呯粨鏋滈泦锛岃繑鍥炵粨鏋滈泦锛岃繖浜涙楠ゆ槸涓€涓浐瀹氱殑娴佺▼锛屾墍浠ユ垜浠彲浠ユ妸杩欎釜娴佺▼灏佽鎴愪竴涓€氱敤鐨勭粍浠舵垨鑰呮湇鍔°€傛垜浠湪璁捐ORM妗嗘灦鐨勬椂鍊欙紝棣栧厛瑕佽€冭檻鐨勬槸濡備綍灏嗙敤鎴疯嚜瀹氫箟鐨勬暟鎹簱鎿嶄綔鎺ュ彛銆乆ML閰嶇疆鐨凷QL璇彞鍜屾暟鎹簱杩炴帴璧锋潵銆傚叾瀹炴渶鍚堥€傜殑鎿嶄綔灏辨槸浣跨敤proxy鏂规硶杩涜澶勭悊锛屽洜涓簆roxy鍙互灏嗕竴涓鏉傜殑娴佺▼灏佽涓烘帴鍙e璞$殑瀹炵幇绫汇€傝璁″涓嬶細棣栧厛鎻愪緵涓€涓狹apper鎺ュ彛浠g悊绫籑apperPoxy锛岄€氳繃浠g悊绫诲皝瑁呭鏁版嵁鐨勬搷浣滐紝鑷虫鏈珷鎴戜滑灏嗘彁渚涗竴涓畝鍗曠殑wrapper鏉ユā鎷熷鏁版嵁搴撶殑璋冪敤銆傜劧鍚庝负Mapper鎺ュ彛浠g悊绫绘彁渚涗竴涓畝鍗曠殑宸ュ巶绫籑apperProxyFactory璋冪敤瀹炰緥鏂规硶鎴愪负鍚勪釜Mapper鎺ュ彛鐨勪唬鐞嗙被銆?.瀹炵幇鍦ㄥ疄鐜颁箣鍓嶏紝鎴戜滑鍏堝涔犱唬鐞嗙煡璇嗐€傛垜浠娇鐢ㄤ簡鍔ㄦ€佷唬鐞嗘ā寮忋€傛垜浠€氳繃涓€涓皬demo瀛︿範浜嗗姩鎬佷唬鐞嗘ā寮忋€傝繕鏈夊彟澶栦袱绉嶄唬鐞嗘ā寮忥細闈欐€佷唬鐞嗗拰Cglib浠g悊銆傚姩鎬佷唬鐞嗗姩鎬佷唬鐞嗘湁浠ヤ笅鐗圭偣锛氬姩鎬佷唬鐞嗗璞′笉闇€瑕佸疄鐜版帴鍙o紝鍙渶瑕佺洰鏍囧璞″疄鐜版帴鍙e嵆鍙€傚疄鐜板熀浜庢帴鍙g殑鍔ㄦ€佷唬鐞嗭紝闇€瑕佷娇鐢↗DK涓殑API锛屽湪JVM鍐呭瓨涓姩鎬佹瀯寤轰唬鐞嗭紝鍦ㄨ繍琛屾椂鐢熸晥銆傛偍闇€瑕佷娇鐢╦ava.lang.reflect.Proxy鍙婂叾newProxyInstance()鏂规硶銆傝鏂规硶闇€瑕佷紶鍏ヤ笁涓弬鏁般€傛簮鐮佸涓嬶細@CallerSensitivepublicstaticObjectnewProxyInstance(ClassLoaderloader,Class>[]interfaces,InvocationHandlerh)throwsIllegalArgumentException{//...}ClassLoaderloader锛氭寚瀹氬綋鍓嶇洰鏍囧璞′娇鐢ㄧ殑绫诲姞杞姐€傝幏鍙栧姞杞藉櫒鐨勬柟娉曟槸getClassLoader()銆俰nterfaces锛氱洰鏍囧璞″疄鐜版帴鍙g殑绫诲瀷锛屼娇鐢ㄦ硾鍨嬫柟娉曠‘璁ょ被鍨嬨€侷nvocationHandlerh锛氫簨浠跺鐞嗭紝褰撶洰鏍囨柟娉曞璞$殑鏂规硶鎵ц鏃讹紝浼氳Е鍙戜簨浠跺鐞嗙▼搴忕殑鏂规硶锛屽苟灏嗗綋鍓嶆鍦ㄦ墽琛岀殑鐩爣瀵硅薄鐨勬柟娉曚綔涓哄弬鏁颁紶鍏ャ€傛垜浠€氳繃鍏蜂綋鐨勫疄鐜板鍔ㄦ€佷唬鐞嗚繘琛屾搷浣溿€傜被缁撴瀯鍥惧涓嬶細浠g爜瀹炵幇锛歁apper鎺ュ彛浠g悊绫伙細publicclassMapperProxy
