zoukankan      html  css  js  c++  java
  • Castle.net

    using System;

    using System.Collections.Generic;

    using System.Linq;
    using System.Text;
    using Castle.ActiveRecord;
    using NHibernate.Criterion;
    using System.ComponentModel.DataAnnotations;
    using NHibernate;

    namespace Model
    {
    /// <summary>
    /// 实体类基类,所有实体必须继承自EntityBase(为了被ORM框架管理)
    /// </summary>
    /// <typeparam name="T">子类的类型,如:Driver,Users</typeparam>
    public class EntityBase<T>:ActiveRecordBase where T:class
    {
    [PrimaryKey(PrimaryKeyType.Identity)]//采用Castle.Net提供的算法生成ID
    [Display(AutoGenerateField = false)]//在生成MVC3.0视图时不生成本属性
    public virtual int ID { get; set; }//主键


    public void Create(T t)
    {
    ActiveRecordBase.Create(t);
    }

    public void Update(T t)
    {
    ActiveRecordBase.Update(t);
    }

    public void DeleteAll()//删除所有数据
    {
    DeleteAll(typeof(T));
    }

    public void Delete(int id)//根据id删除实体
    {
    T t = Get(id);//根据id获取对象
    if (t != null)//如果对象存在
    {
    Delete(t);//删除它
    }
    }

    public IList<T> GetAll()//获取所有对象
    {
    return FindAll(typeof(T)) as IList<T>;
    }

    public IList<T> GetAll(IList<ICriterion> queryConditions)//根据查询条件集合获取所有对象
    {
    Array arr = FindAll(typeof(T));//Castle.net默认是数组
    return arr as IList<T>;//将数组转换为IList集合
    }

    public T Get(int ID)//根据ID获取对象
    {
    return FindByPrimaryKey(typeof(T), ID) as T;
    }

    //分页区和取对象集合
    public IList<T> GetPaged(IList<ICriterion> queryConditions, IList<Order> orderList, int pageIndex, int pageSize, out int count)
    {
    if (queryConditions == null)//如果为null则赋值为一个总数为0的集合
    {
    queryConditions = new List<ICriterion>();
    }
    if (orderList == null)//如果为null则赋值为一个总数为0的集合
    {
    orderList = new List<Order>();
    }
    count = Count(typeof(T), queryConditions.ToArray());//根据查询条件获取满足条件的对象总数
    Array arr = SlicedFindAll(typeof(T), (pageIndex - 1) * pageSize, pageSize, orderList.ToArray(),queryConditions.ToArray());//根据查询条件分页获取对象集合
    return arr as IList<T>;
    }

    /// <summary>
    /// 根据查询条件分页获取实体
    /// </summary>
    /// <param name="queryConditions">查询条件集合</param>
    /// <param name="pageIndex">当前页码,从1开始</param>
    /// <param name="pageSize">页面大小</param>
    /// <param name="count">返回满足查询条件</param>
    /// <returns>返回满足查询条件的实体</returns>
    public IList<T> GetPaged(IList<KeyValuePair<string, string>> queryConditions, int pageIndex, int pageSize, out int count)
    {
    //实例化一个hql查询语句对象
    StringBuilder hql = new StringBuilder(@"from " + typeof(T).Name + " d");
    //根据查询条件构造hql查询语句
    for (int i = 0; i < queryConditions.Count; i++)
    {
    KeyValuePair<string, string> keyv = queryConditions[i];//获取当前序号对应的条件
    if (!string.IsNullOrEmpty(keyv.Value))
    {
    AddHqlSatements(hql);//增加where或and语句
    hql.Append("d." + keyv.Key + " = : q_" + i.ToString());
    }
    }

    ISession session = ActiveRecordBase.holder.CreateSession(typeof(T));//获取管理DeliveryForm的session对象
    IQuery query = session.CreateQuery(hql.ToString());//获取满足条件的数据
    IQuery queryScalar = session.CreateQuery("select count(ID) " + hql.ToString());//获取满足条件的数据的总数
    for (int i = 0; i < queryConditions.Count; i++)
    {
    KeyValuePair<string, string> keyv = queryConditions[i];//获取当前序号对应的条件
    if (!string.IsNullOrEmpty(keyv.Value))
    {
    queryScalar.SetString("q_" + i, keyv.Value);//用查询条件的值去填充hql,如d.Transportor.Name="michael"
    query.SetString("q_" + i, keyv.Value);
    }
    }
    IList<object> result = queryScalar.List<object>();//执行查询条件总数的查询对象,返回一个集合(有一点怪异)
    int.TryParse(result[0].ToString(), out count);//尝试将返回值的第一个值转换为整形,并将转换成功的值赋值给count,如果转换失败,count=0
    query.SetFirstResult((pageIndex - 1) * pageSize);//设置获取满足条件实体的起点
    query.SetMaxResults(pageSize);//设置获取满足条件实体的终点
    IList<T> arr = query.List<T>();//返回当前页的数据
    session.Close();//关闭session
    return arr;
    }

    protected void AddHqlSatements(StringBuilder hql)
    {
    if (!hql.ToString().Contains("where"))//查询语句的开始条件是where
    {
    hql.Append(" where ");
    }
    else//当hql中有了一个where后再添加查询条件时就应该使用and了
    {
    hql.Append(" and ");
    }
    }

    public IList<T> Find(IList<ICriterion> queryConditions)
    {
    Array arr = ActiveRecordBase.FindAll(typeof(T), queryConditions.ToArray());
    return arr as IList<T>;
    }
    }
    }

  • 相关阅读:
    小记面向对象
    公司分层思想的演化历程
    我对uml类图关系的理解
    cms真实问题的来源以及模拟解决方案
    HTTP 协议基础
    Requests库
    接口测试概念
    Python中的strip()函数的用法
    Robot Framework环境搭建
    Python unittest excel数据驱动
  • 原文地址:https://www.cnblogs.com/cqxhl/p/6604566.html
Copyright © 2011-2022 走看看