
首先不考虑JPA是Sun推荐的Java ee标准,关键在于jpa实体完全可以兼容Hibernate,
也就是说你按jpa标准来开发实体,那么这些实体不仅可以在jpa中使用,他可以任何遵守JPA规范
的ORM框架(包括Hibernate)中使用。
而且连与Hibernate同属于JBoss的jBPM据说也打算使用JPA来作为持久层解决方案。
这就可见JPA的魅力了。
先吐槽
。NET 下 ORM 要死绝了。 真的。EF一出,几全死绝了。
Mybatis 已经放弃治 上次更新是2011年的事了
NBEAR 主页打不开。
SubSonic-30 号称也能Linq 查询了。但是没看出牛B的地方。主页文档打不开。
你不用EF 只能用NH了
NH有口气。 还在更新。 可是相当于没有文档。。。 查文档? 去Hibernate里找。找到回来猜
文档写的能把你的鼻子气掉了。
优点
对各数据库的抽象能力好。SQL方言这个设计真好。我喜欢
映射能力强 。支持各种奇葩的映射关系。。 (我感觉用处不大)
支持2级缓存 。 这个EF 有个山寨的。但是官方没有。这个绝对有用
支持一大堆奇葩的查询方式。 感觉没用,有linq 就好。NH也支持Linq
缺点
代码历史包袱重。
Java气味大
据说没有EF快。我看代码也感觉是这样的。但是开启2缓,我感觉会快
作者:王玉楠
链接:>关于这个问题网上讨论的很多,多查查其实也大概清楚了。
我说点自己的体会吧
其实刚开始用hibernate时,也没觉得有多方便,感觉配置好复杂,什么状态、关联、缓存搞不清,而且复杂的查询很难实现。开发起来缩手缩脚,如履薄冰,觉得没有jdbc来的灵活,随心所欲。
hibernate用多了之后再使用jdbc,感觉jdbc好烦,老是要对应你数据库中的字段和程序中的实体。比如查询 *** 作,hibernate中一句load(class,id) 就好了,而jdbc一直写rsget(“你数据库字段名") ,你要一直对照数据库。hibernate的开发效率确实要高很多。
还有一点感触,jdbc和数据库耦合太高,要换数据库的话,代价大。
不知道你具体要了解些什么,希望对你有所帮助。jdbc每次都要连接数据库一次,速度很快。但是没法用面向对象的方式来处理问题,hibernate解决了阻抗不匹配的问题,数据库是关系型数据库。hibernate采用ORM(Object Relational Mapping)---是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。简单说:ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据中。本质上就是将数据从一种形式转换到另外一种形式。三、 Hibernate做什么:
1、 就是将对象模型(实体类)的东西存入关系模型中,
2、 实体中类对应关系型库中的一个表,
3、 实体类中的一个属性会对应关系型数据库表中的一个列
4、 实体类的一个实例会对应关系型数据库表中的一条记录。
%%将对象数据保存到数据库、将数据库数据读入到对象中%%
OOA---面向对象的分析、面向对象的设计
OOD---设计对象化
OOP---面向对象的开发
阻抗不匹配---例JAVA类中有继承关系,但关系型数据库中不存在这个概念这就是阻抗不匹配。Hibernate可以解决这个问题
四、 Hibernate存在的原因:
1、 解决阻抗不匹配的问题;
2、 目前不存在完整的面向对象的数据库(目前都是关系型数据库);
3、 JDBC *** 作数据库很繁琐
4、 SQL语句编写并不是面向对象
5、 可以在对象和关系表之间建立关联来简化编程
6、 O/R Mapping简化编程
7、 O/R Mapping跨越数据库平台
8、 hibernate_0200_OR_Mapping_Simulation
五、 Hibernate的优缺点:
1、 不需要编写的SQL语句(不需要编辑JDBC),只需要 *** 作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可以提高生产效;
2、 因为使用Hibernate只需要 *** 作对象就可以了,所以我们的开发更对象化了;
3、 使用Hibernate,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的 *** 作);
4、 Hibernate实现了透明持久化:当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹的单纯对象—称为POJO对象(最纯粹的对象—这个对象没有继承第三方框架的任何类和实现它的任何接口)
5、 Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架
6、 Hibernate代码测试方便。
六、 Hibernate使用范围:
1 针对某一个对象,简单的将它加载、编辑、修改,且修改只是对单个对象(而不是批量的进行修改),这种情况比较适用;
2 对象之间有着很清晰的关系(例:多个用户属于一个组(多对一)、一个组有多个用户(一对多));
3 聚集性 *** 作:批量性添加、修改时,不适合使用Hibernate(O/映射框架都不适合使用);
4 要求使用数据库中特定的功能时不适合使用,因为Hibernate不使用SQL语句;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)