`
ihuashao
  • 浏览: 4721908 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Hql语句注意事项总结

阅读更多

Hql语句注意事项总结

1.在Hql中使用group by的问题
(1)使用统计函数作为输出结果
selectsum(total),sum(totalup)fromADwhereaid=?andfid=?andvdatetime>=?andvdatetime<=?groupbyaid

(2)使用统计函数作为查询约束条件
selectuidfromMMgroupbyuidhavingcount(*)>?andmin(m_date)<?

(3)使用group by 时有关约束条件的问题

如果约束条件是单个字段,则必须用where,并且where要放在group by之前,如:

selectcitynamefromMIwherevdatetime>=?andvdatetime<?groupbycityname

如果约束条件是统计函数,则要使用having,并且having要放在group by之后,如:(2)

(4)其实,在某些场合,group by可以用distinct代替,如以下两条语句功能相同:

selectcitynamefromMIwherevdatetime>=?andvdatetime<?groupbycityname
selectdistinctcitynamefromMIwherevdatetime>=?andvdatetime<?

2.在count()中使用别名问题

selectcount(*)fromMipMailconfigasMipMailconfigwhereMipMailconfig.uid<>?andMipMailconfig.email=?--正确
selectcount(MipMailconfig.*)fromMipMailconfigasMipMailconfigwhereMipMailconfig.uid<>?andMipMailconfig.email=?--错误
3.关于Integer和Long的问题
在Hibernate3.2中,所有的计数都要用Long,用Integer的话就会有问题.
Listlist=this.find("selectcount(*)fromMMCasMMCwhereMMC.uid<>?andMMC.email=?",newString[]...{uid,email});
if(list!=null&&!list.isEmpty())...{
longcount=Long.parseLong(list.get(0).toString());
if(count>0)
returntrue;
else
returnfalse;
}



4.关于参数是数组的问题
在实际的工作中,经常遇到这种情况:
(1)要删除一批数据,传过来一个数组,
(2)或者要查询一批数据,查询条件也是传过来一个数组,
这种情况下如何进行处理?
(1)查询数据,查询条件为一个数组,可以有如下两个方法:
<1>直接拼Hql语句
String[]ids=...{"1","2","3"};
Stringstr
="";
for(inti=0;i<ids.length;i++)...{
str
+="'"+ids[i]+"'";
if(i!=(ids.length-1))
str
+=",";
}


Listlist;
list
=appinfoManager.find("fromAppinfowhereidin("+str+")");
if(list!=null)...{
for(inti=0;i<list.size();i++)...{
Appinfoapp
=(Appinfo)list.get(i);
System.out.println(app.getAppname());
}

}

System.out.println(
"共有"+list.size()+"条记录");
<2>利用回调函数处理
publicList getApList()...{
return(List)this.getHibernateTemplate().execute(newHibernateCallback()...{

publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException...{
String[]ids
=...{"1","2","3"};
Stringhql
="fromAppinfowhereidin(:ids)";
Queryquery
=session.createQuery(hql);
Listlist
=query.setParameterList("ids",ids).list();
returnlist;
}

}
);
}
(2)删除数据,参数为数组,利用回调函数
publicvoiddelInArray()...{
this.getHibernateTemplate().execute(newHibernateCallback()...{

publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException...{
String[]ids
=...{"1","2","3"};
Stringhql
="deleteAppinfowhereidin(:ids)";
Queryquery
=session.createQuery(hql);
query.setParameterList(
"ids",ids).executeUpdate();
returnnull;
}

}
);
}
分享到:
评论

相关推荐

    HibernateHQL级联注意事项[归类].pdf

    文档中提到的三条HQL语句没有给出具体内容,但通常会涉及如何通过级联查询获取员工及其所属部门的信息。分析这些语句的差异,可以进一步理解HQL如何处理关联对象的查询。 总结,掌握Hibernate HQL级联查询的关键...

    HQL语句大全

    ### HQL语句大全知识点详解 #### 一、HQL简介 HQL(Hibernate Query Language)是一种面向对象的查询语言,由Hibernate框架提供。虽然它的语法结构与SQL类似,但HQL是专为面向对象查询设计的,能够很好地处理继承、...

    hibernate所用到HQL经典语句大全

    **注意事项**: - 当使用`NEW`语法返回实体对象时,实体类`Cat`必须包含一个接受两个参数(`String name`, `Date createDate`)的公共构造方法。 - 查询结果将自动转换为对应的实体类对象。 #### 二、条件查询和...

    HQL批量插入、更新和删除

    2. **使用原生SQL的注意事项**: - 在使用原生SQL时,需要确保参数绑定的安全性,防止SQL注入攻击。 - 需要注意类型转换和数据一致性问题,确保数据的正确性。 - 直接使用原生SQL时,可能需要手动管理事务,以...

    hql总条数.txt

    #### 性能优化与注意事项 当使用HQL查询总条数时,需要注意以下几点: - **性能优化**:对于大数据量的表,直接使用`count(*)`可能会导致性能问题,尤其是当表中有大量数据时。可以考虑使用索引、分区等技术来优化...

    Hql多结果集

    执行上述HQL语句后,返回的结果将会是一个`List`集合,其中每个元素都是一个对应的实体对象。 ##### 2. 查询单个实体 如果只需要查询表中的某一个实体,可以通过添加`WHERE`子句来实现: ```hql FROM 实体名 ...

    Java Hibernate中使用HQL语句进行数据库查询的要点解析

    7. **注意事项**: 在编写HQL时,需注意查询的效率和资源消耗,避免造成内存溢出或数据库压力过大。同时,理解Hibernate的自动持久化和事务管理机制,以确保数据的一致性和完整性。 综上所述,理解和掌握HQL在Java...

    hibernate的HQL的模糊查询

    五、注意事项 - 使用HQL模糊查询时,注意防止SQL注入,确保传入的参数是安全的。 - 大量的模糊查询可能导致性能问题,应合理设计索引并优化查询。 - 在处理大量数据时,考虑分页查询以提高效率。 综上所述,...

    HQL语言大全 跳楼分值

    HQL语句通常由以下几个部分组成: - **SELECT**:选择要查询的字段或对象。 - **FROM**:指定查询的实体类。 - **WHERE**:设置查询条件。 - **GROUP BY**:进行分组。 - **HAVING**:设置分组后的过滤条件。 - **...

    hql分页

    6. **注意事项** - 大规模分页时,避免使用`OFFSET`,因为它可能导致性能下降,尤其是在偏大的页码上。 - 考虑到查询效率,可以先计算总记录数,然后根据总页数和当前页计算出`setFirstResult()`的值。 通过以上...

    Hibernate-HQL-查询-Query资料

    - "HQL语句(结合实例).doc"则可能提供了具体的查询示例,帮助读者更好地理解和应用HQL。 通过学习这些文档,开发者可以掌握如何在Hibernate项目中高效地利用HQL进行数据查询,提升开发效率,同时保持代码的简洁...

    Hibernate中Sql语句

    ### Hibernate中使用SQL而非HQL语句的知识点详解 在Java开发中,Hibernate作为一个非常流行的ORM框架,提供了多种查询方式,其中就包括了HQL(Hibernate Query Language)和原生SQL查询。本文将针对给定代码片段中...

    Hibernate HQL查询 分页查询 模糊查询.docx

    #### 五、其他注意事项 1. **命名参数**: 在HQL查询中推荐使用命名参数而非位置参数,因为命名参数更易于理解和维护。 2. **性能优化**: 对于大型数据集,应考虑使用`setFirstResult`和`setMaxResults`进行分页查询...

    Hibernate查询语句写在配置文件中

    7. **注意事项**:虽然在配置文件中编写查询语句有其优势,但也应谨慎处理,因为过多的查询可能会使配置文件变得庞大且难以管理。适当的时候,将复杂的查询逻辑封装到 DAO(数据访问对象)层的 Java 类中也是推荐的...

    hibernate动态数据库改进版

    开发者可以通过字符串拼接动态生成HQL语句,实现动态查询。 2.3 Criteria与HQL结合 在复杂场景下,可以将Criteria与HQL结合,以达到更灵活的查询效果。例如,使用Criteria构造基本查询,然后用HQL处理更复杂的部分...

    Hibernate多表查询.txt

    ### 实践要点与注意事项 - **理解关联映射**:在多表查询中,正确理解和设置实体间的关联关系至关重要。这包括一对一、一对多和多对多等多种类型,不同的关联关系会影响查询语句的编写和执行效率。 - **优化查询...

    hive,性能调优,全方面提升认知

    在开始Hive性能调优之前,我们需要了解以下几个注意事项: 1. 数据倾斜是个问题,而不是数据量大。 2. Hive的复杂HQL语句会转换成多个MapReduce Job,并行或串行执行,Job数比较多的作业运行效率相对比较低。 3. ...

    蓝凌JAVA产品V16开发手册

    - **自我关联表HQL**:处理自我引用的实体关系时,使用特定的HQL语句结构。 - **多对多条件为对象情况**:当处理多对多关系时,采用更高效的方法。 - **获取Hibernate的session**: - 在DAO层中直接使用`super....

Global site tag (gtag.js) - Google Analytics