做自己的ORMapping Framework ---- 第六讲 开始ORMapping之旅,ORMapping怎么说

这几天公司有点事情,没怎么来这边,现在来这边介绍下ORMapping实现一些什么东西

说到ORMapping,当然少不了的就是对数据库的增删查改,这边的类图我简单弄了下

下面的代码都是我在框架中的源码,这个编辑器很差,贴上来会有点难看,接口里的方法属性都是我平时开发中都会经常用到的,做什么的基本看名称就知道,这里还得说下,代码规范真的很重要,小朋友们写代码时候多注意点。

  

public interface IEntityAccesser
{
  bool Exist<T>(T obj); 存在监测
  void Insert<T>(T obj);增
  void Update<T>(T obj);改
  void Delete<T>(T obj);删
  bool Load<T>(T obj) where T : IEntity; 从数据库加载数据
  List<T> Search<T>(string condition = "", string order = "") where T : IEntity, new(); 查
  List<TEntity> Search<TOwner, TEntity>(TOwner owner, Expression<Func<TOwner, IEnumerable>> exp, string order = "") where TEntity : IEntity, new();查
  int ExecuteCommand(string cmdText);执行sql command

  void ExecuteStoreProcedure(string procedureName, IEnumerable<SPParameter> args); 执行存储过程
  object ExecuteStoreProcedureScalar(string procName, IEnumerable<SPParameter> args);执行存储过程 并获取返回值
}

public interface IORMapper : IEntityAccesser
{
  string And { get; }
  string Comma { get; }
  string ConditionSql { get; }
  string CountSql { get; }
  string DeleteSql { get; }
  string Dot { get; }
  string Equal { get; }
  string FindAttributeSql { get; }
  string FindSql { get; }
  string InsertSql { get; }
  string Join { get; }
  string KeySqlValueParameter { get; }
  string KeySqlValueParameterName { get; }
  string On { get; }
  string OrderSql { get; }
  string SemiColon { get; }
  string SetSql { get; }
  string UpdateSql { get; }
  string UpdateSqlValueParameter { get; }
  string UpdateSqlValueParameterName { get; }
  string WhereSql { get; }
  string LeftSquare { get; }
  string RightSquare { get; }
  string StoreProcedureExistSql { get; }
  string CreateDatabaseSql { get; }
  string DropDatabaseSql { get; }
  string CommandSpitterRegexString { get; }
  string DatabaseExistSql { get; }
  string MasterDatabaseName { get; }

  IDbConnection NewConnection();

  IDbConnection GetDatabaseConnection(string databaseName);

  void CreateDatabase(string databaseName);
  void ExecuteSqlResourceFile(Type typeInResourceAssembly, string fileQualifiedName, IDbConnection connection, bool splitCommands);
  void DropDatabase(string databaseName);
  bool DatabaseExist(string databaseName);
  bool StoreProcedureExist(string databaseName, string storeProceudreName);
  string GetDatabaseName();
  string GetDatabaseHost();
  bool IsSystemDatabase(string databaseName);
  void WaitUntilConnectionBeUsed(IDbConnection connection, int retryTimes = 20, int retryInterval = 500);

  bool ExecuteTrueFalseResultSqlQuery(string sqlStatement);

}

public interface IBatchORMapper : IORMapper
{
  string GetUpdateSetItem(string columnName, int parameterIndex);
  string GetParameterName(int index);

  bool Exist<T>(string condition, params object[] parameterValues);
  void Update<T>(string setSql, string condition, params object[] parameterValues);
  void Delete<T>(string condition, params object[] parameterValues);
  List<T> Search<T>(string condition, params object[] parameterValues) where T:new();
}

接下来就要真正开始我们的ORMapping类的实现了

public abstract class ORMapper : IBatchORMapper
{

}

[Export(typeof(IORMapper))]                    这里采用MEF进行不同数据的ORMapping拓展,我在这就以SQL server为例,其它都一样的
[ExportMetadata("EntityAccesserType", EntityAccesserType.SqlServer)]
public class SqlServerORMapper : ORMapper
{

}

public class EntityAccesserFactory           这边是对ORMapping进行管理与使用
{
  public static IEntityAccesser GetEntityAccesser(EntityAccesserType accesserType, string connectionString)
  {
    switch (accesserType)
    {
      case EntityAccesserType.SqlServer:          其它数据库类型类似               
        return new SqlServerORMapper(connectionString);
      default:
        throw new NotSupportedException();
    }
  }
}

这样的代码结构大家应该很容易明白吧,没有什么复杂的结构,不懂MEF的朋友可以查阅相关资料,这里就不多说了,今天就介绍到这里,下篇将会介绍库表信息的获取以及怎样自动生成你的SQL command

谢谢。

时间: 2024-12-25 16:02:19

做自己的ORMapping Framework ---- 第六讲 开始ORMapping之旅,ORMapping怎么说的相关文章

做自己的ORMapping Framework ---- 第七讲 开始ORMapping之旅,ORMapping 中command怎么生成呢

上篇介绍了ORMapping的一个大体结构,看起来很简单,基本没有什么复杂的设计模式之说,关于接口类的实现与MEF的管理在上篇都介绍过,这篇就开始介绍ORMapping中的细节点了,当然还是围绕对数据库的操作(增删查改)来讲,我这就只介绍Insert command吧,其它的都一样. 有朋友就会问既然是ORMapping,那肯定得有一套完整的映射关于与操作逻辑,关于映射关系的介绍之前都简单介绍过了,比较抽象,现在在这里就以怎样生成Insert Command来介绍ORMapping的核心部分.

做自己的ORMapping Framework ---- 第九讲 开始ORMapping之旅,更新库表结构更新架构设计

做一个项目,没有人会把一个数据库设计得那么完善以至于后期不会有任何的改动,能设计这样数据库的人估计在火星上看你写代码吧. 不知道你们用过NH或者EF没?我用过之后,一到数据库结构发生变化的时候我就觉得很繁琐,什么类型变化,还有映射关系得改,更可怕的是要是你的代码写得比较乱的,那就麻烦了. 现在这些问题统统都没有了,接下来得在这个ORMapping的基础上讲一下这个DB的migration 操作了,我这边基本已经完善好了,先把这个类图给大家看看,后面我会介绍每个类是干什么用的,怎么用. 有兴趣的朋

16位汇编第六讲汇编指令详解第二讲

16位汇编第六讲汇编指令详解第二讲 1.比较指令 CMP指令 1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状态标志 2.CMP指令执行的功能与SUB指令(相减指令)一样,但是不同的是CMP指令之根据结果设置标志位 而不修改值 可以操作的指令格式 CMP reg,imm/reg/mem CMP mem,imm/reg 上面是CMP指令的语法,具体的也可以查询帮助文档,inter手册 inter手册查的办法 第一个框代表了CMP指令的所有语法 比如 reg,reg 表示可以比较寄存器

Stanford机器学习---第六讲. 怎样选择机器学习方法、系统

原文见http://blog.csdn.net/abcjennifer/article/details/7797502  添加了一些自己的注释和笔记 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Stand

机器学习基石第六讲:theory of generalization

博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 机器学习基石第六讲继续讨论"学习是否可行的问题". Restriction of Break Point 继续前面的讨论,我们看mH(N)是否会有一个很小的增长速度.回顾前面的四种成长函数及其break point.我们知道k是一个成长函数的break point,那比k大的值全是break point. mH(N)是一个hypothesis在N个数据点上可以产生的dic

《上古天真论》第六讲文字版

上古天真论篇第六讲 主讲:徐文兵  主持:梁  冬 播出时间:2009-01-10  23:00—24:00 经文:帝曰:人年老而无子者,材力尽邪?将天数然也? 岐伯曰:女子七岁,肾气盛,齿更发长.二七而天癸至,任脉通,太冲脉盛,月事以时下,故有子.三七,肾气平均,故真牙生而长极. 梁冬:大家好,欢迎收听今天的国学堂之发现中医太美之<黄帝内经>之<上古天真论>.在过去的一段时间里呢,我们得以有幸啊,和厚朴中医学堂的徐文兵老师一起来逐字逐字地体会了<黄帝内经>的精妙,我都

16位汇编第六讲汇编指令详解第第三讲

                                          16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时候你有个手表,里面的数字是九,如果加一个1就是0了,就会产生进位, 不过这个是10进制进位的,所以应该是 a了,但是a的话就出错了.所以我们就出来了这个调整指令直接变为零,然后进位,也就是16进制码当做10进制使用

机器学习中使用的神经网络第六讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第六讲介绍了随机梯度下降法(SGD),并且介绍了加快学习速度的动量方法(the momentum method).针对网络中每一个连接的自适应学习步长(adaptive learning rates for each connection)和RMSProp算法. 这几个算法的难度很大,需要反复推理思考,并在实践中摸索以加深理解. Overview of mini-batch gradie

设计模式第六讲:单例模式(附优化方案)

单例模式 一:模式定义 一个类有且仅有一个实例,并且自行实例化向整个系统提供. 二:模式特点 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源. 三:使用场景 希望在系统中某个类的对象只能存在一个. 四:具体实现 单例模式有两种写法: 1.懒汉式 2.饿汉式 懒汉式实现: public class Single { private static Single instance; private Singleton (){} public