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

mybatis源码解析之mapper接口代理

阅读更多

刚接触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注册器







稍后继续。。。。
分享到:
评论

相关推荐

    Mybatis源码分析.pdf

    总结起来,MyBatis源码分析涵盖了从配置加载到数据库操作的全过程,涉及到了配置解析、SQL执行、结果映射等多个关键环节,以及Executor、StatementHandler等核心组件。通过深入学习MyBatis的源码,开发者不仅可以...

    mybatis源码+配置步骤+包文件

    一、MyBatis源码解析 MyBatis的源码主要由SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口等核心组件构成。SqlSessionFactoryBuilder用于创建SqlSessionFactory,它是MyBatis的核心工厂类。...

    MyBatis源码demo

    当调用Mapper接口的方法时,MyBatis会通过反射机制找到对应的XML配置,然后动态地生成代理对象执行SQL。在XML配置中,我们可以定义参数映射(#{param})、结果映射(resultMap)以及动态SQL(if、where、choose等...

    mybatis源码jar包

    在运行时,MyBatis会通过`MapperProxyFactory`生成一个代理类来执行Mapper接口的方法,这个过程涉及到反射和动态代理技术。 **4. SqlSession与Executor** `SqlSession`是MyBatis的主要工作接口,用于执行SQL操作。...

    mybatis源码

    Mapper接口则定义了数据库操作的CRUD方法,通过MyBatis的动态代理机制,这些方法会被转换为对应的SQL语句。 首先,我们来看一下SqlSessionFactory的构建过程。MyBatis的初始化通常从配置文件开始,这个文件可以是...

    手撕Mybatis源码,自己动手实现Mybatis

    在运行时,Mybatis 使用动态代理将Mapper接口方法调用转换为实际的SQL执行。 5. **Executor**: 执行器是Mybatis的执行引擎,负责处理SQL的执行和结果映射。有SimpleExecutor、ReuseExecutor和BatchExecutor三种,...

    mybatis-3-mybatis-3.4.1源码

    当我们在代码中调用Mapper接口的方法时,MyBatis会动态生成代理对象,执行对应的SQL并返回结果。 3.4.1版本的MyBatis源码中,我们可以关注以下几个关键模块: 1. **Configuration**:这是MyBatis的全局配置,包含...

    Mybatis系列教程Mybatis源码剖析共15页.pd

    【标题】"Mybatis系列教程Mybatis源码剖析共15页.pdf" 是一份详细的Mybatis框架源码解析教程,涵盖了Mybatis的核心概念和技术细节。这份教程深入浅出地介绍了Mybatis如何工作,以及其背后的代码实现,对于理解...

    spring源码解析和mybatis学习

    3. **Mapper接口**:通过接口定义SQL操作,利用MyBatis的自动映射功能。 4. **参数映射与结果映射**:如何将Java对象和SQL查询参数、结果集进行映射。 5. **缓存机制**:一级缓存和二级缓存的原理与配置,提高数据...

    mybatis 源码

    总的来说,学习MyBatis源码不仅可以提高我们的编程技能,还能帮助我们深入理解Java的反射机制、动态代理、以及数据库操作的相关知识。这对于我们开发高效、稳定的Java应用,特别是涉及到大量数据库交互的应用,具有...

    mybatis源码分析

    通过对MyBatis源码的分析,开发者可以更深入地理解其内部运作机制,从而更好地优化应用,解决实际问题。同时,这也是一种提升个人技术水平和解决问题能力的有效途径。在阅读源码过程中,可能会遇到各种设计模式和...

    一本小小的MyBatis源码分析书.rar

    同时,还会解析Mapper XML文件,将SQL语句与Mapper接口绑定。 3. **SqlSessionFactory的创建**: 使用`SqlSessionFactoryBuilder`从XML配置文件或Java配置构建`SqlSessionFactory`。`DefaultSqlSessionFactory`是...

    mybatis-3.0.4源码

    以下是对`mybatis-3.0.4源码`的详细解析。 一、核心组件 1. SQLSessionFactory:这是MyBatis的核心组件,负责创建SQLSession对象。它通过SqlSessionFactoryBuilder从XML配置文件或注解构建,维护了与数据库的会话...

    mybatis-3-mybatis-3.4.5 源码

    通过对MyBatis源码的学习,我们可以了解到MyBatis如何解析配置,如何构建SQL,如何处理参数和结果,以及如何利用缓存提高性能。这对于理解和优化MyBatis的应用,甚至开发自己的持久层框架都有极大的帮助。在阅读源码...

    mybatis基础源码及jar包

    通过MyBatis的动态代理机制,Mapper接口的方法可以直接调用,内部会自动执行相应的SQL并处理结果。 4. **SQL映射语句**:在XML映射文件中,可以编写`<select>`, `<insert>`, `<update>`, 和 `<delete>`标签来分别...

    互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析 .rar

    SSM框架,全称为Spring、Spring MVC和MyBatis,是Java开发中广泛使用的轻量级Web...提供的"互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析.pdf"文档,无疑是一份宝贵的参考资料,值得深入研究。

    java+springMVC+Mybatis源码

    3. **Mapper接口和XML映射文件**:Mapper接口定义了SQL操作的方法,XML文件则包含了具体的SQL语句和结果集映射。Mybatis通过动态代理,实现了接口方法与SQL的绑定。 4. **Service层**:这是业务逻辑的核心,通常...

    mybatis-3.3.1源码

    4. **MapperRegistry**:MyBatis通过MapperRegistry来管理和注册Mapper接口和它们对应的XML配置文件或者注解。MapperRegistry维护了Mapper接口和MapperProxy之间的映射关系。 5. **Executor**:执行器是MyBatis执行...

    mybatis-plus源码

    1. **BaseMapper**:这是MyBatis-Plus的基础Mapper接口,它继承了MyBatis的Mapper接口,并扩展了一些通用的CRUD方法。 2. **BaseService**:基础Service接口,包含了基本的增删改查操作,这些操作由BaseMapper驱动...

Global site tag (gtag.js) - Google Analytics