在什么应用状况下应用Hibernate框架组件技术?
1、请描述在什么应用状况下应用Hibernate框架?应用它后,应该注意什么方面的问题?
Hibernate是JDBC的轻量级的对象封装,做为JDBC的替代者出现的---不仅提供ORM 映射服务,还提供数据查询和数据缓存功能。
(1)自己没有数据持久层开发能力
由于hibernate为我们提供了一套成熟的O/R Mapping的模型,应用它将能够在短时间内构建适合业务需求的数据持久层的解决方案
当然,前提是要对hibernate有基本的使用开发能力。
(2)对JDBC底层开发不甚熟悉者
由于hibernate实现了对JDBC底层的调用封装,这样将能够统一对不同类型的数据库系统的支持。
因此,当开发者在缺乏对JDBC底层调用的了解时,使用Hibernate则可以达到事半功倍的效果。
(3)自己开发的数据持久层不能满足业务需求
如果缺乏对JDBC的了解和数据持久层开发的经验,可能自己开发的数据持久层会慢慢的不满足业务需求。
比如在数据缓存、连接池管理、多数据库支持等等方面,hibernate在上述方面有比较出的表现。
我们可以在不影响业务功能实现的开发前提下可以考虑采用该框架。
(4)在团队开发中希望能够统一持久层开发
gradient测试从技术上来分类,我们一般是把hibernate称为O/R Mapping开发框架。
因此,既然是框架,那么如果团队中的各个成员对这个框架比较熟悉的话,那么我们将可以统一团队的开发过程,从而减少沟通的频率,同时也能够促进协同开发和数据共享。(5)希望我们的应用系统不依赖于某种特定的数据库
1)希望应用系统能够满足不同的物理数据库系统的差别所带来的问题
2)如何设计适用于多种类型数据库的通用产品而不是提供多个产品版本
3)尽量使用标准通用的SQL语句
4)尽量不使用各数据库方言和某种数据库特有的函数或者数据类型等
5)将系统的配置参数保存在一个properties文件或者*.xml中,然后在代码中利用类似
Configuration.setProperties(Properties pro)方法载入配置参数文件。
(6)优化数据查询
大量重复查询同一数据源(如淘宝网中重复查询同一商品);查询中涉及大量关联关系。
2、Hibernate自身也有一些弱点,表现如下
对象关系的映射配置过多,控制复杂,不支持将对象动态映射到不同的数据库表;事务处理也面临各种兼容问题;“延迟加载”技术有时候也带来一些不便;HQL也带来额外的学习成本等等。并且,使用Hibernate技术在数据访问速度上来说低于使用JDBC。
所以,我们在应用Hibernate时要结合开发的实际情况,权衡利弊。如果根据开发团队本身的实际情况,随着Hibernate技术的引入带来的业务建模的方便、开发节奏的统一、团队交流的方便、不同数据库的隔离等等好处要大于它带来的不便,就应该使用。应用之后,要注意尽量扬长避短,并且要注意框架版本方面的统一。
3、应用Hibernate系统后所应该注意的问题
1)应该避免直接PO传递到系统中的其他层面。
2)持久化类(也叫POJO)符合JavaBean的规范。
3)关于数据验证的问题----不应该依赖Hibernate或数据库来负责数据验证,应该在表
示层或者业务逻辑层负责数据验证。
4、Hibernate系统的应用场合
Hibernate只是适用于中小型的数据,如果你的数据量比较大,数据之间关系比较复杂,对性能的要求比较高的话,还是需要通过优化的SQL 和各种存储过程来实现。
5、请描述Hibernate框架和JDBC技术有什么不同点
Hibernate这种持久框架在某些方面有很大的不同,它不需要任何容器,提供简单易用的API,也解决了JDO的很多缺陷。作为一个良好的ORM ,它有如下特点:
1)透明地提供对象与关系数据库的映射,以统一的接口方式支持多种数据库。
2)缓存机制,复杂的缓存机制和锁定策略,使针对数据库操作大大减少。
3)开源免费的License,可以在需要的时候研究源代码,改写源代码,进行功能的定
制。
4)轻量级封装,避免引入过多复杂的问题,容易调试,减轻程序员的负担。
轮播台怎么调高清晰度5)具有可扩展性,API开放,当本身功能不够用的时候,可以自行编码扩展。
6)开发者活跃,产品有稳定的发展保障。
而多数Java开发人员是用JDBC来和数据库进行通信,它可以通过DAO模式进行改善和提高。但这种方式在大型应用程序中不容易操作使用,且维护起来相当困难。
6、Hibernate框架和JDBC技术有什么本质的差别
(1)概念上的区别
Hibernate是一个实现了O/R Mapping技术的开源框架,它是独立的对象持久层框架。而JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据
库提供统一访问,它由一组用Java语言编写的类和接口组成。Hibernate实现了对JDBC轻量级的封装。
(2)作用上的区别
JDBC技术实现了数据库连接、访问和查询,统一对数据库的操作命令。体现了JAVA所倡导的“一次编写,处处运行”。而Hibernate则不只具备以上功能,它具备了作为一个开源框架所应具备的更全面的功能,就数据库相关方面如:连接池管理、多数据库支持等。其功能远大于JDBC。
应用Hibernate的好处:①提高了编码的效率和提高了数据库访问性能;②对设计人员达到持久层设计上的解耦/对开发人员达到简化持久层的编程实现。而其执行效率并不能和JDBC相比。
(3)使用上的区别
JDBC说到底终归是一种用于执行SQL语句的Java API,所以只要倒入相应的package,根据书写规则就可以设计编写持久层的解决方案。
Hibernate作为一个开源框架,要实现业务层和持久层的中间件的作用,对JDBC轻量级的封装,同时达到对设计方案的配置管理,必然用到大量的XML文件作为统一的数据定义和传输标准。除了使用Hibernate API来操作底层数据库外,HQL语句的使用也是明显区别于JDBC的,HQL是比SQL语句更
抽象,更与底层物理数据库无关的。
(4)地位上的区别
plc编程培训机构苏州JDBC不能作为大型的应用系统的中的持久层解决方案。而Hibernate框架从某种意义上讲已经可以取代JDBC,它是轻量级的O/R Mapping技术的理想实现。
7、请用具体的示例说明如何应用Hibernate中的查询缓存
(1)启用查询缓存
查询缓存在Hibernate同样是可配置的,但默认是关闭的。与此,首先需要通过设置
cache.use_ query_cache为true来打开查询缓存:
<property name="cache.use_query_cache"> true </property>
然后在代码中采用下面的代码:Query.setCacheable(true)方法。这个调用会让查询在执行过程中时先从缓存中查结果,并将自己的结果集放到缓存中去。
(2)配置Ehcache数据缓存字符串函数库
1)需要在l中进行配置
为了启用Query Cache,我们需要在l中进行配置,参考配置如下。
<hibernate-configuration>
<session-factory>
…………
<property name="cache.use_query_cache"> true </property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider </property> …………
</session-factory>
</hibernate-configuration>
2)在映射文件中配置出缓存
<class name="example.UserInfo" table=”userInfo”>
properties是什么文件<cache usage="read-only"/>
....
乱世佳人免费观看达达兔</class>
关键就是这个<cache usage="read-write"/>,其有几个选择:read-only、read-write和transactional等。
当然,在执行查询时session.find()方法不会获取缓存中的数据。只有调用query.iterate()方法时才会调缓存的数据。同时get 和load方法都会查询缓存中的数据。
3)如果用ehcache,则还需要配置l
(3)在DAO组件中将Query.Cacheable设置为true
绝大多数的查询并不能从查询缓存中受益,所以Hibernate默认是不进行查询缓存的。如若需要进行缓存,请调用Query.setCacheable(true)方法。这个调用会让查询在执行过程中时先从缓存中查结果,并将自己的结果集放到缓存中去。
因此,在我们的应用程序中必须在查询执行之前,将Query.Cacheable设置为true,而
且每次都应该这样。比如下面的示例。
Query oneQuery =ateQuery(hql).setInteger(0.15);
oneQuery.setCacheable(true);
注意:也可以采用下面的形式。
oneQuery.setCacheable(true); //激活查询缓存
oneQuery.setCacheRegion("myCacheRegion"); //指定要使用的cacheRegion,可选第二行指定要使用的cacheRegion是myCacheRegion,即我们可以给每个查询缓存做一个单独的配置。这样我们能够实现对查询缓存的失效政策进行精确的控制,通过调用Query.setCacheRegion()方法,为每个查询指定其命名的缓存区域。
如果使用setCacheRegion来做这个指定,则需要在l里面配置它(请见前面的配置示例)。如果省略第二行,不设置cacheRegion的话,那么会使用上面提到的标准查询缓存的配置,也就是org.hibernate.cache.StandardQueryCache。如果不存在与类名匹配的cache名称,则用defaultCache。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论