大话细说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

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

转载于:https://www.cnblogs.com/shao-shao/articles/3543453.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux中权限的名词解释,Linux的基本权限和特殊权限

基本权限的类别访问方式(权限)&#xff1a;-读写&#xff1a;允许查看内容-read r-写入&#xff1a;允许修改内容-write w-可执行&#xff1a;允许运行和切换-execute x对于文本文件&#xff1a;r&#xff1a;cat head tail lessw&#xff1a;vimx&#xff1a…

乱写

想写点东西&#xff0c;又不知道从何下笔。可是心情又觉得有些许不爽&#xff0c;那就漫无思绪想到哪写哪吧。 昨天加了一个HR的QQ&#xff0c;发了一封简历过去&#xff0c;她说她打开我的简历电脑就蓝屏了&#xff08;无语&#xff09;&#xff0c;这管不着我简历的事吧。然后…

容器set和multiset

一、set和multiset基础 set和multiset会根据特定的排序准则&#xff0c;自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件&#xff1a; #include <set> set和multiset都是定义在std空间里的类模板&#xff1a; [cpp] view plaincopyprint? t…

linux centos命令语法,linux-centos7

# :-: linux常用的相关查询命令### **1.查看linux用户命令**cat /etc/passwd### **2.查看cpu,mem**grep "model name" /proc/cpuinfo 查看cpu核数cat /proc/cpuinfo 查看cpu详细信息grep MemTotal /proc/meminfo 查看内存总大小以及剩余大小…

oracle rac理解和用途扩展

Oracle RAC的优势在于利用多个节点&#xff08;数据库实例&#xff09;组成一个数据库&#xff0c;这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能&#xff0c;而且可以通过增加节点进行性能的扩展。实现Oracle RAC需要解决的关键问题就是多节点进行数据访问…

std::set作为一个有序集合

摘要&#xff1a;std::set作为标准库的一个关联容器&#xff0c;实现内部元素进行了排序&#xff0c;使用这特性可以对一组元素进行插入排序。std::set最初的设计是完成数学中“集合”的概念&#xff0c;它提供的接口也是如此。本文简单地介绍一下这一个标准库容器。 为了使用s…

linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息。通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到&#xff0c;如果是主动与别的机器建立的连接信息则可以通过 lsof 命令来获得。例如我想要查看进程 frps 当前的所有连接信息&#xff0c…

SQLite多线程使用总结

SQLite支持3种线程模式&#xff1a;单线程&#xff1a;这种模式下&#xff0c;没有进行互斥&#xff0c;多线程使用不安全。禁用所有的mutex锁&#xff0c;并发使用时会出错。当SQLite编译时加了SQLITE_THREADSAFE0参数&#xff0c;或者在初始化SQLite前调用sqlite3_config(SQL…

linux rom打包工具,Android rom解包打包工具

eMMC主要是针对手机和平板电脑等产品的内嵌式存储器&#xff0c;由于其在封装中集成了一个控制器&#xff0c;且提供标准接口并管理闪存等优势&#xff0c;越来越受到Android手机厂商的青睐&#xff0c;以eMMC为存储设备的android手机&#xff0c;其文件系统(system、data分区)…

winform(C#)透明方法

1.设置窗体opacity属性&#xff1a; 2.窗体的BackColor和TransparencyKey属性设置相同的值&#xff1a; 2.加using System.Runtime.InteropServices;引用然后加上以下代码&#xff1a; [StructLayout(LayoutKind.Sequential)]public struct MARGINS{public int Left;public int…

ssh免密码登陆

1. 先去掉root登陆密码 passwd -d root 或者修改/etc/shadow 文件&#xff0c;将root那行&#xff0c;前两个冒号之间的加密过的密码去掉 2. 修改sshd_config文件 PermitEmptyPasswords yes

linux彻底卸载xfce,Ubuntu12.04LTS下如何安装和彻底卸载xfce4?

今天将Ubuntu12.04更新完了&#xff0c;用的网易的源&#xff0c;更新速度还是很给力的&#xff0c;平均500多K的下载速度。发现虚拟机上unity界面还是比较卡的&#xff0c;想换成gnome3.6试一下&#xff0c;结果rangerlee说xfce和lxde桌面很清爽&#xff0c;并且轻量占用内存少…

分布式缓存应用(转载的)

前言 Asp.Net中使用Couchbase——Memcached缓存入门篇 见http://www.cnblogs.com/aehyok/p/3436721.html 主要讲解Couchbase服务端的安装配置和客户端的引用调用&#xff0c;然后通过一个零配置的代码来完成最简单的代码实现调用。那么本次课先通过简单的配置文件进行配置&…

详细解析Linux /etc/passwd文件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行&#xff0c;它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。这个文件对所有用户都是可读的。但是Linux /etc/passwd文件中都有些什么内容呢&#xff1f; 它的内容类似下…

linux eclipse 头文件路径,Eclipse CDT标准库头文件设置

使用eclipse cdt开发C/C项目的时候&#xff0c;从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g头文件、符号之类的&#xff0c;但是在我用的slackware下却不行&#xff0c;需要手动添加标准库头文件路径/usr/include、/usr/local/include……&…

Jquery通过遍历数组给checkbox赋默认值

需求&#xff1a;有一个数组&#xff1a;(北京菜&#xff0c;粤菜)&#xff0c;checkbox如下&#xff1a; 现在想通过遍历这个数组&#xff0c;使数组里包含的值&#xff0c;在checkbox选中 代码&#xff1a; var flavors new Array([北京菜 , 粤菜]); $.each(flavors,functio…

/etc/fstab和/etc/mtab的区别!

etc/fstab文件的作用 记录了计算机上硬盘分区的相关信息&#xff0c;启动 Linux 的时候&#xff0c;检查分区的 fsck 命令&#xff0c;和挂载分区的 mount 命令&#xff0c;都需要 fstab 中的信息&#xff0c;来正确的检查和挂载硬盘。 /etc/mtab文件的作用&#xff1a;先看它的…

linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...

1.Linux 链接概念Linux 链接分两种&#xff0c; 一种被称作硬链接(Hard Link)&#xff0c;另一种被称为符号链接(Symbolic Link).默认情况下&#xff0c;ln 命令产生硬链接。硬连接硬链接指通过索引节点来进行连接。再Linux的文件系统中&#xff0c;保存在磁盘分区中的文件不管…

php模拟post提交数据,用处很多,可用来网站的采集,登陆等等

1. [代码][PHP]代码 <?php//以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port "80") {//需要提交的post数据$argv array(cookie > array(user_login > $user_login, password > $password, _wp_http_referer…

关闭SQLite3中的journal暂存档

相信很多使用SQLite3当做数据库的人都会一个现象&#xff0c;那就是当SQLite3有做写入的动作时&#xff0c;SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢? 答案是用来Rollback &#xff0c;换句话说&#xff0c;就是当数据写入数据库有…