mybatis源碼解析之mapper接口代理

[size=medium]
剛接觸mybatis,個人覺得mybatis唯一的好處就是可以用xml mapper 的方式來代理生成dao類,我們不再需要寫dao,取而代之的是在xml文件中寫我們的sql語句就可以。這樣的話,如果需要修改dao中的查詢我們只需要把xml文件修改一下,不用去重新編譯class文件。

首先說一下需要考慮一個問題,它是如何實現只寫接口類,貌似用xml文件來做接口類的實現的呢?
mybatis對mapper的實現就是默認使用了jdk代理的方式來實現。

//註冊器
MapperRegistry registry = new MapperRegistry();
//註冊接口類UserMapper
registry.addMapper(UserMapper.class);
//註冊接口類LogMapper
registry.addMapper(LogMapper.class);
//從註冊器中獲取接口UserMapper代理
UserMapper usermapper = registry.getMapper(UserMapper.class,null);
usermapper.show();
//從註冊器中獲取接口LogMapper代理
LogMapper logmapper = registry.getMapper(LogMapper.class,null);
logmapper.logShow();

這個我自己做了一個測試,mybatis內部也是相同的實現。
聲明一個註冊器(registry)註冊器註冊需要代理的接口,獲取接口的代理類,代理類調用方法。

核心的地方就在獲取接口代理類,他是如何把xml文件轉換成對應接口的代理對象就在這裏實現。我們來看看代碼:

在mybatis org.apache.ibatis.binding包下面包含了mapper的核心類:
BindingException binding 自定義異常
MapperMethod mapper代理方法調用
MapperProxy mapper代理對象
MapperProxyFactory mapper工廠
mapperRegistry mapper註冊器


[/size]


稍後繼續。。。。
發佈了35 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章