• 自己写的Dapper通用数据访问层


      1   1 using Microsoft.Practices.EnterpriseLibrary.Data;
      2   2 using Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
      3   3 using System;
      4   4 using System.Collections.Generic;
      5   5 using System.Data;
      6   6 using System.Data.Common;
      7   7 using System.Data.OleDb;
      8   8 using System.Linq;
      9   9 using System.Text;
     10  10 using System.Threading.Tasks;
     11  11 using Dapper;
     12  12 using System.Collections;
     13  13 using System.Reflection;
     14  14 using Knet.H5.Entity.Core;
     15  15 
     16  16 namespace Knet.H5.Toolkit.Data.Core
     17  17 {
     18  18     public class DapperDBase<T> where T : class,new()
     19  19     {
     20  20         public string TableName { get; set; }
     21  21         public string Primarykey { get; set; }
     22  22         public List<string> CoulmnsList { get; set; }
     23  23         public DapperDBase()
     24  24         {
     25  25             var tablenameAttribute = (TableAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(TableAttribute));
     26  26             Primarykey = tablenameAttribute.PrimaryKey;
     27  27             TableName = tablenameAttribute.TableName;
     28  28             CoulmnsList = GetEntityProperties(typeof(T));
     29  29         }
     30  30 
     31  31         /// 得到web.config里配置项的数据库连接字符串。
     32  32         private static readonly string connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ora9)));User Id=;Password=;";
     33  33 
     34  34         private static DbConnection _db;
     35  35 
     36  36         private static readonly object objLocker = new object();
     37  37 
     38  38         public static DbConnection DB
     39  39         {
     40  40             get
     41  41             {
     42  42                 if (_db == null)
     43  43                 {
     44  44                     lock (objLocker)
     45  45                     {
     46  46                         if (_db == null)
     47  47                         {
     48  48                             Database Db = new OracleDatabase(connectionString);
     49  49                             DbConnection connection = Db.CreateConnection();
     50  50                             return connection;
     51  51                         }
     52  52                     }
     53  53                 }
     54  54                 return _db;
     55  55             }
     56  56         }
     57  57 
     58  58         /// <summary>
     59  59         /// 根据ID获取model
     60  60         /// </summary>
     61  61         /// <param name="Id"></param>
     62  62         /// <returns></returns>
     63  63         public T GetModelById(object Id)
     64  64         {
     65  65             string executeSql = @" SELECT " + string.Join(",", CoulmnsList) + " FROM  " + this.TableName + " WHERE ID = :ID ";
     66  66             var conditon = new { ID = Id };
     67  67             return DB.Query<T>(executeSql, conditon).SingleOrDefault() ?? default(T);
     68  68         }
     69  69 
     70  70         /// <summary>
     71  71         /// 根据ID获取model
     72  72         /// </summary>
     73  73         /// <param name="Id"></param>
     74  74         /// <returns></returns>
     75  75         public T GetModelById(object Id, params string[] selectCoumlns)
     76  76         {
     77  77             var selectFields = string.Empty;
     78  78             if (selectCoumlns.Length > 0)
     79  79             {
     80  80                 selectFields = string.Join<string>(",", selectCoumlns);
     81  81             }
     82  82             else
     83  83             {
     84  84                 selectFields = string.Join(",", CoulmnsList);
     85  85             }
     86  86             string executeSql = @" SELECT " + selectFields + " FROM " + this.TableName + "  WHERE " + this.Primarykey + " = :ID ";
     87  87             var conditon = new { ID = Id };
     88  88             return DB.Query<T>(executeSql, conditon).SingleOrDefault() ?? default(T);
     89  89         }
     90  90 
     91  91         /// <summary>
     92  92         /// 根据ID获取model
     93  93         /// </summary>
     94  94         /// <param name="Id"></param>
     95  95         /// <returns></returns>
     96  96         public T GetModelByWhere(object whereObj)
     97  97         {
     98  98             var wherePro = whereObj.GetType().GetProperties();
     99  99             var whereList= new List<string>();
    100 100             foreach (var item in wherePro)
    101 101             {
    102 102                 if (item.GetValue(whereObj) == null) continue;
    103 103                 whereList.Add(string.Format("{0}=:{0}", item.Name));
    104 104             }
    105 105             string executeSql = @" SELECT " + string.Join(",", CoulmnsList) + " FROM " + this.TableName;
    106 106             if (whereList.Count > 0)
    107 107             {
    108 108                 executeSql += " WHERE " + string.Join(" AND ", whereList);
    109 109             }
    110 110             return DB.Query<T>(executeSql, whereObj).SingleOrDefault() ?? default(T);
    111 111         }
    112 112 
    113 113 
    114 114 
    115 115         /// <summary>
    116 116         /// 获取列表
    117 117         /// </summary>
    118 118         /// <param name="whereStr">只能使用且的关系,且属于该model内的字段</param>
    119 119         /// <param name="order">排序字段 create_date desc</param>
    120 120         /// <returns></returns>
    121 121         public List<T> GetList(object whereObj = null, string order = null)
    122 122         {
    123 123             var whereList = new List<string>();
    124 124             if (whereObj != null)
    125 125             {
    126 126                 var wherePro = whereObj.GetType().GetProperties();
    127 127                 foreach (var item in wherePro)
    128 128                 {
    129 129                     if (item.GetValue(whereObj) == null) continue;
    130 130                     whereList.Add(string.Format("{0}=:{0}", item.Name));
    131 131                 }
    132 132             }
    133 133             string executeSql = @" SELECT " + string.Join(",", CoulmnsList) + " FROM  " + this.TableName;
    134 134             if (whereList.Count > 0)
    135 135             {
    136 136                 executeSql += " WHERE " + string.Join(" and ", whereList);
    137 137             }
    138 138             if (!string.IsNullOrEmpty(order))
    139 139             {
    140 140                 executeSql += " ORDER BY " + order;
    141 141             }
    142 142             return DB.Query<T>(executeSql, whereObj).ToList();
    143 143         }
    144 144 
    145 145         /// <summary>
    146 146         /// 获取列表
    147 147         /// </summary>
    148 148         /// <param name="whereStr">只能使用且的关系,且属于该model内的字段</param>
    149 149         /// <param name="order">排序字段 create_date desc</param>
    150 150         /// <returns></returns>
    151 151         public List<T> GetList(string whereStr = null, string order = null)
    152 152         {
    153 153             string executeSql = @" SELECT " + string.Join(",", CoulmnsList) + " FROM  " + this.TableName;
    154 154             if (!string.IsNullOrEmpty(whereStr))
    155 155             {
    156 156                 executeSql += " where " + whereStr;
    157 157             }
    158 158             if (!string.IsNullOrEmpty(order))
    159 159             {
    160 160                 executeSql += "order by " + order;
    161 161             }
    162 162             return DB.Query<T>(executeSql, whereStr).ToList();
    163 163         }
    164 164 
    165 165 
    166 166         /// <summary>
    167 167         /// 获取全部字段
    168 168         /// </summary>
    169 169         /// <param name="order">排序</param>
    170 170         /// <returns></returns>
    171 171         public List<T> GetAllList(string order = null)
    172 172         {
    173 173             string executeSql = @" SELECT " + string.Join(",", CoulmnsList) + " FROM  " + this.TableName;
    174 174             if (!string.IsNullOrEmpty(order))
    175 175             {
    176 176                 executeSql += " ORDER BY " + order;
    177 177             }
    178 178             return DB.Query<T>(executeSql).ToList();
    179 179         }
    180 180 
    181 181         /// <summary>
    182 182         /// 插入
    183 183         /// </summary>
    184 184         /// <param name="model"></param>
    185 185         /// <returns></returns>
    186 186         public int Add(T model)
    187 187         {
    188 188             string executeSql = @" INSERT INTO " + this.TableName + " (" + string.Join(",", CoulmnsList) + " ) VALUES (" + string.Join(",:", CoulmnsList).Insert(0, ":") + ") ";
    189 189             return DB.Execute(executeSql, model);
    190 190         }
    191 191 
    192 192         /// <summary>
    193 193         /// 更新
    194 194         /// </summary>
    195 195         /// <param name="model"></param>
    196 196         /// <returns></returns>
    197 197         public bool Update(T model)
    198 198         {
    199 199             var wherePro = model.GetType().GetProperties();
    200 200             var whereSql = new List<string>();
    201 201             foreach (var item in wherePro)
    202 202             {
    203 203                 //if (item.GetValue(model) == null) continue;
    204 204                 whereSql.Add(string.Format("{0}=:{0}", item.Name));
    205 205             }
    206 206             string executeSql = @" UPDATE " + this.TableName + " SET  " + string.Join(",", whereSql) + " WHERE " + this.Primarykey + "=:" + Primarykey;
    207 207             return DB.Execute(executeSql, model) > 0;
    208 208         }
    209 209 
    210 210         /// <summary>
    211 211         /// 根据条件更新指定的字段
    212 212         /// </summary>
    213 213         /// <param name="updateCoumlns"></param>
    214 214         /// <param name="whereStr"></param>
    215 215         /// <returns></returns>
    216 216         public bool Update(object updateCoumlns, string whereStr)
    217 217         {
    218 218             var wherePro = updateCoumlns.GetType().GetProperties();
    219 219             var whereSql = new List<string>();
    220 220             foreach (var item in wherePro)
    221 221             {
    222 222                 if (item.GetValue(updateCoumlns) == null) continue;
    223 223                 whereSql.Add(string.Format("{0}=:{0}", item.Name));
    224 224             }
    225 225             string executeSql = @" UPDATE " + this.TableName + " SET  " + string.Join(",", whereSql);
    226 226             if (!string.IsNullOrEmpty(whereStr))
    227 227             {
    228 228                 executeSql += " WHERE " + whereStr;
    229 229             }
    230 230             return DB.Execute(executeSql, updateCoumlns) > 0;
    231 231         }
    232 232 
    233 233         //public bool Update(string[] fields,string value)
    234 234 
    235 235         /// <summary>
    236 236         /// 获取分页数据
    237 237         /// </summary>
    238 238         /// <param name="pageIndex"></param>
    239 239         /// <param name="pageSize"></param>
    240 240         /// <param name="selectFields">查询的字段</param>
    241 241         /// <param name="whereObj"></param>
    242 242         /// <param name="order"></param>
    243 243         /// <returns></returns>
    244 244         public PagedList<T> GetPagerList(int pageIndex, int pageSize, string[] selectFields = null, object whereObj = null, string order = null)
    245 245         {
    246 246             var whereList = new List<string>();
    247 247             if (whereObj != null)
    248 248             {
    249 249                 var wherePro = whereObj.GetType().GetProperties();
    250 250                 foreach (var item in wherePro)
    251 251                 {
    252 252                     if (item.GetValue(whereObj) == null) continue;
    253 253                     whereList.Add(string.Format("{0}=:{0}", item.Name));
    254 254                 }
    255 255             }
    256 256             string orderSql = string.Empty, whereSql = string.Empty, fields = " row_.*";
    257 257             if (!string.IsNullOrEmpty(order))
    258 258             {
    259 259                 orderSql = " ORDER BY " + order;
    260 260             }
    261 261             if (whereList.Count > 0)
    262 262             {
    263 263                 whereSql = " WHERE " + string.Join(" and ", whereList);
    264 264             }
    265 265             if (selectFields != null && selectFields.Length > 0)
    266 266             {
    267 267                 fields = string.Join(",", selectFields);
    268 268             }
    269 269             string executeSql = @" SELECT COUNT(0) FROM  " + this.TableName + whereSql;
    270 270             int totalCount = DB.Query<int>(executeSql, whereObj).SingleOrDefault();
    271 271             string pagerSql = "SELECT * FROM ( SELECT " + fields + ", rownum rownum_ from ( SELECT * FROM " + this.TableName + whereSql + orderSql + ") row_ where rownum <= " + pageIndex * pageSize + ") where rownum_ >" + (pageIndex - 1) * pageSize + "";
    272 272             var source = DB.Query<T>(pagerSql, whereObj).ToList();
    273 273             return new PagedList<T>(source, pageIndex, pageSize, totalCount);
    274 274         }
    275 275 
    276 276         /// <summary>
    277 277         /// 删除数据
    278 278         /// </summary>
    279 279         /// <param name="id"></param>
    280 280         /// <returns></returns>
    281 281         public bool Delete(object id)
    282 282         {
    283 283             string executeSql = @" DELETE FROM " + this.TableName + " WHERE " + this.Primarykey + " = :ID";
    284 284             var conditon = new { ID = id };
    285 285             return DB.Execute(executeSql, conditon) > 0;
    286 286         }
    287 287 
    288 288 
    289 289         #region 直接执行sql
    290 290 
    291 291         /// <summary>
    292 292         /// 执行sql语句,参数都以带入的形式
    293 293         /// </summary>
    294 294         /// <param name="executeSql"></param>
    295 295         /// <param name="value"></param>
    296 296         /// <returns></returns>
    297 297         public bool Update(string executeSql, object value)
    298 298         {
    299 299             return DB.Execute(executeSql, value) > 0;
    300 300         }
    301 301 
    302 302         /// <summary>
    303 303         /// 执行sql语句,参数都以带入的形式
    304 304         /// </summary>
    305 305         /// <param name="executeSql"></param>
    306 306         /// <param name="value"></param>
    307 307         /// <returns></returns>
    308 308         public int Add(string executeSql, object value)
    309 309         {
    310 310             return DB.Execute(executeSql, value);
    311 311         }
    312 312 
    313 313         /// <summary>
    314 314         /// 执行SQL获取table
    315 315         /// </summary>
    316 316         /// <param name="executeSql"></param>
    317 317         /// <returns></returns>
    318 318         public DataTable GetTable(string executeSql)
    319 319         {
    320 320             return DB.Query<DataTable>(executeSql).SingleOrDefault();
    321 321         }
    322 322 
    323 323         /// <summary>
    324 324         /// 执行SQL获取LIST
    325 325         /// </summary>
    326 326         /// <param name="executeSql"></param>
    327 327         /// <returns></returns>
    328 328         public List<T> GetList(string executeSql)
    329 329         {
    330 330             return DB.Query<T>(executeSql).ToList();
    331 331         }
    332 332         #endregion
    333 333 
    334 334         /// <summary>
    335 335         /// 对datatable进行分页
    336 336         /// </summary>
    337 337         /// <param name="dt"></param>
    338 338         /// <param name="PageIndex"></param>
    339 339         /// <param name="PageSize"></param>
    340 340         /// <returns></returns>
    341 341         public DataTable SplitDataTable(DataTable dt, int PageIndex, int PageSize)
    342 342         {
    343 343             if (PageIndex == 0)
    344 344                 return dt;
    345 345             DataTable newdt = dt.Clone();
    346 346             //newdt.Clear();
    347 347             int rowbegin = (PageIndex - 1) * PageSize;
    348 348             int rowend = PageIndex * PageSize;
    349 349 
    350 350             if (rowbegin >= dt.Rows.Count)
    351 351                 return newdt;
    352 352 
    353 353             if (rowend > dt.Rows.Count)
    354 354                 rowend = dt.Rows.Count;
    355 355             for (int i = rowbegin; i <= rowend - 1; i++)
    356 356             {
    357 357                 DataRow newdr = newdt.NewRow();
    358 358                 DataRow dr = dt.Rows[i];
    359 359                 foreach (DataColumn column in dt.Columns)
    360 360                 {
    361 361                     newdr[column.ColumnName] = dr[column.ColumnName];
    362 362                 }
    363 363                 newdt.Rows.Add(newdr);
    364 364             }
    365 365 
    366 366             return newdt;
    367 367         }
    368 368 
    369 369 
    370 370         /// <summary>
    371 371         /// 获取实体所有属性名称
    372 372         /// </summary>
    373 373         /// <param name="entity"></param>
    374 374         /// <returns></returns>
    375 375         private List<string> GetEntityProperties(Type type)
    376 376         {
    377 377             var list = new List<string>();
    378 378             PropertyInfo[] properties = type.GetProperties();
    379 379             foreach (var pro in properties)
    380 380             {
    381 381                 var fieldsAttribute = new FieldsAttribute();
    382 382                 var attrmodel = pro.GetCustomAttributes<FieldsAttribute>(true).FirstOrDefault();
    383 383                 if (attrmodel != null )
    384 384                 {//controller上有标记
    385 385                     fieldsAttribute = attrmodel as FieldsAttribute;
    386 386                 }
    387 387                 if (!fieldsAttribute.IsSourceFields) continue;
    388 388                // if ()
    389 389                 list.Add(pro.Name);
    390 390             }
    391 391             return list;
    392 392         }
    393 393     }
    394 394 }
    395  
    View Code
  • 相关阅读:
    Java模拟ATM运行过程(第一版)
    双色Hanoi塔问题及判断指令
    一点编程风格
    游戏程序员养成计划
    OGRE编译
    Python学习收藏
    case 语句注意
    [c、c++]宏中"#"和"##"的用法(zz)
    网络代码平台tortoise svn+google code
    使用delegate进行解耦
  • 原文地址:https://www.cnblogs.com/doNetTom/p/4776312.html
Copyright © 2020-2023  润新知