zoukankan      html  css  js  c++  java
  • LSJ_NHibernate第二章 ManagerPage

    前言:

      项目为传统的三层架构,可以根据个人的需求进行拓展.

    很多人都在质疑B层的作用,我认为B层才是核心,这个取决于业务的复杂度

                                                                

    项目的结构也比较的简单,我们先从最底层说起,ManagerPage,这是我定义的一个基类,它总共做了三件事,1.初始化NHibernate,2.解析参数模板,3.创建ICriteria(条件查询器对象)返回查询结果

    1.初始化NHibernate

     1      /// <summary>
     2         /// 链接信息,初始化NH
     3         /// </summary>
     4         public static ISessionFactory SessionFactory
     5         {
     6             get
     7             {
     8                 if (_sessionFactory == null)
     9                 {
    10                     var path = HttpContext.Current.Server.MapPath("/bin/hibernate.cfg.xml");
    11                     var cfg = new NHibernate.Cfg.Configuration().Configure(path);
    12                     _sessionFactory = cfg.BuildSessionFactory();
    13                 }
    14                 return _sessionFactory;
    15             }
    16         }

    注意,sessionFactory是创建session的工厂,通常一个数据库创建一个即可,是比较耗资源的一个地方,所以必须用到单例

    2.解析参数模板

    1  public class SearchTemplate
    2     {
    3         public string key { get; set; }
    4         public object value { get; set; }
    5         public Common.EnumBase.SearchType searchType { get; set; }
    6 
    7     }

    参数模板有三个属性,分别是 key对应表里的字段,value对应值,searchType对应操作类型,这里是一个枚举

     1  public enum SearchType 
     2        {
     3            /// <summary>
     4            ///  等于
     5            /// </summary>
     6            Eq = 1,
     7            /// <summary>
     8            /// 大于
     9            /// </summary>
    10            Gt =2,
    11            /// <summary>
    12            /// 大于等于
    13            /// </summary>
    14            Ge=3,
    15            /// <summary>
    16            /// 小于
    17            /// </summary>
    18            Lt=4,
    19            /// <summary>
    20            /// 小于等于
    21            /// </summary>
    22            Le =5,
    23            /// <summary>
    24            /// 等于空值
    25            /// </summary>
    26            IsNull =6,
    27            /// <summary>
    28            ///  非空值
    29            /// </summary>
    30            IsNotNull=7,
    31            /// <summary>
    32            /// 模糊查询 xx%
    33            /// </summary>
    34            Like=8,
    35            /// <summary>
    36            /// 模糊查询 %xx
    37            /// </summary>
    38            StartLike = 9,
    39            /// <summary>
    40            /// 等于列表中的某一个值
    41            /// </summary>
    42            In =10,
    43            /// <summary>
    44            /// 不等于列表中任意一个值
    45            /// </summary>
    46            NotIn=11,
    47            /// <summary>
    48            /// 分页{pageindex,pagesize}
    49            /// </summary>
    50            Paging = 12,
    51        }

    这里可以根据自己的需求在这里定义,这里定义的都是ICriteria支持的操作

    3.创建ICriteria对象

     1 private static ICriteria GetCrit(List<SearchTemplate> list, ICriteria crit,int type = 1) 
     2         {
     3             foreach (var item in list)
     4             {
     5                 if (item.value == null) continue;
     6                 if (item.value.GetType() == typeof(String)) 
     7                 {
     8                     if (item.value.ToString() == "") continue;
     9                 }
    10                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Eq.ToString())
    11                 {
    12                     crit.Add(Restrictions.Eq(item.key, item.value));
    13                     continue;
    14                 }
    15                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Gt.ToString())
    16                 {
    17                     crit.Add(Restrictions.Gt(item.key, item.value));
    18                     continue;
    19                 }
    20                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Ge.ToString())
    21                 {
    22                     crit.Add(Restrictions.Ge(item.key, item.value));
    23                     continue;
    24                 }
    25                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Lt.ToString())
    26                 {
    27                     crit.Add(Restrictions.Lt(item.key, item.value));
    28                     continue;
    29                 }
    30                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Le.ToString())
    31                 {
    32                     crit.Add(Restrictions.Le(item.key, item.value));
    33                     continue;
    34                 }
    35                 if (item.searchType.ToString() == Common.EnumBase.SearchType.IsNull.ToString())
    36                 {
    37                     crit.Add(Restrictions.IsNull(item.key));
    38                     continue;
    39                 }
    40                 if (item.searchType.ToString() == Common.EnumBase.SearchType.IsNotNull.ToString())
    41                 {
    42                     crit.Add(Restrictions.IsNotNull(item.key));
    43                     continue;
    44                 }
    45                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Like.ToString())
    46                 {
    47                     crit.Add(Restrictions.Like(item.key, item.value + "%"));
    48                     continue;
    49                 }
    50                 if (item.searchType.ToString() == Common.EnumBase.SearchType.StartLike.ToString())
    51                 {
    52                     crit.Add(Restrictions.Like(item.key, "%" + item.value));
    53                     continue;
    54                 }
    55                 if (item.searchType.ToString() == Common.EnumBase.SearchType.In.ToString())
    56                 {
    57                     crit.Add(Restrictions.In(item.key, (object[])item.value));
    58                     continue;
    59                 }
    60                 if (item.searchType.ToString() == Common.EnumBase.SearchType.NotIn.ToString())
    61                 {
    62                     crit.Add(Restrictions.Not(Restrictions.In(item.key, (object[])item.value)));
    63                     continue;
    64                 }
    65                 if (item.searchType.ToString() == Common.EnumBase.SearchType.Paging.ToString() && type == 1)
    66                 {
    67                     int[] paging = (int[])item.value;
    68                     crit.SetFirstResult((paging[0] - 1) * paging[1]);
    69                     crit.SetMaxResults(paging[1]);
    70                     continue;
    71                 }
    72             }
    73             return crit;
    74         }

    这里返回ICriteria对象,NHibernate的查询方式有多种,你可以根据你的喜好进行拓展Query Over,HQL,ICriteria,Linq

  • 相关阅读:
    JAVA错误:Unable to find config file. Creating new servlet engine config file: /WEBINF/serverconfig.wsdd
    java axis发布web service(二) 发布web service
    JAVA错误:AXIS Web Service Problem: No compiler found in your classpath! (you may need to add ‘tools.jar’)
    JAVA错误:java.lang.UnsupportedClassVersionError: Bad version number in .class file
    JavaScript中的div和filter错误
    拉格朗日乘数法
    Timeout Detection & Recovery (TDR)
    游戏程序员关心的Autodesk Maya 2013相关操作
    Eclipse开发Android程序如何在手机上运行
    我的第一篇随笔
  • 原文地址:https://www.cnblogs.com/tibos/p/6202114.html
Copyright © 2011-2022 走看看