• Spring.Data.IBatis源码


    Spring.Data.IBatis这个在网上找了很久都没有找到,于是把该项目反编译后获取了源码,并在目前最新的spring.net(1.3.0.20349)和iBatis.NET(1.6.2.0)下编译通过了。源码如下:

    AbstractIBatisFactoryObject.cs源码:

    代码
    using IBatisNet.Common.Utilities;
    using Spring.Core.IO;
    using Spring.Objects.Factory.Config;
    using System;
    using System.IO;

    namespace Spring.Data.IBatis
    {
        
    public abstract class AbstractIBatisFactoryObject : AbstractFactoryObject
        {
            
    private IResource configuration;
            
    private ConfigureHandler configWatcher;

            
    protected AbstractIBatisFactoryObject()
            {
            }

            
    protected override object CreateInstance()
            {
                
    if (this.Config == null)
                {
                    
    return this.CreateUsingDefaultConfig();
                }
                
    return this.CreateUsingCustomConfig();
            }

            
    protected abstract object CreateUsingCustomConfig();
            
    protected abstract object CreateUsingDefaultConfig();
            
    protected virtual string GetConfigFileName()
            {
                FileInfo info 
    = null;
                
    try
                {
                    info 
    = this.Config.File;
                }
                
    catch (IOException)
                {
                    
    throw new ArgumentException("The 'Config' property cannot be resolved to an iBatis.NET config file that physically exists on the filesystem.");
                }
                
    return info.Name;
            }

            
    public IResource Config
            {
                
    get
                {
                    
    return this.configuration;
                }
                
    set
                {
                    
    this.configuration = value;
                }
            }

            
    public ConfigureHandler ConfigWatcher
            {
                
    get
                {
                    
    return this.configWatcher;
                }
                
    set
                {
                    
    this.configWatcher = value;
                }
            }
        }
    }

    DateTypeHandlerCallback.cs源码:

    代码
    using IBatisNet.DataMapper.TypeHandlers;
    using System;

    namespace Spring.Data.IBatis
    {
        
    public class DateTypeHandlerCallback : ITypeHandlerCallback
        {
            
    object ITypeHandlerCallback.GetResult(IResultGetter getter)
            {
                
    if ((getter.Value == null|| (getter.Value == DBNull.Value))
                {
                    
    return DateTime.MinValue;
                }
                
    return getter.Value;
            }

            
    void ITypeHandlerCallback.SetParameter(IParameterSetter setter, object parameter)
            {
                
    if (parameter is DateTime)
                {
                    DateTime time 
    = (DateTime) parameter;
                    
    if (time == DateTime.MinValue)
                    {
                        setter.Value
    =null;
                        
    return;
                    }
                }
                setter.Value
    =parameter;
            }

            
    object ITypeHandlerCallback.ValueOf(string s)
            {
                
    return DateTime.Parse(s);
            }

            
    object ITypeHandlerCallback.NullValue
            {
                
    get
                {
                    
    return DBNull.Value;
                }
            }
        }
    }

    IbatisPlatformTransactionManager.cs源码:

    代码
    using IBatisNet.DataMapper;
    using Spring.Objects.Factory;
    using Spring.Transaction;
    using Spring.Transaction.Support;
    using System;

    namespace Spring.Data.IBatis
    {
        
    public class IbatisPlatformTransactionManager : AbstractPlatformTransactionManager, IInitializingObject
        {
            
    private ISqlMapper sqlMap;

            
    public IbatisPlatformTransactionManager()
            {
            }

            
    public IbatisPlatformTransactionManager(ISqlMapper sqlMap)
            {
                
    this.sqlMap = sqlMap;
            }

            
    public void AfterPropertiesSet()
            {
            }

            
    protected override void DoBegin(object transaction, ITransactionDefinition definition)
            {
                
    if (this.sqlMap == null)
                {
                    
    throw new ArgumentException("SqlMap is required to be set on IbatisPlatformTransactionManager");
                }
                
    base.log.Debug("开始事务");
                
    this.sqlMap.BeginTransaction();
            }

            
    protected override void DoCommit(DefaultTransactionStatus status)
            {
                
    base.log.Debug("提交事务");
                
    this.sqlMap.CommitTransaction();
            }

            
    protected override object DoGetTransaction()
            {
                IbatisTransactionObject obj2 
    = new IbatisTransactionObject();
                obj2.SavepointAllowed 
    = base.NestedTransactionsAllowed;
                SqlMapHolder resource 
    = (SqlMapHolder) TransactionSynchronizationManager.GetResource(this.sqlMap);
                obj2.SetSqlMapHolder(resource, 
    false);
                
    return obj2;
            }

            
    protected override void DoRollback(DefaultTransactionStatus status)
            {
                
    base.log.Debug("回滚事务");
                
    this.sqlMap.RollBackTransaction();
            }

            
    protected override bool IsExistingTransaction(object transaction)
            {
                IbatisTransactionObject obj2 
    = (IbatisTransactionObject) transaction;
                
    return ((obj2.SqlMapHolder != null&& obj2.SqlMapHolder.TransactionActive);
            }

            
    public ISqlMapper SqlMap
            {
                
    get
                {
                    
    return this.sqlMap;
                }
                
    set
                {
                    
    this.sqlMap = value;
                }
            }

            
    private class IbatisTransactionObject : IbatisTransactionObjectSupport
            {
                
    private bool newSqlMapHolder;

                
    public void SetRollbackOnly()
                {
                    
    base.SqlMapHolder.RollbackOnly = true;
                }

                
    public void SetSqlMapHolder(SqlMapHolder sqlMapHolder, bool newSqlMap)
                {
                    
    base.SqlMapHolder = sqlMapHolder;
                    
    this.newSqlMapHolder = newSqlMap;
                }

                
    public bool HasTransaction
                {
                    
    get
                    {
                        
    return ((base.SqlMapHolder != null&& base.SqlMapHolder.TransactionActive);
                    }
                }

                
    public bool NewSqlMapHolder
                {
                    
    get
                    {
                        
    return this.newSqlMapHolder;
                    }
                }

                
    public bool RollbackOnly
                {
                    
    get
                    {
                        
    return base.SqlMapHolder.RollbackOnly;
                    }
                }
            }
        }
    }

    IbatisTransactionObjectSupport.cs源码:

    代码
    using Common.Logging;
    using IBatisNet.Common.Transaction;
    using Spring.Transaction;
    using System;

    namespace Spring.Data.IBatis
    {
        
    public abstract class IbatisTransactionObjectSupport : ISavepointManager
        {
            
    protected static readonly ILog log = LogManager.GetLogger(typeof(IbatisTransactionObjectSupport));
            
    private IsolationLevel previousIsolationLevel;
            
    private bool savepointAllowed;
            
    private Spring.Data.IBatis.SqlMapHolder sqlMapHolder;

            
    protected IbatisTransactionObjectSupport()
            {
            }

            
    public void CreateSavepoint(string savepointName)
            {
                
    throw new NotImplementedException();
            }

            
    public void ReleaseSavepoint(string savepoint)
            {
                
    throw new NotImplementedException();
            }

            
    public void RollbackToSavepoint(string savepoint)
            {
                
    throw new NotImplementedException();
            }

            
    public bool HasSqlMapHolder
            {
                
    get
                {
                    
    return (this.sqlMapHolder != null);
                }
            }

            
    public IsolationLevel PreviousIsolationLevel
            {
                
    get
                {
                    
    return this.previousIsolationLevel;
                }
                
    set
                {
                    
    this.previousIsolationLevel = value;
                }
            }

            
    public bool SavepointAllowed
            {
                
    get
                {
                    
    return this.savepointAllowed;
                }
                
    set
                {
                    
    this.savepointAllowed = value;
                }
            }

            
    public Spring.Data.IBatis.SqlMapHolder SqlMapHolder
            {
                
    get
                {
                    
    return this.sqlMapHolder;
                }
                
    set
                {
                    
    this.sqlMapHolder = value;
                }
            }
        }
    }

    SqlMapHolder.cs源码:

    代码
    using IBatisNet.DataMapper;
    using Spring.Transaction.Support;

    namespace Spring.Data.IBatis
    {
        
    public class SqlMapHolder : ResourceHolderSupport
        {
            
    private ISqlMapper currentSqlMap;
            
    private ISqlMapSession currentSqlMapSession;
            
    private bool transactionActive = false;

            
    public SqlMapHolder(ISqlMapper sqlMap, ISqlMapSession transaction)
            {
                
    this.currentSqlMap = sqlMap;
                
    this.currentSqlMapSession = transaction;
            }

            
    public override void Clear()
            {
                
    base.Clear();
                
    this.transactionActive = false;
            }

            
    public bool HasSqlMap
            {
                
    get
                {
                    
    return (this.currentSqlMap != null);
                }
            }

            
    public ISqlMapper SqlMap
            {
                
    get
                {
                    
    return this.currentSqlMap;
                }
                
    set
                {
                    
    this.currentSqlMap = value;
                }
            }

            
    public ISqlMapSession Transaction
            {
                
    get
                {
                    
    return this.currentSqlMapSession;
                }
                
    set
                {
                    
    this.currentSqlMapSession = value;
                }
            }

            
    public bool TransactionActive
            {
                
    get
                {
                    
    return this.transactionActive;
                }
                
    set
                {
                    
    this.transactionActive = value;
                }
            }
        }
    }

    SqlMapperFactoryObject.cs源码:

    代码
    using IBatisNet.DataMapper;
    using IBatisNet.DataMapper.Configuration;
    using Spring.Context;
    using System;
    using System.IO;

    namespace Spring.Data.IBatis
    {
        
    public class SqlMapperFactoryObject : AbstractIBatisFactoryObject, IApplicationContextAware
        {
            
    private IApplicationContext springContext;
            
    private DomSqlMapBuilder sqlMapBuilder;

            
    protected override object CreateUsingCustomConfig()
            {
                
    if (base.ConfigWatcher != null)
                {
                    
    return this.SqlMapBuilder.ConfigureAndWatch(base.Config.File, base.ConfigWatcher);
                }
                
    using (Stream stream = base.Config.InputStream)
                {
                    
    return this.SqlMapBuilder.Configure(stream);
                }
            }

            
    protected override object CreateUsingDefaultConfig()
            {
                
    if (base.ConfigWatcher != null)
                {
                    
    return this.SqlMapBuilder.ConfigureAndWatch(base.ConfigWatcher);
                }
                
    return this.SqlMapBuilder.Configure();
            }

            
    public IApplicationContext ApplicationContext
            {
                
    get
                {
                    
    return this.springContext;
                }
                
    set
                {
                    
    this.springContext = value;
                }
            }

            
    public override Type ObjectType
            {
                
    get
                {
                    
    return typeof(ISqlMapper);
                }
            }

            
    public DomSqlMapBuilder SqlMapBuilder
            {
                
    get
                {
                    
    if (this.sqlMapBuilder == null)
                    {
                        
    this.sqlMapBuilder = new DomSqlMapBuilder();
                    }
                    
    return this.sqlMapBuilder;
                }
                
    set
                {
                    
    this.sqlMapBuilder = value;
                }
            }
        }
    }

    源码下载

    原创作品出自努力偷懒,转载请说明文章出处http://www.cnblogs.com/kfarvid/

  • 相关阅读:
    简单递归后台代码
    Request.QueryString与Request的区别
    在ASP.NET中实现图片、视频文件上传方式
    git之二
    ORACLE 下查看用户session 及 kill 用户session
    oracle 存储过程、函数和包的权限
    查看Linux操作系统版本命令
    Oracle创建Database link方法
    Oracle修改统计信息收集计划时间
    Oracle 不停库清理监听日志
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1835986.html
Copyright © 2020-2023  润新知