ORM之二:核心接口与扩展操作

一、数据库提供者接口

   /// <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);
    }
时间: 2024-10-10 17:32:52

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

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

Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的注解支持. @WebServlet @WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet.该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns 通常是必

Hibernate 之核心接口

1.持久化和ORM 持久化是指把数据(内存中的对象)保存到可持久保存的存储设备中(如硬盘),主要应用于将内存中的数据存储到关系型数据库中,在三层结构中,持久层专注于实现系统的逻辑层面,将数据使用者与数据实体进行关联. ORM简称对象-关系型数据映射,在编写程序时,处理数据采用面向对象的方式,保存数据却以关系型数据库的方式,因此需要一种能在两者之间进行转换的机制.这种机制称为ORM.ORM保存了对象和关系型数据库表的映射信息.Hibernate映射信息保存在XML格式的配置文件中. 2 Hiber

精通Hibernate——Hibernate核心接口

应用程序可以通过Hibernate的API访问数据库,Hibernate API中的接口可分为以下几类: 提供访问数据库的操作(保存.更新.删除.查询)接口,这些接口包括Session.Transaction.Query接口 用于配置Hibernate的接口:Configuration 回调接口,使应用程序接受Hibernate内部发生的事件,并做出相关回应,这些接口包括:Interceptor.LifeCircle.Validatable接口 用于扩展Hibernate功能的接口 Hibern

hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。

hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate.Hibernate应用通过Configuration实例来获取对象-关系映射文件中的元数据,以及动态配置Hibernate的属性,然后创建SessionFactory实例. 2,SessionFactory接口 一个SessionFactory实例对应一个数据存储源,应用从SessionFactor

Hibernate核心接口

所有的hibernate应用都会访问5个核心接口: configuration接口:配置Hibernate,根启动Hibernate,创建sessionfactory; sessionFactory接口:初始化Hibernate,充当存储数据源的代理,创建session对象; session接口:负责保存,修改,删除,查询,加载对象; transaction接口:管理事务. Query和criteria接口:执行数据库查询. Hibernate核心接口,布布扣,bubuko.com

【Hibernate学习】 ——ORM(二)

上篇博客主要介绍了一对一的关系,主要理解单向与双向的区别,主键关联与唯一外键关联的区别.下面继续介绍一对多与多对多关联. 一对多关联映射 一个班级对应多个学生 单向一对多关系 关系表: classes代码 <classname="com.bjpowernode.hibernat.Classes"table="t_classes"> <idname="id"> <generatorclass="native&

JavaWeb技术(三):JDBC中核心接口

一.  DriverManager 接口 DriverManager 数据库连接驱动接口,用于获取数据库连接对象Connection 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.SQLException; 4 5 public class DriverManagerDemo { 6 7 public static void main(String[] args) { 8 // 数

hibernate学习系列-----(2)hibernate核心接口和工作机制

在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: Configuration类 SessionFactory接口 Session接口 Transaction接口 Query和Criteria接口 下面就进行分类别地详细说明: Configuration类 功能描述:Configuration类负责管理Hibernate的配置信息作并根据配置信息启动H

Quartz使用(2) - Quartz核心接口Scheduler、Job

quartz的核心接口如下: 接口 含义 Scheduler scheduler的主要API接口 Job 任务实现接口,期望调度器能够执行 JobDetail 用于定义Job实例 Trigger 调度器基于特定时间来执行指定任务的组件 JobBuilder 用于定义.创建JobDetail实例 TriggerBuilder 用于定义.创建Trigger实例 1. Scheduler 一个调度器的生命周期为通过SchedulerFactory创建,直到执行其shutdown()方法.当Schedu