userMapper.getUser(1);底层实现原理

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-02-06 21:33 被阅读0次

上一篇 <<<sqlSession如何获得具体的Mapper接口信息
下一篇 >>>sqlSession.selectOne底层实现原理


userMapper实际代理类:org.apache.ibatis.binding.MapperProxy@279ad2e3

代理层实现

if (Object.class.equals(method.getDeclaringClass())) {
//如果是实现类,则直接调用
    try {
        return method.invoke(this, args);
    } catch (Throwable var5) {
        throw ExceptionUtil.unwrapThrowable(var5);
    }
} else {
//接口层走这里
    MapperMethod mapperMethod = MapperProxy.cachedMapperMethod(method);
    {
 
            mapperMethod = new MapperMethod(MapperProxy.mapperInterface, method, MapperProxy.sqlSession.getConfiguration());
            MapperMethod.command = new MapperMethod.SqlCommand(config, mapperInterface, method);
                    --configuration.getMappedStatement(statementName); 从config中获取执行的语句ID和内容
            MapperMethod.method = new MapperMethod.MethodSignature(config, method);
            //做好缓存
            MapperProxy.methodCache.put(method, mapperMethod);
            method:public abstract com.jgspx.entity.UserEntity com.jgspx.mapper.UserMapper.getUser(int)
    }
    return mapperMethod.execute(this.sqlSession, args);
}

execute真实操作

判断类型并执行具体的sql语句
if (SqlCommandType.INSERT == this.command.getType()) {
 
}else if (SqlCommandType.SELECT == this.command.getType()) {
    if (this.method.returnsVoid() && this.method.hasResultHandler()) {
        this.executeWithResultHandler(sqlSession, args);
        result = null;
    } else if (this.method.returnsMany()) {
        result = this.executeForMany(sqlSession, args);
    } else if (this.method.returnsMap()) {
        result = this.executeForMap(sqlSession, args);
    } else {
        param = this.method.convertArgsToSqlCommandParam(args);
        result = sqlSession.selectOne(this.command.getName(), param);
           name:com.jarye.mapper.UserMapper.getUser
    }

推荐阅读:
<<<Mybatis的整体执行原理图解
<<<SqlSessionFactory的创建过程原理
<<<SqlSession的创建过程
<<<sqlSession如何获得具体的Mapper接口信息
<<<sqlSession.selectOne底层实现原理
<<<Mybatis一级缓存知识汇总
<<<Mybatis二级缓存知识汇总
<<<Springboot整合Mybatis二级缓存
<<<Mybatis常见面试题

相关文章

  • userMapper.getUser(1);底层实现原理

    上一篇 << >> userMapper实际代理类:org.apache.ibatis.binding.Mappe...

  • 集合

    1.HashMap(实现原理、底层结构、性能差异原因) 2.concurrentHashmap(实现原理、底层结构...

  • iOS底层原理:weak的实现原理

    iOS底层原理:weak的实现原理iOS底层原理:weak的实现原理

  • Today面试

    Runloop 底层原理Kvo 底层原理ARC 底层原理 如何实现GCD 底层原理Block 底层原理Aut...

  • iOS底层原理总结 - 关联对象实现原理

    iOS底层原理总结 - 关联对象实现原理 iOS底层原理总结 - 关联对象实现原理

  • 100篇技术文章

    1.Class类的底层实现原理 - 链接 链接 2.Category分类的底层实现原理 - 链接 3.Block块...

  • java后台面试题整理(包含)

    1.Arrays.sort实现原理和Collection实现原理 Collection.sort()底层会调用Ar...

  • 2018-08-08

    集合类的底层实现原理 1、ArrayList底层实现和原理 首先了解线性表、数组的概念。 线性表:最基本、最简单、...

  • 2020-08-10 Map接口

    一、Map类的实现结构 1.HashMap HashMap底层原理: HashMap底层原理 JDK8的更新: H...

  • iOS分类的实现原理简记

    该文为分类原理的简单记录,总结自如下文章,感谢作者分享: iOS底层原理总结 iOS分类底层实现原理小记 1、分类...

网友评论

    本文标题:userMapper.getUser(1);底层实现原理

    本文链接:https://www.haomeiwen.com/subject/gvqktltx.html