`
denger
  • 浏览: 356830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis+Spring基于接口编程的原理分析

    博客分类:
  • Java
阅读更多
move to: http://www.iteye.com/topic/1060588
  • 大小: 12.6 KB
分享到:
评论
17 楼 zhys513 2013-01-16  
  确实是最近看的分析mybatis比较精彩的一篇文章。
16 楼 guazi 2012-12-21  
分析的不错,今天才知道mybatis有这个用法。
15 楼 什么向往 2012-09-21  
最近也在看源码,分析的很透彻,学习了
14 楼 denger 2012-08-24  
kiis 写道
88548886 写道
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!

和注解应该没关系,这里是动态生成的实现类,并没有真的去实现,只是为了代理去动态生成了实现类

Right!
13 楼 kiis 2012-08-24  
88548886 写道
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!

和注解应该没关系,这里是动态生成的实现类,并没有真的去实现,只是为了代理去动态生成了实现类
12 楼 88548886 2012-06-29  
有谁能告诉我注解的解释器如何工作,虚心求教,有知道的加我QQ88548886,谢谢了!
11 楼 88548886 2012-06-29  
不甘心又去看了源代码
@SuppressWarnings("unchecked")
  public static <T> T newMapperProxy(Class<T> mapperInterface, SqlSession sqlSession) {
    ClassLoader classLoader = mapperInterface.getClassLoader();
    Class<?>[] interfaces = new Class[]{mapperInterface};
    MapperProxy proxy = new MapperProxy(sqlSession);    return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
  }

发现红色字体的位置,把sqlSession封装成一个MapperProxy,这个类实现了InvocationHandler, Serializable接口,还是不找到,接口上定义的注解的解释器是怎么工作的。
10 楼 88548886 2012-06-29  
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!
9 楼 mojunbin 2012-05-24  
对于mybatis网络上的文章(中文).我感觉博主的文章质量比较好哈..
8 楼 denger 2011-10-22  
看看mybatis 上的 google code 代码,里面有例子呀。
7 楼 lzxz1234 2011-10-22  
哥们源码还有没,传我一份吧,找你说的整的还是有问题跑步起来
6 楼 stkstm 2011-10-20  
怎么我按你的来配置 测试 老报java.lang.NullPointerException 就是我来调用mapper方法的时候
5 楼 obullxl 2011-05-31  
分析很透彻明白,赞!!!
4 楼 yzhw 2011-05-31  
兄弟我现在用seam,一直想用一下spring3,收了,呵呵
3 楼 crskyp 2011-05-31  
学习了。。。。
2 楼 absolute 2011-05-31  
我们最近也在用ibatis,多谢楼主分享
1 楼 liberD 2011-05-31  
非常好!楼主分析的很透彻!有机会交流交流!O(∩_∩)O哈哈~

相关推荐

Global site tag (gtag.js) - Google Analytics