前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis mapper解析(上)

mybatis mapper解析(上)

作者头像
平凡的学生族
发布2019-05-29 08:52:15
6830
发布2019-05-29 08:52:15
举报
文章被收录于专栏:后端技术后端技术

参考

深入剖析 mybatis 原理(二)

图解

mybatis mapper原理.jpg

  • 通过java 动态代理,创建Mapper代理对象,把数据库方法调用移交给MapperProxy对象。
  • MapperProxy为每个原Mapper方法创建了MapperMethod,用户调用原Mapper方法,其实是在代理的情况下被转为MapperMethod调用了(详见MapperProxy.invoke)。
  • MapperMethod通过缓存一些成员变量的方式,对原方法有更充分的描述,对不同操作(Insert、Delete等)、不同返回参数(void、原始类型、Map等)、不同参数(单个、多个)下的方法调用都有对应的处理(详见MapperProxy.invoke中的MapperMethod.execute)。但最终都交给SqlSession执行。
  • 总结:用户以为对Mapper对象调用了数据库交互方法,其实都是用mapperMethod.execute(sqlSession, args);调用了MapperProxy缓存的MapperMethod,后者对各种数据库操作都进行人性化的处理,但都是交给SqlSession执行的。

可以看到,所有类都关联着SqlSession

mybatis如何创建mapper的。

  1. 在getMapper时,无非用java的Proxy动态代理基于用户的Mapper上创建了代理对象。将Mapper的数据库调用操作移交给SqlSession运行。
  2. SqlSession获取Mapper对象->利用Configuration获取Mapper对象->利用MapperRegistry获取Mapper对象
  3. MapperRegistry以key-value的形式,为每个Mapper类缓存了一个MapperProxyFactory。用该类的newInstance方法创建一个Mapper代理对象。
  4. MapperProxyFactory.newInstance(SqlSession sqlSession)方法创建了中间类对象MapperProxy(implements InvocationHandler),进而用MapperProxyFactory.newInstance(MapperProxy<T> mapperProxy)方法创建了对应Mapper的代理类对象。
  5. MapperProxy以key-value的形式为每个原Mapper的方法准备了一个MapperMethod。MapperMethod对原Mapper方法有更充分的元数据描述。一切原Method的调用都会转移到MapperMethod上进行。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
  • 图解
  • mybatis如何创建mapper的。
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档