mapper的个人理解

mapper的个人理解,第1张

mapper的个人理解 mybaits的个人理解

mybatis就是一个orm框架,jpa封装的太狠了,导致程序员想要优化sql都没地方入手。从而知道,应该把sql抽离框架,交由程序员管理。

而至于其他的管理事务,获取连接,提交事务这些东西,都是些 模板,所以可以交于框架管理。

而sql就抽离出为一个xml,利用标签来动态拼接sql。调用的话,利用接口与对应的xml来对应。获取对应的代理类,类似aop的功能来执行sql。

但是如果 每次从配置类拿的话,又麻烦,那直接就交给spring来。

获取SqlsessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);

可以从中看出,sqlsessionfactory是通过读取配置类,从而构建对应的SqlSessionFactory。我们从源码可以看出,

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    SqlSessionFactory var5;
    try {
        XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
        var5 = this.build(parser.parse());
    } catch (Exception var14) {
        throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
    } finally {
        ErrorContext.instance().reset();

        try {
            inputStream.close();
        } catch (IOException var13) {
        }

    }

    return var5;
}

public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
}

是通过xml读取配置解析得到Configuration从而构建SqlSessionFactory。

获取Session

可以看出,开启sqlsession是通过执行器,而执行器又是关联事务。那么我们就知道,每个事务既是会话,而会话即是由事务决定。同一个事务用同一个会话,一个会话同一个连接。

获取mapper代理类

可以看出,通过sqlsession获取的是mapperProxy代理类,而代理类拦截了方法。object方法放行,而其他方法都拦截执行。

mapper方法执行

可以看出,执行的时候,是通过mappermethod,而这里又进行了参数解析convertArgsToSqlCommandParam(将方法参数改为mapper,有@param改为key是@param,没有就param加上index)

而具体执行,通过sqlsession,而sqlsession是通过

executor来执行的。通过方法名获取对应的mapperstatement(方法接口的具体一个方法)。

而执行又委派给了statementhandler。

可以看出,这里就是简单的jdbc的statement执行了。

插件原理

可以看出,这个插件就是把对象包一层,是不是就是代理。其实就是通过代理,从而偷梁换柱。

这里有四大对象。executor,statementHandler,parameterHandler和resultHandler对象

见名知义,执行器,每个方法的执行处理器,参数处理器,结果处理器。

通过代理,从而达到插件的效果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存