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

1.接口:

 using System;
using System.Collections.Generic;
using System.Data;
using System.Linq.Expressions;
using RA.DataAccess.MsSqlDbUtility; namespace RA.DataAccess
{
public interface IDbUtility
{
/// <summary>
/// 获取Sql描述对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
SqlSession<T> GetSqlExpression<T>() where T : class;
/// <summary>
/// 获取多条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="exp"></param>
/// <returns></returns>
List<T> GetList<T>(SqlSession<T> exp) where T : class;
/// <summary>
/// 获取多条数据,并填入DTO中
/// </summary>
/// <typeparam name="Target"></typeparam>
/// <typeparam name="T"></typeparam>
/// <param name="exp"></param>
/// <returns></returns>
List<Target> GetList<Target, T>(SqlSession<T> exp) where T : class where Target : class;
/// <summary>
/// 分页
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="By">OrderBy表达式</param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
List<T> Paged<T>(Expression<Func<T, object>> By, int pageIndex, int pageSize = ) where T : class;
/// <summary>
/// 获取单条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func">linq表达式,代表条件</param>
/// <returns></returns>
T GetSingle<T>(Expression<Func<T, bool>> func) where T : class;
/// <summary>
/// 删除一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func">linq表达式,代表条件</param>
/// <returns></returns>
int Delete<T>(Expression<Func<T, bool>> func) where T : class;
/// <summary>
/// 添加一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
int Add<T>(T obj) where T : class;
/// <summary>
/// 直接执行Sql
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <returns></returns>
int RunSingleSql<T>(string sql) where T : class;
/// <summary>
/// 通过Sql获取DataTable,业务层不使用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <returns></returns>
DataTable GetDataBySql<T>(string sql) where T : class;
/// <summary>
/// 更新一条数据
/// </summary>
/// <typeparam name="T">数据表实体</typeparam>
/// <param name="obj">实体对象</param>
/// <param name="func">linq表达式,代表条件</param>
/// <returns></returns>
int Update<T>(T obj, Expression<Func<T, bool>> func) where T : class;
/// <summary>
/// 添加多条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objs">实体对象列表</param>
/// <returns></returns>
int AddList<T>(List<T> objs) where T : class;
/// <summary>
/// 计数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func">linq表达式,代表条件</param>
/// <returns></returns>
int Count<T>(Expression<Func<T, bool>> func = null) where T : class;
/// <summary>
/// 获取一个字段数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="Target"></typeparam>
/// <param name="field">linq表达式,代表字段</param>
/// <param name="func">linq表达式,代表条件</param>
/// <returns></returns>
Target Scala<T, Target>(Expression<Func<T, Target>> field, Expression<Func<T, bool>> func);
}
}

2.工厂类:

 using System;
using System.Configuration; namespace RA.DataAccess
{
public class DbUtilityFactory
{
public static IDbUtility GetDbUtility()
{
var getDbType = ConfigurationManager.AppSettings["DbType"];
if (getDbType == "MySql")
{
return MySqlDbUtility.DbUtility.GetInstance();
}
else if (getDbType == "MsSql")
{
return MsSqlDbUtility.DbUtility.GetInstance();
}
else
{
throw new NotSupportedException("不支持的数据库");
}
}
} }

最新文章

  1. 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇
  2. DUT Star Round2
  3. netstat miscellaneousness
  4. 如何查看设备的 UDID
  5. AndroidDev站点推荐-zz
  6. Python之路【第五篇】:面向对象及相关
  7. jQuery下拉友情链接美化效果代码分享
  8. [swustoj 373] Antiprime数
  9. 解决mybatis使用枚举的转换
  10. GROUP BY 的实现与优化
  11. ShareDialogDemo【分享对话框】
  12. CentOS7.6搭建redis4.0.1 cluster集群
  13. spring框架校验自定义注解
  14. 步步為營-95-MyMVC 1.0
  15. CMD 命令1
  16. .Net进阶系列(12)-异步多线程(Thread和ThreadPool)(被替换)
  17. 设置Eclipse具有字母自动联想
  18. 清除div重叠浮动的方法
  19. (转)python中的selectors模块
  20. Linux下useradd命令创建的用户不能登录的问题

热门文章

  1. pythonanywhere笔记
  2. Ubuntu 16.04 LTS nodejs+pm2+nginx+git 基础安装及配置环境(未完,未整理)
  3. iOS开发之 -- 判断是否第一次登陆APP
  4. swift - storyboard(故事版)的使用
  5. HDU2842—Chinese Rings
  6. the ONLY_FULL_GROUP_BY SQL mode is enabled (which it is by default) 用户变量
  7. linux, sysrq,acpi,apci,uio,subsystem daemon
  8. linux 修改用户密码
  9. linux内核获取当前进程路径分析
  10. doxygen的简单使用(快速上手)