一、数据库提供者接口

   /// <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. bzoj1532

    就题目而言,这道题是裸的二分+最大流 但是这样是TLE的,我们考虑优化 1. 我们可以先贪心,这样二分的上界就可以缩小了 2. 最大流我们可以不急着跑增广路,我们可以先贪心一个流然后再跑增广路 但是我 ...

  2. poj3671

    首先容易想到的是LIS,但是n<=30000,所以肯定要优化: 壮哉单调队列又登场了: 然后再找一个最长不上升序列并求两者最大值即可,复杂度O(n logn); 应该说这是解题通法了,但再回头看 ...

  3. uva1658 admiral

    费用流. 裸的拆点最小费用流,一跑就行. 核弹预警,为何wa20多发.build函数一定要返回true...... 太可怕了 #include<cstdio> #include<al ...

  4. sencha touch2 动画问题

    最近在review一个项目的代码, 发现返回操作比较乱,很多"从哪里来,到哪里去的操作"被写的一塌糊涂; 按照ios系统的进场出场动画(人家的体验还是很好的,必须借鉴)为标准,使用 ...

  5. acdream 瑶瑶带你玩激光坦克 (模拟)

    瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) Submi ...

  6. Spring Autowire自动装配介绍

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  7. 【转】Parallels Desktop 11.2.0 破解版 最佳Mac虚拟机软件

    原文网址:http://www.macappstore.net/parallels-desktop-11-pojie-ban/ Parallels Desktop 11.2.0 破解版 最佳Mac虚拟 ...

  8. NopCommerce架构分析之三---数据库初试化及数据操作

    系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvide ...

  9. JQuery: 微博演示

    演示图: 完成图: 微博演示代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...

  10. redis-3.0.0集群的安装及使用

    redis集群需要至少6个节点(偶数节点),3个主节点,3个从节点.注意:集群模式最好不要keys *查询数据. 1 下载redis,官网下载3.0.0版本,之前2.几的版本不支持集群模式.下载地址: ...