• SqlHelper简单实现(通过Expression和反射)6.Providor模式(工厂+策略)可配置数据库选择


    基本思想,将MsSqlDbUtility和MySqlDbUtility设计成单例模式,通过App.config或Web.config进行默认的数据库设置,然后通过DbUtilityFactory获取DbUtility。

    1.接口:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Data;
      4 using System.Linq.Expressions;
      5 using RA.DataAccess.MsSqlDbUtility;
      6 
      7 namespace RA.DataAccess
      8 {
      9     public interface IDbUtility
     10     {
     11         /// <summary>
     12         /// 获取Sql描述对象
     13         /// </summary>
     14         /// <typeparam name="T"></typeparam>
     15         /// <returns></returns>
     16         SqlSession<T> GetSqlExpression<T>() where T : class;
     17         /// <summary>
     18         /// 获取多条数据
     19         /// </summary>
     20         /// <typeparam name="T"></typeparam>
     21         /// <param name="exp"></param>
     22         /// <returns></returns>
     23         List<T> GetList<T>(SqlSession<T> exp) where T : class;
     24         /// <summary>
     25         /// 获取多条数据,并填入DTO中
     26         /// </summary>
     27         /// <typeparam name="Target"></typeparam>
     28         /// <typeparam name="T"></typeparam>
     29         /// <param name="exp"></param>
     30         /// <returns></returns>
     31         List<Target> GetList<Target, T>(SqlSession<T> exp) where T : class where Target : class;
     32         /// <summary>
     33         /// 分页
     34         /// </summary>
     35         /// <typeparam name="T"></typeparam>
     36         /// <param name="By">OrderBy表达式</param>
     37         /// <param name="pageIndex"></param>
     38         /// <param name="pageSize"></param>
     39         /// <returns></returns>
     40         List<T> Paged<T>(Expression<Func<T, object>> By, int pageIndex, int pageSize = 1) where T : class;
     41         /// <summary>
     42         /// 获取单条数据
     43         /// </summary>
     44         /// <typeparam name="T"></typeparam>
     45         /// <param name="func">linq表达式,代表条件</param>
     46         /// <returns></returns>
     47         T GetSingle<T>(Expression<Func<T, bool>> func) where T : class;
     48         /// <summary>
     49         /// 删除一条数据
     50         /// </summary>
     51         /// <typeparam name="T"></typeparam>
     52         /// <param name="func">linq表达式,代表条件</param>
     53         /// <returns></returns>
     54         int Delete<T>(Expression<Func<T, bool>> func) where T : class;
     55         /// <summary>
     56         /// 添加一条数据
     57         /// </summary>
     58         /// <typeparam name="T"></typeparam>
     59         /// <param name="obj"></param>
     60         /// <returns></returns>
     61         int Add<T>(T obj) where T : class;
     62         /// <summary>
     63         /// 直接执行Sql
     64         /// </summary>
     65         /// <typeparam name="T"></typeparam>
     66         /// <param name="sql"></param>
     67         /// <returns></returns>
     68         int RunSingleSql<T>(string sql) where T : class;
     69         /// <summary>
     70         /// 通过Sql获取DataTable,业务层不使用
     71         /// </summary>
     72         /// <typeparam name="T"></typeparam>
     73         /// <param name="sql"></param>
     74         /// <returns></returns>
     75         DataTable GetDataBySql<T>(string sql) where T : class;
     76         /// <summary>
     77         /// 更新一条数据
     78         /// </summary>
     79         /// <typeparam name="T">数据表实体</typeparam>
     80         /// <param name="obj">实体对象</param>
     81         /// <param name="func">linq表达式,代表条件</param>
     82         /// <returns></returns>
     83         int Update<T>(T obj, Expression<Func<T, bool>> func) where T : class;
     84         /// <summary>
     85         /// 添加多条数据
     86         /// </summary>
     87         /// <typeparam name="T"></typeparam>
     88         /// <param name="objs">实体对象列表</param>
     89         /// <returns></returns>
     90         int AddList<T>(List<T> objs) where T : class;
     91         /// <summary>
     92         /// 计数
     93         /// </summary>
     94         /// <typeparam name="T"></typeparam>
     95         /// <param name="func">linq表达式,代表条件</param>
     96         /// <returns></returns>
     97         int Count<T>(Expression<Func<T, bool>> func = null) where T : class;
     98         /// <summary>
     99         /// 获取一个字段数据
    100         /// </summary>
    101         /// <typeparam name="T"></typeparam>
    102         /// <typeparam name="Target"></typeparam>
    103         /// <param name="field">linq表达式,代表字段</param>
    104         /// <param name="func">linq表达式,代表条件</param>
    105         /// <returns></returns>
    106         Target Scala<T, Target>(Expression<Func<T, Target>> field, Expression<Func<T, bool>> func);
    107     }
    108 }

    2.工厂类:

     1 using System;
     2 using System.Configuration;
     3 
     4 namespace RA.DataAccess
     5 {
     6     public class DbUtilityFactory
     7     {
     8         public static IDbUtility GetDbUtility()
     9         {
    10             var getDbType = ConfigurationManager.AppSettings["DbType"];
    11             if (getDbType == "MySql")
    12             {
    13                 return MySqlDbUtility.DbUtility.GetInstance();
    14             }
    15             else if (getDbType == "MsSql")
    16             {
    17                 return MsSqlDbUtility.DbUtility.GetInstance();
    18             }
    19             else
    20             {
    21                 throw new NotSupportedException("不支持的数据库");
    22             }
    23         }
    24     }
    25 
    26 
    27 }
  • 相关阅读:
    PCA 主成分分析实践 plink软件
    c语言中基本数据类型
    c语言中利用itoa函数将整数值以二进制、八进制、十六进制显示
    c语言中以10进制、8进制、16进制显示同一个数字
    c语言中实现文件的复制(文本复制和二进制复制)
    c语言 13-13
    c语言显示文件自身
    LYDSY模拟赛day2 Dash Speed
    LYDSY模拟赛day2 Market
    LYDSY模拟赛day2 Divisors
  • 原文地址:https://www.cnblogs.com/kakura/p/6108987.html
Copyright © 2020-2023  润新知