一、数据库提供者接口

   /// <summary>
/// 数据库提供者
/// </summary>
public interface IDbProvider : IDisposable
{
/// <summary>
/// 初始化数据库连接信息
/// </summary>
/// <param name="dbConnInfo"></param>
/// <returns></returns>
IDbProvider Init(DbConnInfo dbConnInfo); /// <summary>
/// 获取Lambda语法的数据操作对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
IReqository<T> GetReqository<T>() where T : class, new(); ///<summary>
/// 获取Linq语法的数据查询对象
///</summary>
///<typeparam name="T"></typeparam>
///<returns></returns>
IQuery<T> GetQuery<T>() where T : class, new(); ///<summary>
/// 扩展操作
///</summary>
///<returns></returns>
IDbExtension GetDbExtension(); /// <summary>
/// 事务开启
/// </summary>
void Begin(); /// <summary>
/// 事务提交
/// </summary>
void Commit(); /// <summary>
/// 事务回滚
/// </summary>
void Rollback(); } ///<summary>
/// 扩展数据库提供者
///</summary>
internal interface IDbProviderExtend : IDbProvider
{
IDbExecutor DbExecutor { get; }
}

二、单表操作

    /// <summary>
/// 标准的数据层接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IReqository<T> where T : class
{
/// <summary>
/// 新增实体对象
/// </summary>
/// <param name="entity">实体对象</param>
void Insert(T entity); /// <summary>
/// 批量新增实体对象
/// </summary>
/// <param name="entitys"></param>
void Insert(IList<T> entitys); /// <summary>
/// 根据条件表达式自动删除对应数据
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
int Delete(Expression<Func<T, bool>> where); /// <summary>
/// 根据条件表达式将映射对象的数据进行局部更新
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="update"></param>
/// <param name="where"></param>
/// <returns></returns>
int Update<TResult>(Expression<Func<T, TResult>> update, Expression<Func<T, bool>> where) where TResult : class; /// <summary>
/// 根据条件表达式获得[Top 1]实体对象
/// </summary>
/// <param name="where"></param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
T Single(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获得实体对象列表
/// </summary>
/// <param name="where">条件表达式</param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
IList<T> Select(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获得指定记录的条数
/// </summary>
/// <param name="where"></param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
int Count(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获取某列的和
/// </summary>
/// <param name="select"></param>
/// <param name="where"></param>
/// <param name="noLock"></param>
/// <returns></returns>
object Sum<TResult>(Expression<Func<T, TResult>> select, Expression<Func<T, bool>> where, bool noLock = false); }

三、多表操作

    ///<summary>
/// 多表查询对象接口
///</summary>
///<typeparam name="T">数据实体</typeparam>
public interface IQuery<out T> : IOrderedQueryable<T>
{
} ///<summary>
/// IQuery的扩展方法
///</summary>
public static class Query
{
///<summary>
/// 分页功能
///</summary>
///<param name="source"></param>
///<param name="rowCount">每页的行数</param>
///<param name="pageNumber">第几页</param>
///<typeparam name="TSource"></typeparam>
///<returns></returns>
public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int rowCount, int pageNumber)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
return source.Provider.CreateQuery<TSource>(Expression.Call(null,
((MethodInfo) MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[]
{
typeof (TSource)
}),
new Expression[]
{
source.Expression,
Expression.Constant(rowCount),
Expression.Constant(pageNumber)
}));
} ///<summary>
/// 扩展join功能
///</summary>
///<param name="source"></param>
///<param name="joins"></param>
///<typeparam name="TSource"></typeparam>
///<returns></returns>
public static IQueryable<TSource> SetJoinMode<TSource>(this IQueryable<TSource> source, params JoinMode[] joins)
{
if (source == null)
{
throw new ArgumentNullException("source");
} return source.Provider.CreateQuery<TSource>(Expression.Call(null,
((MethodInfo) MethodBase.GetCurrentMethod()).
MakeGenericMethod(new Type[] {typeof (TSource)}),
new Expression[]
{
source.Expression,
Expression.Constant(joins)
}));
}
} ///<summary>
///</summary>
public enum JoinMode
{
///<summary>
/// 内连接
///</summary>
Inner, ///<summary>
/// 左连接
///</summary>
Left, ///<summary>
/// 右连接
///</summary>
Right, ///<summary>
/// 全连接
///</summary>
Full
}

四、扩展操作

/// <summary>
/// 扩展操作
/// </summary>
public interface IDbExtension
{
/// <summary>
/// 执行存储过程返回影响行数
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
int ExcuteProcNonQuery(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行存储过程返回DataSet
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
DataSet ExcuteProcQuery(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行存储过程返回泛型集合
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
IList<TResult> ExcuteProcReader<TResult>(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回影响行数
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
int ExcuteNonQuery(string sql, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
DataSet ExcuteQuery(string sql, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回泛型集合
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
IList<TResult> ExcuteQuery<TResult>(string sql, DbParameterCollection parameters = null);
}

ORM之二:核心接口与扩展操作的更多相关文章

  1. Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置

    Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...

  2. Hibernate(三)__核心接口和类

    该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...

  3. Hibernate详解(5)——Hibernate核心接口和工作原理

    Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...

  4. Spring Boot REST(一)核心接口

    Spring Boot REST(一)核心接口 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...

  5. Hibernate 之核心接口

    1.持久化和ORM 持久化是指把数据(内存中的对象)保存到可持久保存的存储设备中(如硬盘),主要应用于将内存中的数据存储到关系型数据库中,在三层结构中,持久层专注于实现系统的逻辑层面,将数据使用者与数 ...

  6. 深入解析Hibernate核心接口

    Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate核心接口,包括介绍SessionFactory接口.Query和Criteria接口等方面. Session 接口对于Hibe ...

  7. Hibernate核心接口和工作原理

    Hibernate核心接口和工作原理 Hibernate有五大核心接口,分别是:Session .Transaction .Query .SessionFactory .Configuration . ...

  8. spring源码系列(二):IOC接口设计分析

    这里主要对springIOC接口体系进行简单的概述和分析,具体每个接口详细分析在下面目录: 参考内容: <Spring技术内幕:深入解析 Spring架构与设计原理> 和 <Spri ...

  9. 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)

    Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...

随机推荐

  1. DataView.RowFilter筛选DataTable中的数据

    //定义一个DataView ,得到一个全部职员的视图DataView dataView1 = DbHelperSQL.QueryDataView(sql); //过滤得到一个只显示男职员的视图 da ...

  2. quartz Cron表达式一分钟教程

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTr ...

  3. 设计模式_Proxy_代理模式

    形象例子: 跟MM在网上聊天,一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了自动的回答,接收到其他的 ...

  4. hive 配置mysql元数据库

    在 hive的配置文件hive-site.xml中 <?xml version="1.0"?> <!-- Licensed to the Apache Softw ...

  5. Linux Oracle碰到错误:ORA-27101: shared memory realm does not exist

    从ITPUB上摘抄并已验证 1.实例没有启动 sqlplus /nologconnect / as sysdbastartup

  6. 【译】 AWK教程指南 4通过文本内容和对比选择指定的记录

    Pattern { Action }为awk中最主要的语法.若某Pattern的值为真则执行它后面的 Action. awk中常使用"关系表达式" (Relational Expr ...

  7. NOIP2011 Mayan游戏

    3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...

  8. NOIP2012 Vigenère 密码

    1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...

  9. 恒天云IaaS基础设施标准

    系统总体要求: 支持多种操作系统:支持Windows,Redhat.Suse等Linux操作系统: 支持多种虚拟化系统:支持多种计算资源虚拟化方式: 网络接口:支持千兆及万兆以太网技术: 供电:支持直 ...

  10. dataStructure@ Check if a directed graph has cycles

    #include<iostream> #include<cstdio> #include<cstring> #include<limits> #incl ...