自己写的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 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         /// 
 59  59         /// 根据ID获取model
 60  60         /// 
 61  61         /// 
 62  62         /// 
 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(executeSql, conditon).SingleOrDefault() ?? default(T);
 68  68         }
 69  69 
 70  70         /// 
 71  71         /// 根据ID获取model
 72  72         /// 
 73  73         /// 
 74  74         /// 
 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(executeSql, conditon).SingleOrDefault() ?? default(T);
 89  89         }
 90  90 
 91  91         /// 
 92  92         /// 根据ID获取model
 93  93         /// 
 94  94         /// 
 95  95         /// 
 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(executeSql, whereObj).SingleOrDefault() ?? default(T);
111 111         }
112 112 
113 113 
114 114 
115 115         /// 
116 116         /// 获取列表
117 117         /// 
118 118         /// 只能使用且的关系,且属于该model内的字段
119 119         /// 排序字段 create_date desc
120 120         /// 
121 121         public List 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(executeSql, whereObj).ToList();
143 143         }
144 144 
145 145         /// 
146 146         /// 获取列表
147 147         /// 
148 148         /// 只能使用且的关系,且属于该model内的字段
149 149         /// 排序字段 create_date desc
150 150         /// 
151 151         public List 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(executeSql, whereStr).ToList();
163 163         }
164 164 
165 165 
166 166         /// 
167 167         /// 获取全部字段
168 168         /// 
169 169         /// 排序
170 170         /// 
171 171         public List 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(executeSql).ToList();
179 179         }
180 180 
181 181         /// 
182 182         /// 插入
183 183         /// 
184 184         /// 
185 185         /// 
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         /// 
193 193         /// 更新
194 194         /// 
195 195         /// 
196 196         /// 
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         /// 
211 211         /// 根据条件更新指定的字段
212 212         /// 
213 213         /// 
214 214         /// 
215 215         /// 
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         /// 
236 236         /// 获取分页数据
237 237         /// 
238 238         /// 
239 239         /// 
240 240         /// 查询的字段
241 241         /// 
242 242         /// 
243 243         /// 
244 244         public PagedList 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(pagerSql, whereObj).ToList();
273 273             return new PagedList(source, pageIndex, pageSize, totalCount);
274 274         }
275 275 
276 276         /// 
277 277         /// 删除数据
278 278         /// 
279 279         /// 
280 280         /// 
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         /// 
292 292         /// 执行sql语句,参数都以带入的形式
293 293         /// 
294 294         /// 
295 295         /// 
296 296         /// 
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         /// 
303 303         /// 执行sql语句,参数都以带入的形式
304 304         /// 
305 305         /// 
306 306         /// 
307 307         /// 
308 308         public int Add(string executeSql, object value)
309 309         {
310 310             return DB.Execute(executeSql, value);
311 311         }
312 312 
313 313         /// 
314 314         /// 执行SQL获取table
315 315         /// 
316 316         /// 
317 317         /// 
318 318         public DataTable GetTable(string executeSql)
319 319         {
320 320             return DB.Query(executeSql).SingleOrDefault();
321 321         }
322 322 
323 323         /// 
324 324         /// 执行SQL获取LIST
325 325         /// 
326 326         /// 
327 327         /// 
328 328         public List GetList(string executeSql)
329 329         {
330 330             return DB.Query(executeSql).ToList();
331 331         }
332 332         #endregion
333 333 
334 334         /// 
335 335         /// 对datatable进行分页
336 336         /// 
337 337         /// 
338 338         /// 
339 339         /// 
340 340         /// 
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         /// 
371 371         /// 获取实体所有属性名称
372 372         /// 
373 373         /// 
374 374         /// 
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(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

 

你可能感兴趣的:(自己写的Dapper通用数据访问层)