zoukankan      html  css  js  c++  java
  • IBatis 简易框架搭建

    1、练习框架

     ibatis主要dll介绍

    IBatisNet.Common.dll 由DataAccess和DataMapper组成的共享程序集
    IBatisNet.Common.Logging.Log4Net.dll Log4Net集成记录器,和Log4Net配合使用
    IBatisNet.DataMapper.dll DataMapper主要框架
    IBatisNet.DataAccess.dll

    DataAccess框架

    2、IBatisDao 

    1、DaoBase.cs Ibatis接口的封装

    复制代码
    namespace IBatisDao
    {
        public class DaoBase<T> : MarshalByRefObject where T : EntityBase
        {
            private static ISqlMapper SqlMap;
            /// <summary>
            /// 构造函数
            /// </summary>         
            /// 
            static DaoBase()
            {
                if (SqlMap == null)
                {
                    SqlMap = SqlMapperCreater.SqlMap;
                }
            }
    
            /// <summary>
            ///  开始事务
            /// </summary>
            protected void BeginTransaction()
            {
                try
                {
                    SqlMap.BeginTransaction();
                }
                catch
                {
                    SqlMap.RollBackTransaction();
                    SqlMap.BeginTransaction();
                }
            }
    
            /// <summary>
            /// 提交事务
            /// </summary> 
            protected void CommitTransaction()
            {
                SqlMap.CommitTransaction();
            }
    
            /// <summary>
            /// 回滚事务
            /// </summary>
            protected void RollBackTransaction()
            {
                SqlMap.RollBackTransaction();
            }
    
            /// <summary>
            /// 批量保存多个实体.
            /// </summary>
            /// <param name="list">实体列表</param>
            /// <param name="insertCmdId">insert语句的id</param>
            /// <param name="updateCmdId">update语句的id</param>
            /// <param name="deleteCmdId">delete语句的id</param>
            protected void Save(IList<T> list, string insertCmdId, string updateCmdId, string deleteCmdId)
            {
                //删除
                foreach (T t in list)
                {
                    if (t.EntityState == EntityStateEnum.Deleted && !string.IsNullOrEmpty(deleteCmdId))
                    {
                        this.Delete(deleteCmdId, t);
                    }
                }
                //更新
                foreach (T t in list)
                {
                    if (t.EntityState == EntityStateEnum.Modified && !string.IsNullOrEmpty(updateCmdId))
                    {
                        this.Update(updateCmdId, t);
                    }
                }
                //新增
                foreach (T t in list)
                {
                    if (t.EntityState == EntityStateEnum.Added && !string.IsNullOrEmpty(insertCmdId))
                    {
                        this.Insert(insertCmdId, t);
                    }
                }
            }
            /// <summary>
            /// 保单个实体
            /// </summary>
            /// <param name="list">实体列表</param>
            /// <param name="insertCmdId">insert语句的id</param>
            /// <param name="updateCmdId">update语句的id</param>
            /// <param name="deleteCmdId">delete语句的id</param>
            protected void Save(T obj, string insertCmdId, string updateCmdId, string deleteCmdId)
            {
                //删除
                if (obj.EntityState == EntityStateEnum.Deleted && !string.IsNullOrEmpty(deleteCmdId))
                {
                    this.Delete(deleteCmdId, obj);
                }
                //更新
                if (obj.EntityState == EntityStateEnum.Modified && !string.IsNullOrEmpty(updateCmdId))
                {
                    this.Update(updateCmdId, obj);
                }
                //新增
                if (obj.EntityState == EntityStateEnum.Added && !string.IsNullOrEmpty(insertCmdId))
                {
                    this.Insert(insertCmdId, obj);
                }
            }
    
    
            /// <summary>
            /// 通用执行Select语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>结果集合</returns>
            protected IList<T> Select(string tag, object paramObject)
            {
                return SqlMap.QueryForList<T>(tag, paramObject);
            }
    
            /// <summary>
            /// 通用执行skip Select语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <param name="skipResults">忽略个数</param>
            /// <param name="maxResults">最大个数</param>
            /// <returns>结果集合</returns>
            protected IList<T> Select(string tag, object paramObject, int skipResults, int maxResults)
            {
                return SqlMap.QueryForList<T>(tag, paramObject, skipResults, maxResults);
            }
    
            /// <summary>
            /// 通用执行Select语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>单个结果</returns>
            protected T SelectOne(string tag, object paramObject)
            {
                return SqlMap.QueryForObject<T>(tag, paramObject);
            }
    
            /// <summary>
            /// 通用执行Update语句(强制检查数据并发)
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>更新的行数</returns>
            protected int Update(string tag, T paramObject)
            {
                return this.Update(tag, paramObject, true);
            }
    
            /// <summary>
            /// 通用执行Update语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>更新的行数</returns>
            protected int Update(string tag, object paramObject)
            {
                int iReturn = SqlMap.Update(tag, paramObject);
    
                // 若更新出现并发且要检查并发,则抛出对应的异常
                if (iReturn <= 0)
                {
                    throw new Exception("数据已被修改,请重新加载.");
                }
                // 改变状态为Unchanged
                return iReturn;
            }
    
            /// <summary>
            /// 通用执行Update语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <param name="checkConcurrency">是否要检查数据并发</param>
            /// <returns>更新的行数</returns>
            protected int Update(string tag, T paramObject, bool checkConcurrency)
            {
                int iReturn = SqlMap.Update(tag, paramObject);
    
                // 若更新出现并发且要检查并发,则抛出对应的异常
                if (iReturn <= 0 && checkConcurrency)
                {
                    throw new Exception("数据已被修改,请重新加载.");
                }
                // 改变状态为Unchanged
                paramObject.EntityState = EntityStateEnum.Unchanged;
                return iReturn;
            }
            /// <summary>
            /// 通用执行Update语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <param name="checkConcurrency">是否要检查数据并发</param>
            /// <returns>更新的行数</returns>
            protected int Update(string tag, object paramObject, bool checkConcurrency)
            {
                int iReturn = SqlMap.Update(tag, paramObject);
    
                // 若更新出现并发且要检查并发,则抛出对应的异常
                if (iReturn <= 0 && checkConcurrency)
                {
                    throw new Exception("数据已被修改,请重新加载.");
                }
                return iReturn;
            }
    
    
            /// <summary>
            /// 通用执行Deelte语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>删除的行数</returns>
            protected int Delete(string tag, T paramObject)
            {
                return SqlMap.Delete(tag, paramObject);
            }
    
            /// <summary>
            /// 通用执行Insert语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>插入行的PK对象</returns>
            protected object Insert(string tag, T paramObject)
            {
                object result = SqlMap.Insert(tag, paramObject);
                paramObject.EntityState = EntityStateEnum.Unchanged;
                return result;
            }
    
            /// <summary>
            /// 通用执行Insert语句
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>插入行的PK对象</returns>
            protected object Insert(string tag, object paramObject)
            {
                object result = SqlMap.Insert(tag, paramObject);
    
                return result;
            }
    
            #region GetSql/GetDataTable
    
            /// <summary>
            /// 通用得到参数化后的SQL(xml文件中参数要使用$标记的占位参数)
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>获得的SQL</returns>
            protected string GetSql(string tag, object paramObject)
            {
                string sql = GetPreparedSql(tag, paramObject);
                //ServiceObject.Log.Logs.DebugLog(tag + ": " + sql);
    
                return sql;
            }
    
            /// <summary>
            /// 返回结果集中的第一行的第一列
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>结果集中的第一行的第一列</returns>
            protected object QueryScalar(string tag, object paramObject)
            {
                bool isSessionLocal = false;
                object result;
    
                if (SqlMap.LocalSession == null)
                {
                    isSessionLocal = true;
                    SqlMap.OpenConnection();
                }
    
                //记录SQL语句
                GetSql(tag, paramObject);
    
                try
                {
                    IDbCommand cmd = GetDbCommand(tag, paramObject);
                    result = cmd.ExecuteScalar();
                }
                catch (Exception ex)
                {
                    throw new Exception("Can't QueryScalar, tag = " + tag, ex);
                }
                finally
                {
                    if (isSessionLocal)
                    {
                        SqlMap.CloseConnection();
                    }
                }
    
                return result;
            }
    
            /// <summary>
            /// 通用的以DataSet的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>得到的DataSet</returns>
            protected DataSet GetDataSet(string tag, object paramObject)
            {
                bool isSessionLocal = false;
                DataSet result = new DataSet(); ;
    
                if (SqlMap.LocalSession == null)
                {
                    isSessionLocal = true;
                    SqlMap.OpenConnection();
                }
                try
                {
                    IDbCommand cmd = GetDbCommand(tag, paramObject);
                    IDbDataAdapter adapter = SqlMap.LocalSession.CreateDataAdapter(cmd);
                    adapter.Fill(result);
                }
                catch (Exception ex)
                {
                    throw new Exception("Can't GetDataSet, tag = " + tag, ex);
                }
                finally
                {
                    if (isSessionLocal)
                    {
                        SqlMap.CloseConnection();
                    }
                }
    
                return result;
            }
    
            /// <summary>
            /// 通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <returns>得到的DataTable</returns>
            protected DataTable GetDataTable(string tag, object paramObject)
            {
                return GetDataSet(tag, paramObject).Tables[0];
            }
    
            /// <summary>
            /// 通用的以DataTable的方式得到skip Select的结果(xml文件中参数要使用$标记的占位参数)
            /// </summary>
            /// <param name="tag">语句ID</param>
            /// <param name="paramObject">语句所需要的参数</param>
            /// <param name="skipResults">忽略个数</param>
            /// <param name="maxResults">最大个数</param>
            /// <returns>得到的DataTable</returns>
            protected DataTable GetDataTable(string tag, object paramObject, int skipResults, int maxResults)
            {
                bool isSessionLocal = false;
                DataSet result = new DataSet();
    
                if (SqlMap.LocalSession == null)
                {
                    isSessionLocal = true;
                    SqlMap.OpenConnection();
                }
    
                //记录SQL语句
                GetSql(tag, paramObject);
    
                try
                {
                    IDbCommand cmd = GetDbCommand(tag, paramObject);
                    DbDataAdapter adapter = SqlMap.LocalSession.CreateDataAdapter(cmd) as DbDataAdapter;
                    if (adapter == null)
                    {
                        throw new NotSupportedException("Not support skip GetDataTable");
                    }
                    adapter.Fill(result, skipResults, maxResults, "result");
                }
                catch (Exception ex)
                {
                    throw new Exception("Can't GetDataTable, tag = " + tag, ex);
                }
                finally
                {
                    if (isSessionLocal)
                    {
                        SqlMap.CloseConnection();
                    }
                }
    
                return result.Tables["result"];
            }
    
            private IDbCommand GetDbCommand(string statementName, object paramObject)
            {
                IStatement statement = SqlMap.GetMappedStatement(statementName).Statement;
    
                IMappedStatement mapStatement = SqlMap.GetMappedStatement(statementName);
    
                ISqlMapSession session = new SqlMapSession(SqlMap);
    
                if (SqlMap.LocalSession != null)
                {
                    session = SqlMap.LocalSession;
                }
                else
                {
                    session = SqlMap.OpenConnection();
                }
    
                RequestScope request = statement.Sql.GetRequestScope(mapStatement, paramObject, session);
                mapStatement.PreparedCommand.Create(request, session, statement, paramObject);
    
                IDbCommand command = request.IDbCommand;
    
                // Ibatis 这里做了个装饰,所以得到的类型不是SqlCommand之类的类型
                // 只能暂时使用反射把它装饰的类型(即真实类型)反射出来
                Type t = command.GetType();
                FieldInfo commandField = t.GetField("_innerDbCommand", BindingFlags.Instance | BindingFlags.NonPublic);
                IDbCommand innerDbCommand = commandField.GetValue(command) as IDbCommand;
    
                return innerDbCommand; // request.IDbCommand;
            }
    
            /// <summary>
            /// 获取查询语句
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            protected string GetPreparedSql(string statementName, object parameterObject)
            {
                IMappedStatement mappedStatement = SqlMap.GetMappedStatement(statementName);
                ISqlMapSession localSession = SqlMap.LocalSession;
                IStatement statement = mappedStatement.Statement;
                if (localSession == null)
                {
                    localSession = new SqlMapSession(SqlMap);
                }
                return statement.Sql.GetRequestScope(mappedStatement, parameterObject, localSession).PreparedStatement.PreparedSql;
            }
    
            protected IList<TableEntity> QueryWithRowDelegate(string tag, object paramObject, Action<object, object, IList<TableEntity>> action)
            {
                return SqlMap.QueryWithRowDelegate<TableEntity>(tag, paramObject, new RowDelegate<TableEntity>(action));
            }
            #endregion
        }
    }
    复制代码

    2、SqlMapperCreater.cs 初始化Ibatis操作类

    复制代码
        public class SqlMapperCreater
        {
            protected static ISqlMapper m_sqlMap = null;
    
            public static ISqlMapper SqlMap
            {
                get
                {
                    if (m_sqlMap == null)
                    {
                        string fileName = "Config\sqlMap.config";
                        DomSqlMapBuilder builder = new DomSqlMapBuilder();
                        m_sqlMap = builder.Configure(fileName);
                    }
                    return m_sqlMap;
                }
            }
        }
    复制代码

    3、IBatisDataAccess 

    1、TableAccess.cs 数据库访问层

    复制代码
    namespace IBatisDataAccess
    {
        public class TableAccess : DaoBase<TableEntity>
        {
            public object Insert(TableEntity obj)
            {
                return base.Insert("TableEntity_Insert", obj);
            }
    
            public IList<TableEntity> Select(TableEntity obj)
            {
                return base.Select("TableEntity_Select", obj);
            }
    
            public IList<TableEntity> SelectWithRowDelegate(TableEntity obj)
            {
                return base.QueryWithRowDelegate("TableEntity_Select", obj, new Action<object, object, IList<TableEntity>>(RowDelegate));
            }
    
            public DataTable GetDataTable(TableEntity obj)
            {
                return base.GetDataTable("TableEntity_Select_Datatable", obj);
            }
    
            public void RowDelegate(object obj, object parameterObject, IList<TableEntity> list)
            {
                TableEntity tb = obj as TableEntity;
                tb.COL_1 = 77;
                list.Add(tb);
            }
        }
    }
    复制代码

    4、IBatisEntity

    1、EntityBase.cs 实体基类

    复制代码
    namespace IBatisEntity
    {
        /// <summary>
        /// 实体基类
        /// </summary>
        [Serializable]
        public class EntityBase
        {
            // Fields
            protected EntityBase OldValue;
    
            protected EntityStateEnum _entityState = EntityStateEnum.Unchanged;
            /// <summary>
            /// 实体的数据版本,默认为未改变
            /// </summary>
            public EntityStateEnum EntityState
            {
                get { return _entityState; }
                set { _entityState = value; }
            }
    
            /// <summary>
            /// 默认构造函数
            /// </summary>
            protected EntityBase()
            {
    
            }
    
            /// <summary>
            /// 实现克隆接口
            /// </summary>
            /// <returns></returns>
            public virtual object Clone()
            {
                MemoryStream serializationStream = new MemoryStream();
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(serializationStream, this);
                serializationStream.Position = 0;
                return formatter.Deserialize(serializationStream);
            }
    
            /// <summary>
            /// 在实体与数据表做相互转换时,制定表的列名称模式
            /// </summary>
            public enum ColumnNameEnum
            {
                /// <summary>
                /// 数据库对应列名称
                /// </summary>
                DBName = 1,
                /// <summary>
                /// 实体对应字段名称
                /// </summary>
                PropertyName = 2
            }
        }
    
        /// <summary>
        /// 实体版本枚举
        /// </summary>
        public enum EntityStateEnum
        {
            /// <summary>
            /// 新增
            /// </summary>
            Added = 1,
            /// <summary>
            /// 被修改
            /// </summary>
            Modified = 2,
            /// <summary>
            /// 被删除
            /// </summary>
            Deleted = 3,
            /// <summary>
            /// 未修改
            /// </summary>
            Unchanged = 4,
            /// <summary>
            /// 新增的但是未加入任何table中
            /// </summary>
            Detached = 5
        }
    }
    复制代码

    2、TableEntity.cs 实体类

    复制代码
    namespace IBatisEntity
    {
        [Serializable]
        public class TableEntity : EntityBase
        {
            public long ID { get; set; }
            public int COL_1 { get; set; }
            public int COL_2 { get; set; }
            public int COL_3 { get; set; }
            public DateTime REFRESH_DATE { get; set; }
        }
    }
    复制代码

    5、IBatisApp界面层访问

    1、Form1.cs

    复制代码
    namespace IBatisApp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                TableAccess tableAccess = new TableAccess();
                object a = tableAccess.Insert(new TableEntity() { COL_1 = -1, COL_2 = -2, COL_3 = -3, REFRESH_DATE = DateTime.Now });
                MessageBox.Show(a.ToString());
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                TableAccess tableAccess = new TableAccess();
                IList<TableEntity> a = tableAccess.Select(new TableEntity() { ID = 66 });
    
                a = tableAccess.SelectWithRowDelegate(new TableEntity() { ID = 66 });
                MessageBox.Show(a.Count.ToString());
    
                DataTable dt = tableAccess.GetDataTable(new TableEntity() { ID = 66 });
            }
        }
    }
    复制代码

    6、xml文件配置

    1、providers.config 提供了一些支持的数据库版本信息

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <providers 
    xmlns="http://ibatis.apache.org/providers" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
    <clear/>
    <provider 
          name="sqlServer1.0" 
          description="Microsoft SQL Server, provider V1.0.3300.0 in framework .NET V1.0" 
          enabled="false" 
          assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection" 
          commandClass="System.Data.SqlClient.SqlCommand" 
          parameterClass="System.Data.SqlClient.SqlParameter" 
          parameterDbTypeClass="System.Data.SqlDbType" 
          parameterDbTypeProperty="SqlDbType" 
          dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" 
          commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder" 
          usePositionalParameters="false" 
          useParameterPrefixInSql="true" 
          useParameterPrefixInParameter="true" 
          parameterPrefix="@"
          allowMARS="false"
      />
    <provider 
          name="sqlServer1.1" 
          description="Microsoft SQL Server, provider V1.0.5000.0 in framework .NET V1.1" 
          enabled="false"
          default="true" 
          assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
          connectionClass="System.Data.SqlClient.SqlConnection" 
          commandClass="System.Data.SqlClient.SqlCommand" 
          parameterClass="System.Data.SqlClient.SqlParameter" 
          parameterDbTypeClass="System.Data.SqlDbType" 
          parameterDbTypeProperty="SqlDbType" 
          dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" 
          commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder" 
          usePositionalParameters="false" 
          useParameterPrefixInSql="true" 
          useParameterPrefixInParameter="true" 
          parameterPrefix="@"
          allowMARS="false"
      />
    <provider
        name="sqlServer2.0"
        enabled="false"
        description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0" 
        assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        connectionClass="System.Data.SqlClient.SqlConnection" 
        commandClass="System.Data.SqlClient.SqlCommand"
        parameterClass="System.Data.SqlClient.SqlParameter"
        parameterDbTypeClass="System.Data.SqlDbType"
        parameterDbTypeProperty="SqlDbType"
        dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
        commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
        usePositionalParameters = "false"
        useParameterPrefixInSql = "true"
        useParameterPrefixInParameter = "true" 
        parameterPrefix="@"
        allowMARS="false"
        />
      <provider
         name="sqlServer2005"
         enabled="false"
         description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0" 
         assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
         connectionClass="System.Data.SqlClient.SqlConnection" 
         commandClass="System.Data.SqlClient.SqlCommand"
         parameterClass="System.Data.SqlClient.SqlParameter"
         parameterDbTypeClass="System.Data.SqlDbType"
         parameterDbTypeProperty="SqlDbType"
         dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
         commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
         usePositionalParameters = "false"
         useParameterPrefixInSql = "true"
         useParameterPrefixInParameter = "true" 
         parameterPrefix="@"
         allowMARS="true"
        /> 
    <provider name="OleDb1.1" 
          description="OleDb, provider V1.0.5000.0 in framework .NET V1.1" 
          enabled="false"
          assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        connectionClass="System.Data.OleDb.OleDbConnection" 
          commandClass="System.Data.OleDb.OleDbCommand" 
          parameterClass="System.Data.OleDb.OleDbParameter" 
          parameterDbTypeClass="System.Data.OleDb.OleDbType" 
          parameterDbTypeProperty="OleDbType" 
          dataAdapterClass="System.Data.OleDb.OleDbDataAdapter" 
          commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder" 
          usePositionalParameters="true" 
          useParameterPrefixInSql="false" 
          useParameterPrefixInParameter="false" 
          parameterPrefix=""
        allowMARS="false"    
        />
      <provider name="OleDb2.0" 
        description="OleDb, provider V2.0.0.0 in framework .NET V2" 
        enabled="false"
        assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        connectionClass="System.Data.OleDb.OleDbConnection" 
        commandClass="System.Data.OleDb.OleDbCommand" 
        parameterClass="System.Data.OleDb.OleDbParameter" 
        parameterDbTypeClass="System.Data.OleDb.OleDbType" 
        parameterDbTypeProperty="OleDbType" 
        dataAdapterClass="System.Data.OleDb.OleDbDataAdapter" 
        commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder" 
        usePositionalParameters="true" 
        useParameterPrefixInSql="false" 
        useParameterPrefixInParameter="false" 
        parameterPrefix=""
        allowMARS="false"
        />  
      <provider 
        name="Odbc1.1" 
        description="Odbc, provider V1.0.5000.0 in framework .NET V1.1" 
        enabled="false" 
        assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        connectionClass="System.Data.Odbc.OdbcConnection" 
        commandClass="System.Data.Odbc.OdbcCommand" 
        parameterClass="System.Data.Odbc.OdbcParameter" 
        parameterDbTypeClass="System.Data.Odbc.OdbcType" 
        parameterDbTypeProperty="OdbcType" 
        dataAdapterClass="System.Data.Odbc.OdbcDataAdapter" 
        commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder" 
        usePositionalParameters="true" 
        useParameterPrefixInSql="false" 
        useParameterPrefixInParameter="false" 
        parameterPrefix="@"
        allowMARS="false"    
        />
      <provider 
        name="Odbc2.0" 
        description="Odbc, provider V2.0.0.0 in framework .NET V2" 
        enabled="false" 
        assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        connectionClass="System.Data.Odbc.OdbcConnection" 
        commandClass="System.Data.Odbc.OdbcCommand" 
        parameterClass="System.Data.Odbc.OdbcParameter" 
        parameterDbTypeClass="System.Data.Odbc.OdbcType" 
        parameterDbTypeProperty="OdbcType" 
        dataAdapterClass="System.Data.Odbc.OdbcDataAdapter" 
        commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder" 
        usePositionalParameters="true" 
        useParameterPrefixInSql="false" 
        useParameterPrefixInParameter="false" 
        parameterPrefix="@"
        allowMARS="false"    
      />  
      <provider 
        name="oracle9.2" 
        description="Oracle, Oracle provider V9.2.0.401" 
        enabled="false" 
        assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" 
        commandClass="Oracle.DataAccess.Client.OracleCommand" 
        parameterClass="Oracle.DataAccess.Client.OracleParameter" 
        parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" 
        parameterDbTypeProperty="OracleDbType" 
        dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" 
        commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" 
        usePositionalParameters="false"
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="false" 
        parameterPrefix=":" 
        useDeriveParameters="false"
        allowMARS="false"    
      />
      <provider 
        name="oracle10.1" 
        description="Oracle, oracle provider V10.1.0.301"
        enabled="false" 
        assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" 
        commandClass="Oracle.DataAccess.Client.OracleCommand" 
        parameterClass="Oracle.DataAccess.Client.OracleParameter" 
        parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" 
        parameterDbTypeProperty="OracleDbType" 
        dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" 
        commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" 
        usePositionalParameters="true" 
        useParameterPrefixInSql="true"
        useParameterPrefixInParameter="true" 
        parameterPrefix=":" 
        useDeriveParameters="false"
        allowMARS="false"    
      />
      <provider 
        name="oracleClient1.0" 
        description="Oracle, Microsoft provider V1.0.5000.0" 
        enabled="false" 
        assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection" 
        commandClass="System.Data.OracleClient.OracleCommand" 
        parameterClass="System.Data.OracleClient.OracleParameter" 
        parameterDbTypeClass="System.Data.OracleClient.OracleType" 
        parameterDbTypeProperty="OracleType" 
        dataAdapterClass="System.Data.OracleClient.OracleDataAdapter" 
        commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder" 
        usePositionalParameters="false" 
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="false" 
        parameterPrefix=":"
        allowMARS="false"    
      />
    <provider 
            name="oracleClient2.0" 
            description="Oracle, Microsoft provider V2.0.50727.42" 
            enabled="true" 
            assemblyName="System.Data.OracleClient, Version=2.0.50727.42, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection" 
            commandClass="System.Data.OracleClient.OracleCommand" 
            parameterClass="System.Data.OracleClient.OracleParameter" 
            parameterDbTypeClass="System.Data.OracleClient.OracleType" 
            parameterDbTypeProperty="OracleType" 
            dataAdapterClass="System.Data.OracleClient.OracleDataAdapter" 
            commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder" 
            usePositionalParameters="false" 
            useParameterPrefixInSql="true" 
            useParameterPrefixInParameter="false" 
            parameterPrefix=":"/>
      <provider 
        name="ByteFx" 
        description="MySQL, ByteFx provider V0.7.6.15073" 
        enabled="false" 
        assemblyName="ByteFX.MySqlClient, Version=0.7.6.15073, Culture=neutral, PublicKeyToken=f2fef6fed1732fc1" connectionClass="ByteFX.Data.MySqlClient.MySqlConnection" 
        commandClass="ByteFX.Data.MySqlClient.MySqlCommand" 
        parameterClass="ByteFX.Data.MySqlClient.MySqlParameter" 
        parameterDbTypeClass="ByteFX.Data.MySqlClient.MySqlDbType" 
        parameterDbTypeProperty="MySqlDbType" 
        dataAdapterClass="ByteFX.Data.MySqlClient.MySqlDataAdapter" 
        commandBuilderClass="ByteFX.Data.MySqlClient.MySqlCommandBuilder" 
        usePositionalParameters="false" 
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="true" 
        parameterPrefix="@"
        allowMARS="false"    
      />
      <provider 
        name="MySql" 
        description="MySQL, MySQL provider 1.0.7.30072" 
        enabled="false" 
        assemblyName="MySql.Data, Version=1.0.7.30072, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection" 
        commandClass="MySql.Data.MySqlClient.MySqlCommand" 
        parameterClass="MySql.Data.MySqlClient.MySqlParameter" 
        parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType" 
        parameterDbTypeProperty="MySqlDbType" 
        dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter" 
        commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder" 
        usePositionalParameters="false" 
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="true" 
        parameterPrefix="?"
        allowMARS="false"    
      />
      <provider name="SQLite3 Finisar"
        description="SQLite, SQLite.NET provider V0.21.1869.3794"
        enabled="false"
        assemblyName="SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c" 
        connectionClass="Finisar.SQLite.SQLiteConnection"
        commandClass="Finisar.SQLite.SQLiteCommand"
        parameterClass="Finisar.SQLite.SQLiteParameter"
        parameterDbTypeClass="System.Data.DbType, System.Data"
        parameterDbTypeProperty="DbType"
        dataAdapterClass="Finisar.SQLite.SQLiteDataAdapter"
        commandBuilderClass="Finisar.SQLite.SQLiteCommandBuilder"
        usePositionalParameters="false"
        useParameterPrefixInSql="true"
        useParameterPrefixInParameter="true"
        parameterPrefix="@"
        setDbParameterPrecision="false"
        setDbParameterScale="false"
        allowMARS="false"    
      />
      <provider name="SQLite3"
        description="SQLite, SQLite.NET provider V1.0.43.0"
        enabled="false"
        assemblyName="System.Data.SQLite, Version=1.0.43.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
        connectionClass="System.Data.SQLite.SQLiteConnection"
        commandClass="System.Data.SQLite.SQLiteCommand"
        parameterClass="System.Data.SQLite.SQLiteParameter"
        parameterDbTypeClass="System.Data.SQLite.SQLiteType"
        parameterDbTypeProperty="DbType"
        dataAdapterClass="System.Data.SQLite.SQLiteDataAdapter"
        commandBuilderClass="System.Data.SQLite.SQLiteCommandBuilder"
        usePositionalParameters="false"
        useParameterPrefixInSql="true"
        useParameterPrefixInParameter="true"
        parameterPrefix="@"
        setDbParameterPrecision="false"
        setDbParameterScale="false"
        allowMARS="false"
      />
      <provider
        name="Firebird1.7" 
        description="Firebird, Firebird SQL .NET provider V1.7.0.33200" 
        enabled="false" 
        assemblyName="FirebirdSql.Data.Firebird, Version=1.7.0.33200, Culture=neutral, PublicKeyToken=fa843d180294369d" connectionClass="FirebirdSql.Data.Firebird.FbConnection" 
        commandClass="FirebirdSql.Data.Firebird.FbCommand" 
        parameterClass="FirebirdSql.Data.Firebird.FbParameter" 
        parameterDbTypeClass="FirebirdSql.Data.Firebird.FbDbType" 
        parameterDbTypeProperty="FbDbType" 
        dataAdapterClass="FirebirdSql.Data.Firebird.FbDataAdapter" 
        commandBuilderClass="FirebirdSql.Data.Firebird.FbCommandBuilder" 
        usePositionalParameters="false" 
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="true" 
        parameterPrefix="@"
        allowMARS="false"    
      />
      <provider
        name="PostgreSql0.99.1.0" 
        description="PostgreSql, Npgsql provider V0.99.1.0" 
        enabled="false" 
        assemblyName="Npgsql, Version=0.99.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" 
        connectionClass="Npgsql.NpgsqlConnection" 
        commandClass="Npgsql.NpgsqlCommand" 
        parameterClass="Npgsql.NpgsqlParameter" 
        parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType" 
        parameterDbTypeProperty="NpgsqlDbType" 
        dataAdapterClass="Npgsql.NpgsqlDataAdapter" 
        commandBuilderClass="Npgsql.NpgsqlCommandBuilder" 
        usePositionalParameters="false" 
        useParameterPrefixInSql="true" 
        useParameterPrefixInParameter="true" 
        parameterPrefix=":"
        allowMARS="true"    
      />    
      <provider 
        name="iDb2.10" 
        description="IBM DB2 Provider, V 10.0" 
        enabled="false" 
        assemblyName="IBM.Data.DB2.iSeries, Version=10.0.0.0,Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26, Custom=null" connectionClass="IBM.Data.DB2.iSeries.iDB2Connection" 
        commandClass="IBM.Data.DB2.iSeries.iDB2Command" 
        parameterClass="IBM.Data.DB2.iSeries.iDB2Parameter" 
        parameterDbTypeClass="IBM.Data.DB2.iSeries.iDB2DbType" 
        parameterDbTypeProperty="iDB2DbType" 
        dataAdapterClass="IBM.Data.DB2.iSeries.iDB2DataAdapter" 
        commandBuilderClass="IBM.Data.DB2.iSeries.iDB2CommandBuilder" 
        usePositionalParameters="true" 
        useParameterPrefixInSql="false" 
        useParameterPrefixInParameter="false" 
        parameterPrefix=""
        allowMARS="false"    
      />
      <provider 
        name="Informix" 
        description="Informix NET Provider, 2.81.0.0" 
        enabled="false" 
        assemblyName="IBM.Data.Informix, Version=2.81.0.0, Culture=neutral, PublicKeyToken=7c307b91aa13d208" 
        connectionClass="IBM.Data.Informix.IfxConnection" 
        commandClass="IBM.Data.Informix.IfxCommand" 
        parameterClass="IBM.Data.Informix.IfxParameter" 
        parameterDbTypeClass="IBM.Data.Informix.IfxType" 
        parameterDbTypeProperty="IfxType" 
        dataAdapterClass="IBM.Data.Informix.IfxDataAdapter" 
        commandBuilderClass="IBM.Data.Informix.IfxCommandBuilder" 
        usePositionalParameters = "true" 
        useParameterPrefixInSql = "false" 
        useParameterPrefixInParameter = "false" 
        useDeriveParameters="false" 
        allowMARS="false"    
        />
    </providers>
    复制代码

    2、sqlMap.config sqlmap的基本信息

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    
      <!-- Rem : If used via a DataAccess context, properties tag will be ignored -->
      <!--数据库配置参数 属性-->
      <properties resource="Config//DataBase.config"/>
    
      <settings>
        <!--setting useStatementNamespaces="false"/-->
        <setting cacheModelsEnabled="true"/>
        <setting validateSqlMap="false"/>
      </settings>
    
      <providers resource="config//providers.config"/>
    
      <database>
        <provider name="oracleClient2.0"/>
        <dataSource name="${DatabaseName}" connectionString="Data Source=${DataSource}; User ID=${UserID}; Password=${Password}"/>
      </database>
    
      <alias>
        <typeAlias alias="ArrayList" type="System.Collections.ArrayList,mscorlib"/>
      </alias>
      <sqlMaps>
        <!--===== sqlMap文件=======-->    
        <sqlMap resource="config//TableEntity.xml"/>
      </sqlMaps>
    </sqlMapConfig>
    复制代码

    3、DataBase.config 数据库链接字符串

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
    
        <!--  定义4个属性,在sqlMap.config中调用 -->
        <add key="DatabaseName" value="DatabaseName"/>
        <add key="DataSource" value="DataSource"/>
        <add key="UserID" value="UserID"/>
        <add key="Password" value="Password"/>
        
    </settings>
    复制代码

    4、TableEntity.xml 具体操作的xml

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <sqlMap namespace="TableEntity"   xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <alias>
        <typeAlias alias="TableEntity"  type="IBatisEntity.TableEntity" />
        <!--<typeAlias alias="TableEntity.Key" type="long" />-->
      </alias>
      <resultMaps>
        <resultMap id="TableEntity_AllColumns" class="TableEntity">
          <result property="ID"  column="ID" />
          <result property="COL_1"  column="COL_1" />
          <result property="COL_2"  column="COL_2" />
          <result property="COL_3"  column="COL_3" />
          <result property="REFRESH_DATE"  column="REFRESH_DATE" />
        </resultMap>
      </resultMaps>
      <parameterMaps>
        <parameterMap id="TableEntityParam" class="HashTable">
          <parameter property="ID"  column="ID" direction="Input" />
          <parameter property="COL_1"  column="COL_1" direction="Input" />
          <parameter property="COL_2"  column="COL_2" direction="Input" />
          <parameter property="COL_3"  column="COL_3" direction="Input" />
          <parameter property="REFRESH_DATE"  column="REFRESH_DATE" direction="Input" />
        </parameterMap>
      </parameterMaps>
      <statements>
        <insert id="TableEntity_Insert"  parameterClass="TableEntity" resultClass="int">
          <!--     按照规范序列应该为[TABLE]_S -->
          <selectKey property="ID" type="pre" resultClass="long">
            select pto_kit_s.nextval as value from dual
          </selectKey>
          INSERT INTO A_TEST_1
          (ID, COL_1, COL_2, COL_3)
          VALUES
          (#ID#, #COL_1#, #COL_2#, #COL_3#)
        </insert>
    
        <select id="TableEntity_Select" parameterClass="TableEntity" resultMap="TableEntity_AllColumns">
          select id,
          col_1,
          col_2,
          col_3,
          refresh_date
          from scp.A_TEST_1 t where id=#ID#
        </select>
    
        <select id="TableEntity_Select_Datatable" parameterClass="TableEntity">
          select id,
          col_1,
          col_2,
          col_3,
          refresh_date
          from A_TEST_1 t where id=#ID#
        </select>
      </statements>
    </sqlMap>
    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <sqlMap namespace="TableEntity"   xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <alias>
        <typeAlias alias="TableEntity"  type="IBatisEntity.TableEntity" />
        <!--<typeAlias alias="TableEntity.Key" type="long" />-->
      </alias>
      <resultMaps>
        <resultMap id="TableEntity_AllColumns" class="TableEntity">
          <result property="ID"  column="ID" />
          <result property="COL_1"  column="COL_1" />
          <result property="COL_2"  column="COL_2" />
          <result property="COL_3"  column="COL_3" />
          <result property="REFRESH_DATE"  column="REFRESH_DATE" />
        </resultMap>
      </resultMaps>
      <parameterMaps>
        <parameterMap id="TableEntityParam" class="HashTable">
          <parameter property="ID"  column="ID" direction="Input" />
          <parameter property="COL_1"  column="COL_1" direction="Input" />
          <parameter property="COL_2"  column="COL_2" direction="Input" />
          <parameter property="COL_3"  column="COL_3" direction="Input" />
          <parameter property="REFRESH_DATE"  column="REFRESH_DATE" direction="Input" />
        </parameterMap>
      </parameterMaps>
      <statements>
        <insert id="TableEntity_Insert"  parameterClass="TableEntity" resultClass="int">
          <!--     按照规范序列应该为[TABLE]_S -->
          <selectKey property="ID" type="pre" resultClass="long">
            select pto_kit_s.nextval as value from dual
          </selectKey>
          INSERT INTO A_TEST_1
          (ID, COL_1, COL_2, COL_3)
          VALUES
          (#ID#, #COL_1#, #COL_2#, #COL_3#)
        </insert>
    
        <select id="TableEntity_Select" parameterClass="TableEntity" resultMap="TableEntity_AllColumns">
          select id,
          col_1,
          col_2,
          col_3,
          refresh_date
          from scp.A_TEST_1 t where id=#ID#
        </select>
    
        <select id="TableEntity_Select_Datatable" parameterClass="TableEntity">
          select id,
          col_1,
          col_2,
          col_3,
          refresh_date
          from A_TEST_1 t where id=#ID#
        </select>
      </statements>
    </sqlMap>
    复制代码
  • 相关阅读:
    Dynamics CRM安装教程一:域环境准备
    C#判断日期是否合法
    Visual Studio 2015 无法加载.Net FrameWork4.6.2
    Dynamics CRM产生公共签名,避免每次插件换环境重新输入签名密钥账号密码
    Dynamics CRM使用JS隐藏自定义按钮
    <3>Python开发——列表(list)
    <2>Python开发——字符串(str)
    <1>Python开发——基础入门
    Sed命令详解
    国内搭建Minikube测试环境
  • 原文地址:https://www.cnblogs.com/soundcode/p/5075661.html
Copyright © 2011-2022 走看看