ORM是Object Relational Mapping的缩写,目的在于解决object-orient programming与relational database之间的不一致(所谓Object-relational impedance mismatch,impedance-阻抗这个词,用的很形象)。
这种不一致产生的原因很容易理解,两边是两个不同的domain,各自的模型都不尽相同,更多参见wiki页面。
实现ORM的两种思路:Data Mapper Pattern与Active Record Pattern。
Active Record Pattern是一种从RDBMS的模型出发,将其反应在object-oriented模型中的做法。具体来说,类通常包含Insert、Update、Delete等方法,类的数据成员基本等同于对应表中的列;换言之,该类的一个对象对应了RDBMS中某个表的一行。显然这种做法的限制性是比较大的,而且两边的耦合度很高。
Data Mapper Model的做法是(和其他问题一样),引入一个抽象层,由这个层来完成两侧的对接工作。
Java圈子的Hibernate,Python圈子的SQLAlchemy,都是基于Data Mapping的ORM框架。
ORM:http://en.wikipedia.org/wiki/Object-relational_mapping
http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch
Active Record Pattern:http://en.wikipedia.org/wiki/Active_record_pattern
Data Mapper Pattern:http://www.martinfowler.com/eaaCatalog/dataMapper.html
Hibernate官网的about-orm:http://www.hibernate.org/about/orm
SQLAlchemy:http://en.wikipedia.org/wiki/SQLAlchemy
补充:ibatis采用了另一种思路,提供了另一种折中。