• SmartSql漫谈


    最近在看smartSql源码,兄弟写的。写的很不错取取经。

    记录下一些学习的东西,刚开始我先不系统的写了,随意一点哈,我看的差不多再给大家一个模块一个模块系统的写。

            public T ExecuteScalar<T>(RequestContext context)
            {
                T result = _sqlRuner.Run<T>(context, DataSourceChoice.Write, (sqlStr, session) =>
                 {
                     return session.Connection.ExecuteScalar<T>(sqlStr, context.Request, session.Transaction);
                 });
                CacheManager.TriggerFlush(context);
                return result;
            }
    

     Run方法

            public T Run<T>(RequestContext context, DataSourceChoice sourceChoice, Func<String, IDbConnectionSession, T> runSql)
            {
    
                IDbConnectionSession session = SmartSqlMapper.SessionStore.LocalSession;
    
                if (session == null)
                {
                    session = SmartSqlMapper.CreateDbSession(sourceChoice);
                }
    
                string sqlStr = SqlBuilder.BuildSql(context);
                try
                {
                    T result = runSql(sqlStr, session);
    
                    return result;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (session.LifeCycle == DbSessionLifeCycle.Transient)
                    {
                        session.CloseConnection();
                    }
                }
            }

     sqlRunner第三个参数重点强调下,传入的是一个委托,返回的是一个泛型T

      委托了一个方法传入,很多人会疑惑这两个参数我并没有哪里申明或实例化啥的为啥这边能使用?

      其实这边委托主要起到了一个描述方法的作用,就是说Run中执行这个委托具体会用哪几个参数类型,并没有实际使用意义

     T result = runSql(sqlStr, session);

    这句话里面的sqlStr和session分别是通过

     SqlBuilder.BuildSql(context)
     SmartSqlMapper.SessionStore.LocalSession;获得。所以runSql就能执行
     return session.Connection.ExecuteScalar<T>(sqlStr, context.Request, session.Transaction);
    

      返回T.

    这里其实用的是Dapper的方法,并且自动绑定请求模型和映射返回数据的模型。

    至于为啥不直接用dapper去查询,主要是为了将Sql语句和调用解耦,并且支持热更新。是对Mybatis和dapper的优势结合。



  • 相关阅读:
    Hadoop性能调优、YARN的内存和CPU配置
    linux权限之su和sudo的差别
    Hadoop JobHistory
    Hive存储格式
    左边元素和右边一样高
    状态码
    document.ready(function(){}),window.onload,$(function(){})的区别
    模糊查询实例
    jq实时监测输入框内容改变
    博客遇到的问题
  • 原文地址:https://www.cnblogs.com/alwaysfly/p/SmartSql_Run.html
Copyright © 2020-2023  润新知