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/

你可能感兴趣的:(spring)