`
a137268431
  • 浏览: 157662 次
文章分类
社区版块
存档分类
最新评论

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;
}

}
);
}
分享到:
评论

相关推荐

    Hql语句注意事项总结

    在使用Hibernate的HQL(Hibernate Query Language)时,有一些关键的注意事项需要理解并遵循,以确保查询的正确性和效率。以下是对这些要点的详细说明: 1. **在Hql中使用`group by`的问题** - **统计函数与分组**...

    HQL批量插入、更新和删除

    - **批量删除**:对于批量删除操作,可以使用HQL的`DELETE`语句。例如,要删除所有状态为“无效”的用户记录,可以执行如下HQL语句: ```java String hql = "DELETE User WHERE status = :status"; Query query =...

    HibernateTemplate的用法总结

    2. **`void deleteAll(Collection entities)`**:用于批量删除集合中的所有对象实例。当需要一次性删除多个实体时,此方法非常有用。 3. **`List find(String queryString)`**:执行HQL查询语句并返回结果列表。这...

    hibernate 的开发注意项与性能调优

    #### 七、其他注意事项 1. **版本管理**:了解并合理使用Hibernate提供的版本控制机制,可以提高数据一致性。 2. **异常处理**:正确处理Hibernate抛出的异常,避免由于错误的异常处理导致的问题。 #### 八、...

    struts2hibernate

    **优化与注意事项** 1. **性能优化**:批量操作时,尽量减少与数据库的交互次数,避免频繁开启和关闭Session,可以考虑使用批处理操作,比如设置合适的批处理大小。 2. **错误处理**:批量操作时,可能出现部分数据...

    Hibernate(C#/JAVA)教程

    3. 异步操作和多线程:在并发环境中使用 NHibernate 的注意事项和最佳实践。 4. 分布式缓存:使用第三方缓存服务(如 Memcached 或 Redis)与 NHibernate 集成以提高应用性能。 5. 扩展 NHibernate:如何自定义拦截...

    Hibernate Developer Guide

    - 删除实体的方法和注意事项。 **3.3 不初始化数据获得实体引用** - 如何在不加载实体数据的情况下获得实体引用,这对于减少内存消耗很有帮助。 **3.4 初始化数据后获得实体** - 在需要实体数据的情况下如何正确...

    精通Hibernate.精通Hibernate.

    #### 五、最佳实践与注意事项 - **实体类设计**:遵循单一职责原则,一个实体类只对应一个表。 - **异常处理**:正确处理Hibernate抛出的异常,区分事务异常和运行时异常。 - **事务管理**:在适当的地方开启和提交...

    Nhibernet代码生成器

    **注意事项**: 虽然代码生成器简化了工作流程,但并不意味着开发者可以完全依赖它。理解Nhibernate的工作机制,以及如何调整和优化映射文件,对于解决复杂问题和性能调优至关重要。因此,尽管工具提供了便利,但...

    hibernate-entitymanager-3.3.0.GA

    7. **注意事项** - **空指针异常**:处理null值时要格外小心,避免因未初始化的实体属性导致的问题。 - **事务边界**:确保事务的正确性,防止数据不一致。 - **性能监控**:定期评估和优化数据库访问性能,如...

    学生成绩管理系统(SSH+MYSQL).zip

    开发流程与注意事项: 在开发过程中,通常遵循以下步骤: 1. 设计数据库模型,创建相应的表结构。 2. 使用Hibernate配置实体类与数据库表的映射关系。 3. 实现Spring的配置,定义Bean和事务管理规则。 4. 创建...

    hibernate-3[1].2.6.ga.zip

    5. **注意事项** - **版本兼容性**:Hibernate 3.2.6 GA可能不兼容较新的JDBC驱动或Java版本,升级前需检查兼容性。 - **内存泄漏**:谨慎使用Session的openCriteria()和createCriteria(),避免导致内存泄漏。 - ...

    Hibernate开发手册

    - **注意事项**:`load()` 和 `get()` 的区别在于 `load()` 会在找不到对象时抛出异常,而 `get()` 返回 null。 #### 四、配置与初始化 - **Configuration 配置类**:用于读取配置文件并建立 Hibernate 的环境设置...

    SSH框架面试题.pdf

    HQL(Hibernate Query Language)是Hibernate提供的一种面向对象的查询语言,类似于SQL但更接近于面向对象编程风格。它可以用来执行复杂的查询操作,而无需编写复杂的SQL语句。 19. **在Hibernate中Criteria API的...

Global site tag (gtag.js) - Google Analytics