• 大话细说ORM


    什么是ORM?

          ORM,即对象关系映射(Object Relational Mapping)表示一种技术,用来把(对象模型)表示的对象映射到基于SQL的(关系模型)数据结构中去。

          说得通俗点,就是在对象的属性与关系表的字段之间建立一套规则,来实现数据的交互。我们只需使用对象提供给我们的接口来完成数据操作,而无需关心数据到底是如何被查询,被插入的,省去了我们写sql语句的麻烦。一般一个关系表对应两个类,即实体类和操作类。

     

    如何实现ORM?

         ORM,只是一个概念,不是一种实现。我们完全可以在这个概念上实现自己的ORM框架。而实现这个框架的核心是反射(reflect)技术。通过它,我们可以根据对象属性和表字段名的关系,获取和设置对象的字段值,或者构造sql语句进行表操作。

         很多语言中,都有自己的比较成熟的ORM框架,拿来即可。Java中的Hibernate,C#中的NHibernate,C++中的ODB,Android中的ormlite、db4o。当然,它们各自的封装程度不同,为了重用和方便调用,有的(如odb,hibernate)需要你自己配置和进行进一步的封装,有的(ormlite、db4o)则封装得很好,你只需建立一个对象,框架会自动为你生成关系表和操作类,很方便。

         不论是别人的还是自己的框架,为了保持接口的统一,降低耦合性,我们通常对数据操作类做如下接口约定,

         public class TableName{//使用表名称作为操作类名称

                /*item=Tb前缀+TableName,即实体类*/

                item GetById(id),                       //按id获取表中的一行记录

                List<item> GetByClause(clause),//按条件子句获取表中的记录

                List<item> GetAll(),                   //获取表中的所有记录

                List<item> GetByPage(start,count,clause,sort,dir),//按页获取

                Insert(item),   //插入

                Update(item),//更新

                Delete(id)     //删除

           };//end of class

    以上接口仅供参考,读者可以根据自己的业务场景建立自己的约束,这样可以方便的更换Orm框架,并为代码生成器的使用作铺垫。

    ORM框架的使用

         这里,主要介绍C#中,NHibernate框架的具体使用,这个用起来相对复杂。

         首先引入NHibernate.dll库文件。它主要由实体类、映射文件,配置文件(注意配置文件在1.x和2.x下有较大差别)构成。当然为了使用的方便,还需要一个操作类(select,update,insert,update)如上述。通过NHbernate.cfg里的 Configuration对象来加载映射文件,以关联数据库的表与相应的实体类,如下。

              Configuration cfg = new Configuration();

              string path =@"D:..Books.hbm.xml";//这里使用相对路径未成功

              cfg.AddXmlFile(path);

    再由cfg来创建会话工厂,再由会话工厂创建会话线程,再由会话开启一个数据库事务。结构如下:

    【创建过程及依赖关系图】

    注意:映射文件中的<class name="className,namespace" table="Tb_Books">,其中className必须为包含完整namespce的名称。

    这里,提供一个我当时在CSDN上写的一个,关于C++ORM框架ODB的扩展性应用实例。

    地址:http://download.csdn.net/detail/phongf/5072780

    批量ORM

          重复劳动是程序员的天敌,要为几十个表建立映射关系,是很痛苦的。是时候推出,我们的利器,代码生成器了。代码生成器可以做得很复杂,多数据库,多语言,组件、模板化。也可以很简单,VS里的T4引擎就是一个简单的代码生成器。有了它,我们就可以很容易为上百个表创建配置、映射、操作对象。如果操作逻辑或者表明发生变动,Once agin即可。当然,代码生成器的作用不仅于此,任何基于数据的批处理问题,都可以交给它来完成。

          这里,时间有限,下次再对代码生成器做深入介绍。

    水平有限,如有不当之处,还请各位拍砖指教,谢过。

  • 相关阅读:
    伺服电机常见故障分析汇总
    PLC常见四大故障及其处理方法
    Qt QString的arg()方法的使用
    Qt 线程池QThreadPool类、QRunnable类
    C++线程池的实现
    C++ List的用法
    C++语言堆栈的详细讲解
    QT中的QQueue类、C++中的queue类
    Qt platform plugin 'windows' 问题的解决方法
    电气接地的相关介绍
  • 原文地址:https://www.cnblogs.com/ywb15ba/p/orm.html
Copyright © 2020-2023  润新知