Nhibernate 数据操作封装类 可以执行hql 原生sql 返回DataSet

6 篇文章 0 订阅
public class SessionManager
    {
        # region 当前单实例

        private readonly static SessionManager instance = new SessionManager();
        /// <summary>
        /// 当前实例
        /// </summary>
        public static SessionManager CurrInstance
        {
            get
            {
                return instance;
            }
        }

        # endregion

        private ISessionFactory _sessionFactory;
        private SessionManager()
        {
            _sessionFactory = GetSessionFactory();
        }
        private ISessionFactory GetSessionFactory()
        {
            //string strFilePaht = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "hibernate.cfg.xml";
            Configuration config = (new Configuration()).Configure();
            glo.DataBaseDerived = config.GetDerivedProperties()["connection.driver_class"].ToString();
             
            return config.BuildSessionFactory();
        }
        /// <summary>
        /// 获取Session
        /// </summary>
        /// <returns></returns>
        public ISession GetSession()
        {
            return _sessionFactory.OpenSession();
        }

        /// <summary>
        /// 初始数据库设置
        /// </summary>
        public void DbInitial()
        {
            ISession _session= _sessionFactory.OpenSession();
            _session.Close();
        }
    }
 

public class NhibernateHelper : IDbHelper     {         # region 当前单实例

        private readonly static NhibernateHelper instance = new NhibernateHelper();         public static NhibernateHelper CurrInstance         {             get             {                 return instance;             }         }

        # endregion

        /// <summary>         /// 新增记录         /// </summary>         /// <param name="Model"></param>         /// <returns></returns>         public bool CreateModel(object Model)         {             bool bl = true;                         using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {   _session.Save(Model);                     _session.Flush();                     tx.Commit();                 }                 catch (HibernateException ex)                 {                     bl = false;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return bl;         }

        /// <summary>         /// 修改记录         /// </summary>         /// <param name="Model"></param>         /// <returns></returns>         public bool UpdateModel(object Model)         {             bool bl = true;

            using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {                     _session.Update(Model);                     _session.Flush();                     tx.Commit();                 }                 catch (HibernateException ex)                 {                     bl = false;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return bl;         }

        /// <summary>         /// 批量保存更新实体类         /// </summary>         /// <param name="Models"></param>         /// <returns></returns>         public bool SaveOrUpdateModel(IList<object> Models)         {             bool bl = true;

            using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {                     foreach (var Model in Models)                     {                         _session.Update(Model);                     }                     _session.Flush();                     tx.Commit();                 }                 catch (HibernateException ex)                 {                     bl = false;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return bl;         }

        /// <summary>         /// 删除记录         /// </summary>         /// <param name="Model"></param>         /// <returns></returns>         public bool DeleteModel(object Model)         {             bool bl = true;

            using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {                     _session.Delete(Model);                     _session.Flush();                     tx.Commit();                 }                 catch (HibernateException ex)                 {                     bl = false;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return bl;         }

        /// <summary>         /// 删除记录(ByID)         /// </summary>         /// <param name="Model"></param>         /// <returns></returns>         public bool DeleteModelByID(string entityName, object ID)         {             bool bl = true;

            using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {                     object Model=_session.Get(entityName, ID);                     _session.Delete(Model);                     _session.Flush();                     tx.Commit();                 }                 catch (HibernateException ex)                 {                     bl = false;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return bl;         }

        /// <summary>         /// 按ID查找记录        /// </summary>        /// <param name="entityName">实体类的名字</param>        /// <param name="ID">记录ID</param>        /// <returns></returns>         public object GetModelById(string entityName,object ID)         {             using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 try                 {                    return _session.Get(entityName, ID);                                       }                 catch (HibernateException ex)                 {                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }         }

        /// <summary>         /// 执行Hql查询语句         /// </summary>         /// <param name="hql"></param>         /// <returns></returns>         public IList<object> CreateHqlQuery(string hql)         {             using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 try                 {                     return _session.CreateQuery(hql).List<object>();                 }                 catch (HibernateException ex)                 {                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }         }

        /// <summary>         /// 执行Hql查询语句,不直接释放session,请在外部使用时加using释放         /// </summary>         /// <param name="hql"></param>         /// <returns></returns>         public IList<object> CreateHqlQueryNoRelease(string hql, ref ISession _session)         {             try             {                 _session = SessionManager.CurrInstance.GetSession();                 return _session.CreateQuery(hql).List<object>();             }             catch(HibernateException ex)             {                 throw ex;             }                         }

        /// <summary>         /// 执行Hql语句,并返回object[],例子:select c.Name, count(c.Name) from Gbook c group by c.Name         /// </summary>         /// <param name="hql"></param>         /// <returns></returns>         public IList<object[]> CreateHqlQuery_Arry(string hql)         {             using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 try                 {                     return _session.CreateQuery(hql).List<object[]>();                 }                 catch (HibernateException ex)                 {                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }         }

        /// <summary>         /// 执行Hql,更新、删除语句,多条语句使用 ; 间隔         /// </summary>         /// <param name="hql"></param>         /// <returns>返回执行记录数</returns>         public int CreateHqlQuery_UpdateAndDelete(string hql)         {             int Count = 0;             int i = 0;             using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 ITransaction tx = _session.BeginTransaction();                 try                 {                     string[] strArry=hql.Split(';');                     foreach (string strhql in strArry)                     {                         i = _session.CreateQuery(strhql).ExecuteUpdate();                         Count += i;                     }                     _session.Flush();                     tx.Commit();                                    }                 catch (HibernateException ex)                 {                     Count = -1;                     tx.Rollback();                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }             return Count;         }

        /// <summary>         /// 执行Sql查询语句         /// </summary>         /// <param name="hql"></param>         /// <returns></returns>         public IList<object> CreateSqlQuery(string sql)         {             using (ISession _session = SessionManager.CurrInstance.GetSession())             {                 try                 {                     return _session.CreateSQLQuery(sql).List<object>();                 }                 catch (HibernateException ex)                 {                     throw ex;                 }                 finally                 {                     if (_session != null)                     {                         _session.Close();                     }                 }             }         }

        /// <summary>         /// 执行sql语句,没有返回数据集,提供事务支持         /// </summary>         /// <param name="sql"></param>         /// <returns></returns>         public bool ExecuteNonQuery(string sql)         {             return ExecuteNonQuery(sql, null);         }

        /// <summary>         /// 执行sql语句,没有返回数据集,提供事务支持         /// </summary>         /// <param name="sql"></param>         /// <param name="paramenters"></param>         /// <returns></returns>         public bool ExecuteNonQuery(string sql, IDbDataParameter[] paramenters)         {             bool bl = false;             ISession _session = null;             ITransaction transaction = null;             try             {                 _session = SessionManager.CurrInstance.GetSession();                 transaction = _session.BeginTransaction();                 IDbCommand command = _session.Connection.CreateCommand();                 transaction.Enlist(command);//注意此处要把command添加到事物中                 command.CommandText = sql;                 if (paramenters != null)                 {                     foreach (IDataParameter parm in paramenters)                     {                         command.Parameters.Add(parm);                     }                 }                 int i=command.ExecuteNonQuery();                 transaction.Commit();             }             catch (Exception ex)             {                 if (transaction != null)                 {                     transaction.Rollback();                 }                 throw ex;             }             finally             {                 if (_session != null)                 {                     _session.Close();                 }             }             return bl;         }

        /// <summary>         /// 填充DataSet,方法二         /// </summary>         /// <param name="sql"></param>         /// <returns></returns>         public DataSet ExecuteDataset2(string sql)         {             ISession _session = null;             DataSet ds = new DataSet();             try             {                 _session = SessionManager.CurrInstance.GetSession();                 IDbCommand command = _session.Connection.CreateCommand();                 command.CommandText = sql;                 IDataReader reader = command.ExecuteReader();                 DataTable result = new DataTable();                 //result.Load(reader);//此方法亦可                 DataTable schemaTable = reader.GetSchemaTable();                 for (int i = 0; i < schemaTable.Rows.Count; i++)                 {                     string columnName = schemaTable.Rows[i][0].ToString();                     result.Columns.Add(columnName);                 }                 while (reader.Read())                 {                     int fieldCount = reader.FieldCount;                     object[] values = new Object[fieldCount];                     for (int i = 0; i < fieldCount; i++)                     {                         values[i] = reader.GetValue(i);                     }                     result.Rows.Add(values);                 }                 ds.Tables.Add(result);             }             catch (Exception ex)             {                 throw ex;             }             finally             {                 if (_session != null)                 {                     _session.Close();                 }             }             return ds;

        }

        /// <summary>         /// 填充DataSet(此方法亦可)         /// </summary>         /// <param name="sql"></param>         /// <returns></returns>         public DataSet ExecuteDataset(string sql)         {             return ExecuteDataset(sql, null);         }

        /// <summary>         /// 填充DataSet         /// </summary>         /// <param name="sql"></param>         /// <returns></returns>         public DataSet ExecuteDataset(string sql,IDbDataParameter[] paramenters)         {             ISession _session = null;             DataSet ds = new DataSet();             try             {                 _session = SessionManager.CurrInstance.GetSession();                 IDbCommand command = _session.Connection.CreateCommand();                 command.CommandText = sql;                 if (paramenters != null)                 {                     foreach (IDataParameter parm in paramenters)                     {                         command.Parameters.Add(parm);                     }                 }                 switch (glo.DataBaseType)                 {                     case DataBaseType.SqlServer:                         SqlDataAdapter da = new SqlDataAdapter(command as SqlCommand);                         da.Fill(ds);                         break;                     case DataBaseType.MySql:                         MySqlDataAdapter daMy = new MySqlDataAdapter(command as MySqlCommand);                         daMy.Fill(ds);                         break;                     case DataBaseType.Oracle:                         OracleDataAdapter daOrl = new OracleDataAdapter(command as OracleCommand);                         daOrl.Fill(ds);                         break;                     default:                         break;                 }             }             catch (Exception ex)             {                 throw ex;             }             finally             {                 if (_session != null)                 {                     _session.Close();                 }             }             return ds;

        }

    }     /// <summary>     /// 数据库类型     /// </summary>     public enum DataBaseType     {         MySql,         SqlServer,         Oracle     }

    public class glo     {         private static string dataBaseDerived = "";         /// <summary>         /// Nhibernate数据库驱动配置         /// </summary>         public static string DataBaseDerived         {             set             {                 dataBaseDerived = value;                 switch (dataBaseDerived)                 {                     case "NHibernate.Driver.MySqlDataDriver":                         dataBaseType = DataBaseType.MySql;                         break;                     case "NHibernate.Driver.SqlClientDriver":                         dataBaseType = DataBaseType.SqlServer;                         break;                     case "NHibernate.Driver.OracleClientDriver":                         dataBaseType = DataBaseType.Oracle;                         break;                 }             }             get             {                 return dataBaseDerived;             }         }         private static DataBaseType dataBaseType;         /// <summary>         /// 数据库类型         /// </summary>         public static DataBaseType DataBaseType         {             get             {                 if (glo.DataBaseDerived == "")                 {                     SessionManager.CurrInstance.DbInitial();                                    }                 return dataBaseType;             }         }

        #region 使用web.config的配置方法         //private static DataBaseType baseType;         //public static DataBaseType BaseType         //{         //    get         //    {         //        string strDbtype = ConfigHelper.GetConfigString("DataType");         //        switch (strDbtype)         //        {         //            case "MYSQL":         //                baseType=DataBaseType.MySql;         //                break;         //            case "SQLSERVER":         //                baseType=DataBaseType.SqlServer;         //                break;         //            case "ORACLE":         //                baseType=DataBaseType.Oracle;         //                break;         //        }                        //        return baseType;         //    }         //}         #endregion     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值