Hibernate优化

合集下载

Hibernate3.6(开发必看)

Hibernate3.6(开发必看)

1.Java对象持久化概述1.1.应用程序的分层体系结构1.1.1.基于B/S的典型三层架构说明:1,展现层:提供与用户交互的界面。

2,业务逻辑层:实现各种业务逻辑。

3,数据访问层:负责存放和管理应用程序的持久化业务数据。

1.1.2.数据访问层与Hibernate在Java应用程序中的角色数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。

完善的持久化层应该达到的目标:1,代码重用性高,可完成所有的数据访问操作。

2,如果需要的话,能够支持多种数据库平台。

3,具有相对独立性,当持久化层变化时,不会影响上层实现。

在数据访问层(持久化层)中可以使用Hibernate框架以实现要求,如下图所示:1.2.软件模型1.2.1.各种模型的说明概念模型:模拟问题域中的真实实体。

描述每个实体的概念和属性及实体间关系。

不描述实体行为。

实体间的关系有一对一、一对多和多对多。

关系数据模型:在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。

有以下内容组成:1,若干表2,表的所有索引3,视图4,触发器5,表与表之间的参照完整性域模型:在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。

组成部分:1,具有状态和行为的域对象。

2,域对象之间的关联。

域对象(domain object):构成域模型的基本元素就是域对象。

对真实世界的实体的软件抽象,也叫做业务对象(Business Object,BO)。

域对象可代表业务领域中的人、地点、事物或概念。

域对象分为以下几种:1,实体域对象:通常是指业务领域中的名词。

(plain old java object,简单Java 对象)。

2,过程域对象:应用中的业务逻辑或流程。

依赖于实体域对象,业务领域中的动词。

如发出订单、登陆等。

3,事件域对象:应用中的一些事件(警告、异常)。

1.2.2.域对象间的关系关联:类间的引用关系。

以属性定义的方式表现。

依赖:类之间访问关系。

Hibernate+Spring多数据库解决方案

Hibernate+Spring多数据库解决方案

Hibernate+Spring多数据库解决方案我以前在项目中的探索和实践,写出来与大家分享。

大家有其他好的方式,也欢迎分享。

环境:JDK 1.4.x , Hibernate 3.1, Spring 2.0.6, JBOSS4.0, 开发模式: Service + DAO我们项目中需要同时使用多个数据库. 但 Hibernate 不能直接支持,为此我们对比了网上网友的方案,自己做了一点探索。

1. Demo需求我们的项目使用一个全省的公共库加十多个地市库的架构。

本文主要说明原理,将需求简化为两库模型。

主库:User管里,主要是系统管理,鉴权等数据;订单库:Order 管理,存放订单等业务性数据。

2. 原理:1) Hibernate 的每个配置文件对应一个数据库,因此多库需要做多个配置文件。

本文以两个为例:主库 hibernate_sys.cfg.xml,订单库 hibernate_order.cfg.xml每个库,Hibernate 对应一个 sessionFactory 实例,因此Hibernate 下的多库处理,就是在多个 sessionFactory 之间做好路由。

2) sessionFactory 有个 sessionFactory.getClassMetadata(voClass) 方法,返回值不为空时,表示该 VO 类在该库中(hbm.xml文件配置在了对应的hibernate.cfg.xml中),该方法是数据路由的核心和关键所在。

因此, User.hbm.xml 配置在 hibernate_sys.cfg.xml ,Order数据位于配置到 hibernate_order.cfg.xml3)多库处理时,需要使用 XA 事务管理。

本例中使用 Jboss4.0 来做JTA事务管理;用JOTM,其他应用服务器原理相同。

3. 实现1)为做多 sessionFactory 实例的管理,设计 SessionFactoryManager 类,功能就是做数据路由,控制路由的核心是 sessionFactoryMap 属性,它按dbFlag=sessionFactory 的方式存储了多个库的引用。

Hibernate学习笔记

Hibernate学习笔记

Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。

只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。

(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。

倒入此路径下的所有jar包就可以了。

2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。

(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。

hibernate sql写法

hibernate sql写法

hibernate sql写法Hibernate是一个开源的、高效的、强大的Java持久化框架,它提供了面向对象的方式来操作关系型数据库。

使用Hibernate,开发者可以以一种简单、灵活的方式进行数据库操作,而无需编写大量的SQL 语句。

在Hibernate中,我们可以通过编写映射文件或注解来定义实体类与数据库表之间的映射关系,通过Session对象来执行对数据库的操作。

在Hibernate中,SQL语句可以通过多种方式来编写。

下面将针对Hibernate中的SQL编写进行详细介绍。

1. HQL(Hibernate Query Language)Hibernate Query Language(HQL)是一种面向对象的查询语言,它类似于SQL语句,但是使用的是实体类和属性名,而不是表名和列名。

HQL可以实现对实体对象的查询、更新和删除等操作。

以下是HQL的一些常用语法:-查询所有的实体对象:FROM实体类名-条件查询:FROM实体类名WHERE条件-投影查询:SELECT属性列表FROM实体类名-排序查询:FROM实体类名ORDER BY属性ASC/DESC-分页查询:FROM实体类名LIMIT开始位置,查询数量HQL的编写与SQL类似,但是可以直接使用实体类和属性名,从而更加面向对象。

例如,以下HQL语句可以查询出所有年龄大于18岁的用户:FROM User WHERE age > 182.原生SQL查询除了HQL,Hibernate还支持原生的SQL查询。

原生SQL查询可以直接编写传统的SQL语句,但是需要使用Session对象的createNativeQuery方法来执行。

以下是原生SQL查询的一些常用语法:-执行查询:session.createNativeQuery("SELECT * FROM表名").getResultList()-执行更新或删除:session.createNativeQuery("UPDATE/DELETE FROM表名WHERE条件").executeUpdate()-参数绑定:Query.setParameter(参数名,参数值)原生SQL查询可以更灵活地操作数据库,但是需要注意SQL语句的安全性和兼容性问题。

Java Web应用系统性能优化指南

Java Web应用系统性能优化指南

Java Web应用系统性能优化指南随着互联网的不断发展,Web应用系统正在成为企业级应用系统的主要形式。

而Java作为Web应用系统开发的主要语言,其高可靠性和开发效率带来的便利,正被越来越多的企业所接受。

但是,Java Web应用系统的性能问题也越来越受到开发人员和运维人员的关注。

因此,本文将从多个角度探讨Java Web应用系统的性能优化,帮助开发人员和运维人员更好地解决性能问题。

1. 优化数据库数据库是Web应用系统中最常用的组件之一,也是性能瓶颈所在之一。

因此,通过对数据库进行优化,可以大大提高整个系统的性能。

1.1 数据库读写分离在数据库中,读操作和写操作所消耗的资源是不一样的,为了提高数据库的性能,通常需要将读写操作分离。

即通过主从复制的方式,将读操作分配到从库上,将写操作分配到主库上。

这样可以避免读写操作之间的竞争,提高系统的并发处理能力。

1.2 使用索引索引是数据库优化的重要手段之一,通过建立适当的索引,可以加快数据查询的速度。

但是,在使用索引时需要注意,适当的索引可以提高查询速度,但是过多的索引会增加数据库的维护成本,并且会降低更新操作的效率。

1.3 数据库连接池数据库的连接是比较耗费系统资源的,为了避免频繁建立和关闭数据库连接,通常使用连接池来管理数据库连接。

连接池会维护一定数量的数据库连接,并且在需要时分配给请求方使用,请求完成后将连接释放回连接池。

使用连接池可以避免频繁地连接和关闭数据库,提高系统的性能。

2. 优化代码代码问题也是影响Web应用系统性能的一个关键因素。

通过对代码进行优化,可以提高系统的稳定性和性能。

2.1 避免双重循环在编写代码时,需要注意避免双重循环。

双重循环是比较消耗系统资源的,会导致系统的响应速度变慢。

因此,在处理大量数据时,应该尽量避免使用双重循环。

2.2 使用缓存使用缓存可以减轻数据库的负担,提高系统的响应速度。

缓存是一种内存数据存储技术,可以将常用的数据存储在内存中,提高系统访问速度。

优化数据库的八种方法

优化数据库的八种方法

优化数据库的八种方法优化数据库是提高数据库性能和效率的重要手段之一。

下面将介绍八种常见的数据库优化方法。

一、合理设计数据库结构数据库结构的设计直接影响数据库的性能和效率。

在设计数据库时,应注意以下几点:1. 表的字段应设置合理的数据类型和长度,避免浪费存储空间和计算资源。

2. 为表添加适当的索引,以加快查询速度。

索引应根据查询的频率和类型进行选择。

3. 合理划分表和字段的关系,避免冗余和重复数据。

使用范式化的设计可以提高数据的一致性和完整性。

二、优化查询语句优化查询语句是提高数据库性能的关键。

以下是一些优化查询语句的方法:1. 调整查询语句的顺序,将最常用和最重要的条件放在前面,以提高查询效率。

2. 避免使用通配符查询,如“%”,会导致全表扫描,影响性能。

3. 使用合适的连接方式,如INNER JOIN、LEFT JOIN等,减少不必要的数据读取。

4. 避免在WHERE子句中使用函数,函数会导致索引失效,影响查询效率。

三、优化索引索引是提高数据库查询效率的重要手段。

以下是一些优化索引的方法:1. 选择合适的索引类型,如B树索引、哈希索引等,根据查询的类型和频率进行选择。

2. 避免在索引列上使用函数或运算符,这会导致索引失效。

3. 定期对索引进行优化和重建,以保证索引的有效性和性能。

四、合理使用缓存缓存是提高数据库访问速度的重要手段。

以下是一些合理使用缓存的方法:1. 使用数据库缓存,如Redis、Memcached等,可以减少对数据库的访问次数。

2. 合理设置缓存时间,避免缓存数据过期或过长时间没有更新。

3. 使用缓存预热,提前加载常用数据到缓存中,减少用户访问时的延迟。

五、分表分库当数据库数据量庞大时,可以考虑进行分表分库操作,以减轻单个数据库的压力。

以下是一些分表分库的方法:1. 根据业务需求和数据特点,将数据划分到不同的表或数据库中。

2. 使用分片技术,将数据按照一定规则分布到多个数据库中。

12种接口优化的通用方案

12种接口优化的通用方案

引言:接口优化是软件开发中非常重要的一环,它直接影响到系统的性能、用户体验和安全性。

在上一篇文章中,我们介绍了6种接口优化的通用方案。

在本文中,我们将继续探讨接口优化的另外6种通用方案,为大家提供更多的实用技巧和建议。

概述:1.使用缓存机制2.优化数据库查询3.异步处理请求4.压缩和减少网络传输5.限制和控制接口访问频率6.定期清理过期数据正文内容:一、使用缓存机制:1.使用内存缓存:将接口返回数据存储在服务器的内存中,避免频繁查询数据库,提高接口响应速度。

2.使用分布式缓存:将接口返回数据存储在分布式缓存中,提高可扩展性和容错性。

二、优化数据库查询:1.使用索引:为经常被查询的字段创建索引,加快查询速度。

2.批量操作:将多个查询合并为一个批量操作,减少与数据库的交互次数。

三、异步处理请求:1.使用消息队列:将接口请求放入消息队列中异步处理,提高接口的并发处理能力。

2.异步请求结果通知:在接口返回较慢的情况下,返回一个接口请求ID,供客户端轮询获取结果。

四、压缩和减少网络传输:1.压缩接口返回数据:使用压缩算法对接口返回数据进行压缩,减少网络传输的数据量。

2.减少冗余数据:返回数据时只返回客户端需要的字段,减少数据传输量,提高数据传输效率。

五、限制和控制接口访问频率:1.接口访问频率限制:设置每个用户或每个IP地质每分钟/小时/天可访问的接口次数,防止接口被恶意刷接口攻击。

2.使用验证码:对于需要频繁访问的接口,可以使用验证码来确认用户的真实身份。

六、定期清理过期数据:1.数据库定时清理:定期删除过期的缓存数据,避免数据堆积导致数据库性能下降。

2.内存缓存定期清理:定期清理过期的内存缓存数据,释放内存空间。

总结:本文介绍了12种接口优化的通用方案,涵盖了缓存机制、数据库查询优化、异步处理请求、压缩和减少网络传输、限制和控制接口访问频率以及定期清理过期数据等方面。

这些方案可以帮助开发者提高系统的性能、用户体验和安全性,值得在实际项目中加以应用和实践。

hibernate官方文档

hibernate官方文档

第一篇:官方文档的处理方法,摘自官方在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持。

1.使用SQLQueryhibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的.1Session.createSQLQuery();1.1标量查询最基本的SQL查询就是获得一个标量(数值)的列表。

1sess.createSQLQuery("SELECT * FROM CATS").list();2sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值。

Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。

如果要避免过多的使用ResultSetMetadata,或者只是为了更加明确的指名返回值,可以使用addScalar()。

1sess.createSQLQuery("SELECT * FROM CATS")2 .addScalar("ID", Hibernate.LONG)3 .addScalar("NAME", Hibernate.STRING)4 .addScalar("BIRTHDATE", Hibernate.DATE)这个查询指定了:SQL查询字符串,要返回的字段和类型.它仍然会返回Object数组,但是此时不再使用ResultSetMetdata,而是明确的将ID,NAME和BIRTHDATE 按照Long, String和Short类型从resultset中取出。

同时,也指明了就算query 是使用*来查询的,可能获得超过列出的这三个字段,也仅仅会返回这三个字段。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

∙Hibernate优化方法解析∙ 2009-06-16 16:27 hulongzhou hulongzhou博客我要评论(0)本文对Hibernate优化方法进行了总结、介绍和解析,文章分为五个方面:批量修改和删除、使用SQL执行批量操作、提升数据库查询的性能、使用正确的抓取策略和查询性能提升小结五个部分。

Hibernate优化方法一:批量修改和删除在Hibernate 2中,如果需要对任何数据进行修改和删除操作,都需要先执行查询操作,在得到要修改或者删除的数据后,再对该数据进行相应的操作处理。

在数据量少的情况下采用这种处理方式没有问题,但需要处理大量数据的时候就可能存在以下的问题:◆占用大量的内存。

◆需要多次执行update/delete语句,而每次执行只能处理一条数据。

以上两个问题的出现会严重影响系统的性能。

因此,在Hibernate 3中引入了用于批量更新或者删除数据的HQL语句。

这样,开发人员就可以一次更新或者删除多条记录,而不用每次都一个一个地修改或者删除记录了。

如果要删除所有的User对象(也就是User对象所对应表中的记录),则可以直接使用下面的HQL语句:delete User而在执行这个HQL语句时,需要调用Query对象的executeUpdate()方法,具体的实例如下所示:String HQL="delete User";Query query=session.createQuery(HQL);int size=query.executeUpdate();采用这种方式进行数据的修改和删除时与直接使用JDBC的方式在性能上相差无几,是推荐使用的正确方法。

如果不能采用HQL语句进行大量数据的修改,也就是说只能使用取出再修改的方式时,也会遇到批量插入时的内存溢出问题,所以也要采用上面所提供的处理方法来进行类似的处理。

Hibernate优化方法二:使用SQL执行批量操作在进行批量插入、修改和删除操作时,直接使用JDBC来执行原生态的SQL语句无疑会获得最佳的性能,这是因为在处理的过程中省略或者简化了以下处理内容:● HQL语句到SQL语句的转换。

● Java对象的初始化。

● Java对象的缓存处理。

但是在直接使用JDBC执行SQL语句时,有一个最重要的问题就是要处理缓存中的Java 对象。

因为通过这种底层方式对数据的修改将不能通知缓存去进行相应的更新操作,以保证缓存中的对象与数据库中的数据是一致的。

Hibernate优化方法三:提升数据库查询的性能数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的。

1 、SQL语句的优化使用正确的SQL语句可以在很大程度上提高系统的查询性能。

获得同样数据而采用不同方式的SQL语句在性能上的差距可能是十分巨大的。

由于Hibernate是对JDBC的封装,SQL语句的产生都是动态由Hibernate自动完成的。

Hibernate产生SQL语句的方式有两种:一种是通过开发人员编写的HQL语句来生成,另一种是依据开发人员对关联对象的访问来自动生成相应的SQL语句。

至于使用什么样的SQL语句可以获得更好的性能要依据数据库的结构以及所要获取数据的具体情况来进行处理。

在确定了所要执行的SQL语句后,可以通过以下三个方面来影响Hibernate所生成的SQL语句:◆HQL语句的书写方法。

◆查询时所使用的查询方法。

◆对象关联时所使用的抓取策略。

2 、使用正确的查询方法在前面已经介绍过,执行数据查询功能的基本方法有两种:一种是得到单个持久化对象的get()方法和load()方法,另一种是Query对象的list()方法和iterator()方法。

在开发中应该依据不同的情况选用正确的方法。

get()方法和load()方法的区别在于对二级缓存的使用上。

load()方法会使用二级缓存,而get()方法在一级缓存没有找到的情况下会直接查询数据库,不会去二级缓存中查找。

在使用中,对使用了二级缓存的对象进行查询时最好使用load()方法,以充分利用二级缓存来提高检索的效率。

list()方法和iterator()方法之间的区别可以从以下几个方面来进行比较。

◆执行的查询不同list()方法在执行时,是直接运行查询结果所需要的查询语句,而iterator()方法则是先执行得到对象ID的查询,然后再根据每个ID值去取得所要查询的对象。

因此,对于list()方式的查询通常只会执行一个SQL语句,而对于iterator()方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数)。

iterator()方法只是可能执行N+1条数据,具体执行SQL语句的数量取决于缓存的情况以及对结果集的访问情况。

◆缓存的使用list()方法只能使用二级缓存中的查询缓存,而无法使用二级缓存对单个对象的缓存(但是会把查询出的对象放入二级缓存中)。

所以,除非重复执行相同的查询操作,否则无法利用缓存的机制来提高查询的效率。

iterator()方法则可以充分利用二级缓存,在根据ID检索对象的时候会首先到缓存中查找,只有在找不到的情况下才会执行相应的查询语句。

所以,缓存中对象的存在与否会影响到SQL语句的执行数量。

◆对于结果集的处理方法不同list()方法会一次获得所有的结果集对象,而且它会依据查询的结果初始化所有的结果集对象。

这在结果集非常大的时候必然会占据非常多的内存,甚至会造成内存溢出情况的发生。

iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。

因此在访问中可以控制缓存中对象的数量,以避免占用过多缓存,导致内存溢出情况的发生。

使用iterator()方法的另外一个好处是,如果只需要结果集中的部分记录,那么没有被用到的结果对象根本不会被初始化。

所以,对结果集的访问情况也是调用iterator()方法时执行数据库SQL语句多少的一个因素。

所以,在使用Query对象执行数据查询时应该从以上几个方面去考虑使用何种方法来执行数据库的查询操作。

Hibernate优化方法四:使用正确的抓取策略所谓抓取策略(fetching strategy)是指当应用程序需要利用关联关系进行对象获取的时候,Hibernate获取关联对象的策略。

抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL或条件查询中声明。

Hibernate 3定义了以下几种抓取策略。

连接抓取(Join fetching)连接抓取是指Hibernate在获得关联对象时会在SELECT语句中使用外连接的方式来获得关联对象。

查询抓取(Select fetching)查询抓取是指Hibernate通过另外一条SELECT语句来抓取当前对象的关联对象的方式。

这也是通过外键的方式来执行数据库的查询。

与连接抓取的区别在于,通常情况下这个SELECT语句不是立即执行的,而是在访问到关联对象的时候才会执行。

子查询抓取(Subselect fetching)子查询抓取也是指Hibernate通过另外一条SELECT语句来抓取当前对象的关联对象的方式。

与查询抓取的区别在于它所采用的SELECT语句的方式为子查询,而不是通过外连接。

批量抓取(Batch fetching)批量抓取是对查询抓取的优化,它会依据主键或者外键的列表来通过单条SELECT语句实现管理对象的批量抓取。

以上介绍的是Hibernate 3所提供的抓取策略,也就是抓取关联对象的手段。

为了提升系统的性能,在抓取关联对象的时机上,还有以下一些选择。

立即抓取(Immediate fetching)立即抓取是指宿主对象被加载时,它所关联的对象也会被立即加载。

延迟集合抓取(Lazy collection fetching)延迟集合抓取是指在加载宿主对象时,并不立即加载它所关联的对象,而是到应用程序访问关联对象的时候才抓取关联对象。

这是集合关联对象的默认行为。

延迟代理抓取(Lazy proxy fetching)延迟代理抓取是指在返回单值关联对象的情况下,并不在对其进行get操作时抓取,而是直到调用其某个方法的时候才会抓取这个对象。

延迟属性加载(Lazy attribute fetching)延迟属性加载是指在关联对象被访问的时候才进行关联对象的抓取。

介绍了Hibernate所提供的关联对象的抓取方法和抓取时机,这两个方面的因素都会影响Hibernate的抓取行为,最重要的是要清楚这两方面的影响是不同的,不要将这两个因素混淆,在开发中要结合实际情况选用正确的抓取策略和合适的抓取时机。

◆抓取时机的选择在Hibernate 3中,对于集合类型的关联在默认情况下会使用延迟集合加载的抓取时机,而对于返回单值类型的关联在默认情况下会使用延迟代理抓取的抓取时机。

对于立即抓取在开发中很少被用到,因为这很可能会造成不必要的数据库操作,从而影响系统的性能。

当宿主对象和关联对象总是被同时访问的时候才有可能会用到这种抓取时机。

另外,使用立即连接抓取可以通过外连接来减少查询SQL语句的数量,所以,也会在某些特殊的情况下使用。

然而,延迟加载又会面临另外一个问题,如果在Session关闭前关联对象没有被实例化,那么在访问关联对象的时候就会抛出异常。

处理的方法就是在事务提交之前就完成对关联对象的访问。

所以,在通常情况下都会使用延迟的方式来抓取关联的对象。

因为每个立即抓取都会导致关联对象的立即实例化,太多的立即抓取关联会导致大量的对象被实例化,从而占用过多的内存资源。

◆抓取策略的选取对于抓取策略的选取将影响到抓取关联对象的方式,也就是抓取关联对象时所执行的SQL语句。

这就要根据实际的业务需求、数据的数量以及数据库的结构来进行选择了。

在这里需要注意的是,通常情况下都会在执行查询的时候针对每个查询来指定对其合适的抓取策略。

指定抓取策略的方法如下所示:User user = (User) session.createCriteria(User.class).setFetchMode("permissions", FetchMode.JOIN).add( Restrictions.idEq(userId) ).uniqueResult();Hibernate优化方法五:查询性能提升小结在本小节中介绍了查询性能提升的方法,关键是如何通过优化SQL语句来提升系统的查询性能。

查询方法和抓取策略的影响也是通过执行查询方式和SQL语句的多少来改变系统的性能的。

这些都属于开发人员所应该掌握的基本技能,避免由于开发不当而导致系统性能的低下。

在性能调整中,除了前面介绍的执行SQL语句的因素外,对于缓存的使用也会影响系统的性能。

相关文档
最新文档