Posted on 2006-07-04 10:17
东人EP 阅读(1245)
评论(0) 编辑 收藏 引用 所属分类:
.NET
NHibernate 是当前最流行的
Java O/R mapping
框架
Hibernate
的移植版本,当前版本是
1.0 rc-1
。它出身于
sf.net..IbatisNet
是另外一种优秀的
Java O/R mapping
框架,当前版本是
1.2
。目前属于
apache的一个子项目了。
相对
NHibernate
“
O/R
”而言,
IbatisNet
是一种“
Sql Mapping
”的ORM实现。
NHibernate
对数据库结构提供了较为完整的封装,
NHibernate
的
O/R Mapping
实现了
PO
和数据库表之间的映射,以及
SQL
的自动生成和执行。程序员往往只需定义好了
PO
到数据库表的映射关系,即可通过
NHibernate
提供的方法完成持久层操作。程序员甚至不需要对
SQL
的熟练掌握,
NHibernate
会根据制定的存储逻辑,自动生成对应的
SQL
并调用
ADO.NET接口加以执行。
而
IbatisNet
的着力点,则在于
PO
与
SQL
之间的映射关系。也就是说,
IbatisNet
并不会为程序员在运行期自动生成
SQL
执行。具体的
SQL
需要程序员编写,然后通过映射配置文件,将
SQL
所需的参数,以及返回的结果字段映射到指定PO。
使用
IbatisNet
提供的
ORM
机制,对业务逻辑实现人员而言,面对的是纯粹的
DotNet
对象,这一层与通过
NHibernate
实现
ORM
而言基本一致,而对于具体的数据操作,
NHibernate
会自动生成
SQL
语句,而
IbatisNet
则要求开发者编写具体的
SQL
语句。相对
NHibernate
而言,
IbatisNet
以
SQL
开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
二者的对比:
1
.
IbatisNet
非常简单易学,
NHibernate
相对较复杂,门槛较高。
2
.
二者都是比较优秀的开源产品
3
.
当系统属于二次开发
,
无法对数据库结构做到控制和修改
,
那
IbatisNet
的灵活性将比
NHibernate
更适合
4
.
系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的
SQL
语句(或存储过程)才能达到系统性能设计指标。在这种情况下
IbatisNet
会有更好的可控性和表现。
5
.
IbatisNet
需要手写
sql
语句,也可以生成一部分,
NHibernate
则基本上可以自动生成,偶尔会写一些
Hql
。同样的需求
,IbatisNet
的工作量比
NHibernate
要大很多。类似的,如果涉及到数据库字段的修改,
NHibernate
修改的地方很少,而
IbatisNet
要把那些
sql mapping
的地方一一修改。
6
.
以数据库字段一一对应映射得到的
PO
和N
Hibernte
这种对象化映射得到的
PO
是截然不同的,本质区别在于这种
PO
是扁平化的,不像
NHibernate
映射的
PO
是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。
7
.
最关键的一句话是
IbatisNet
的作者说的:
If you are starting a new project and you're in full control of your object model and database design, NHibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy