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>
    复制代码
  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/soundcode/p/5075661.html
Copyright © 2011-2022 走看看