相信越来越多的web开发者,在持久层都采用了hibernate。hibernate 可以大大提高开发效率,同时对应项目的移植也有好处,但是同样也存在问题,大家在使用hibernate的时候很少去关心效率问题,但是这个就是一个打的问题,好多项目不成功就是项目中没有对hibernate熟悉的人,大家就是会简单的使用,所以再有些细节上的东西我们开发人员没有注意。
就拿hibernate来说吧,他支持hql查询,在我们组装sql语句时,需要注意几个问题:
1、要查询当然离不开数据库,我们建表时,默认的主键都是索引,这里要注意的就是关于建立单个索引和复合索引了。
具体的索引的hibernate中也是适用,我发现好多人用hibernate就很少提到索引这个概念了(用ibatis自己写sql就会关注索引字段,这个还是可以的额)
索引的引用规则都是适用的:
介绍下:单个索引就是出现索引字段作为条件就应用 ;
复合索引(假设是2个字段的复合索引),出现复合索引的第一个字段作为条件就应用;
出现复合索引的2个字段作为条件,这应用,如果没有出现复合索引的第一个字段则不应用;
由此我们需要为我们的数据库建立索引,记住复合索引是有顺序的 。
影响我们建立索引的条件还有就是业务(这个很重要) ,举个例子:如果有2个查询条件(性别、所在部门),倘若我们要建立符合索引,
那么我们应该将"所在部门"字段放在前面,"性别"放在后面,主要是因为,如果某个地方的查询条件只有"所在部门",也可以起作用。另外要注意,如果查询索引字段参与函数计算和like等,那么索引也不起作用。
2、 在我们写查询代码时,尽量对应各个表的已经存在索引写查询条件
[第一个查询条件尽量是单个索引,或者是复合索引的第一个字段] 。
3、还有就是大家再拼装查询语句时,传入的查询条件值尽量不要直接写在查询语句中,而是要以参数的方式提供即使用绑定参数,
这样,系统多次调用统一个查询时(比如:select * from TestVO where code = ? [不要写为 select * from TestVO where code = 'aaaa']) ,
条件值都是以参数的方式提供的,这样,多次查询虽然参数值不一样,但查询语句相同,数据库只有第一次才对查询语句进行编译,
以后则不在编译,所以性能会有提升。
用参数的方式还有一个好处是:如果你不是使用
Criteria criteria = openSession().createCriteria(**PO.class);
criteria.add(Restrictions.like( "name",convertDBString(name) ));
的方式,而是使用hibernate的hql的话,那么如果参数值为中文会有问题,用参数可以解决这个问题。
注: 使用绑定参数的优势:
我们为什么要使用绑定命名参数?任何一个事物的存在都是有其价
值的,具体到绑定参数对于HQL查询来说,主要有以下两个主要优势:
①、 可以利用数据库实施性能优化,因为对Hibernate来说在底层
使用的是PrepareStatement来完成查询,因此对于语法相同参数不同的
SQL语句,可以充分利用预编译SQL语句缓存,从而提升查询效率。
②、 可以防止SQL Injection安全漏洞的产生:
分享到:
相关推荐
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,从而避免了传统的JDBC编码方式带来的复杂性。本篇文章将...
1. HQL查询: HQL是一种面向对象的查询语言,类似于SQL。要查询`username`字段,可以编写如下HQL: ```java String hql = "SELECT username FROM User"; Query query = session.createQuery(hql); List<String> ...
本篇将详细讲解一个“超好用的Hibernate查询工具类”,以及如何利用它来提升开发效率。 首先,我们需要理解Hibernate的基本概念。Hibernate是一种持久化框架,它可以将Java对象映射到数据库表,从而避免了编写大量...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,从而提高开发效率。本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板...
【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...
1. **HQL(Hibernate Query Language)**: 类似于SQL,但面向对象。HQL允许你以类和属性的名称进行查询,而不是表和列。例如,如果你有一个`User`类,你可以这样查询所有用户: ```java Session session = ...
本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...
在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API...理解并熟练掌握这两种查询方式,将有助于提升Hibernate的使用效率和代码质量。
此外,通过使用`Scrollable ResultSet`,Hibernate还可以进一步优化不支持特定分页语法的数据库的查询效率。总之,Hibernate为开发者提供了强大的分页查询功能,极大地简化了开发过程中的复杂性。
总的来说,Hibernate通过其强大的ORM能力简化了Java与MySQL数据库的交互,提供了丰富的查询方式和事务管理机制,极大地提高了开发效率。掌握这些核心知识点,对于提升JavaEE项目的开发质量与效率有着重要作用。希望...
hibernate效率注意的几个问题,批量删除和批量更新建议用JDBC,这是一个原则,当然有的时候可能必须用Hibernate来批量更新和批量删除,那么这个时候我想说的就是,Hibernate批量更新和删除效率并非传说中的那么差,...
1. **HQL(Hibernate Query Language)** HQL是Hibernate的SQL方言,它是面向对象的查询语言,允许我们用类和对象的名字而不是表和列来写查询语句。HQL支持各种复杂的查询,如连接查询、分组查询、子查询等。例如,...
本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了强大的对象关系映射(ORM)功能,使得开发者可以方便地在Java对象和数据库表之间...在实际开发中,合理利用本地SQL查询,能有效提高效率,优化性能。
### 基于Hibernate的效率查询的研究和应用 #### 摘要 本文详细探讨了当前流行的Hibernate映射框架,并结合某通信企业的电子运行维护系统(E2OMS)的实际开发过程,提出了一个基于Hibernate的数据持久层解决方案。该...
标题“hibernate的多态查询”指的是在Hibernate框架中,如何进行涉及不同子类的对象查询,这是ORM(对象关系映射)中的一个重要特性,旨在提高代码的灵活性和可扩展性。多态查询允许我们编写一次查询,而无需关心...
1. **Hibernate的数学函数**:如`max()`, `min()`, `sum()`, `avg()`和`count()`,它们用于对数据进行聚合操作,例如找出最大值、最小值、总和或平均值。 2. **字符串函数**:如`concat()`, `lower()`, `upper()`和...
通过 Hibernate,开发者可以避免编写大量的 SQL 代码,提高开发效率。 **多表连接查询** 在实际业务中,往往需要处理多个关联表的数据。Hibernate 支持多种方式来实现多表连接查询,包括 HQL(Hibernate Query ...