栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mapper的个人理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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对象

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683693.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号