`
henghengdh
  • 浏览: 157507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DML风格的批量更新/删除(转)

阅读更多
转自:http://javaligang.blog.51cto.com/5026500/912874

Hibernate提供的HQL语句也支持批量的UPDATE和DELETE语法。
批量UPDATE 和 DELETE语句的语法格式如下:
UPDATE | DELETE FROM? <ClassName>  [WHERE WHERE_CONDITIONS]
关于上面的语法格式有如下4点值得注意:
Ø  在FROM子句中,FROM关键字是可选的,即完全可以不写FROM关键字。
Ø  在FROM子句中只能有一个类名,该类名不能有别名。
Ø  不能在批量HQL语句中使用连接,显式或者隐式的都不行。但可以在WHERE子句中使用子查询。
Ø  整个WHERE子句是可选的。WHERE子句的语法和HQL语句中WHERE子句的语法完全相同。
假设对于上面需要批量更改User类实例的name属性,可以采用如下代码片段完成。
程序清单:codes\06\6.3\batchUpdate2\src\lee\UserManager.java

private void updateUsers()throws Exception  
{  
    //打开Session  
    Session session = HibernateUtil.currentSession();  
    //开始事务  
    Transaction tx = session.beginTransaction();  
    //定义批量更新的HQL语句  
    String hqlUpdate = "update User set name = :newName";  
    //执行更新  
    int updatedEntities = session.createQuery( hqlUpdate )  
        .setString( "newName", "新名字" )  
        .executeUpdate();  
    //提交事务  
    tx.commit();  
    HibernateUtil.closeSession();  
}  


从上面的代码中可以看出,这种语法非常类似于PreparedStatement的executeUpdate()语法,实际上,HQL的这种批量更新就是直接借鉴了SQL语法的UPDATE语句。
注意:

使用这种批量更新语法时,通常只需要执行一次SQL的UPDATE语句,就可以完成所有满足条件记录的更新。但也可能需要执行多条UPDATE语句,这是因为有继承映射等特殊情况,例如有一个Person实例,它有Customer子类实例。当批量更新Person实例时,也需要更新Customer实例。如果采用joined-subclass或union-subclass映射策略时,Person和Customer实例保存在不同的表中,因此可能需要多条UPDATE语句。

执行一个HQL DELETE,同样使用 Query.executeUpdate() 方法,下面是一次删除上面全部记录的代码片段。
程序清单:codes\06\6.3\batchDelete\src\lee\UserManager.java

private void deleteUsers()throws Exception  
{  
    //打开Session  
    Session session = HibernateUtil.currentSession();  
    //开始事务  
    Transaction tx = session.beginTransaction();  
    //定义批量删除的HQL语句  
    String hqlDelete = "delete User";  
    //执行删除  
    int deletedEntities = session.createQuery( hqlDelete )  
        .executeUpdate();  
    //提交事务  
    tx.commit();  
    HibernateUtil.closeSession();  
}  

Query.executeUpdate()方法返回一个整型值,该值是受此操作影响的记录数量。我们知道,Hibernate的底层操作实际上是由JDBC完成的,因此,如果有批量UPDATE或DELETE操作被转换成多条UPDATE或DELETE语句,该方法将只能返回最后一条SQL语句影响的记录行数。
分享到:
评论

相关推荐

    PL/SQL Developer 7.0 用户指南

    6. **更新数据库**:执行更新、插入、删除等DML操作,修改数据库内容。 7. **保存SQL脚本**:将常用SQL语句保存为脚本,提高日常工作效率。 七、命令窗口功能 1. **输入SQL语句和命令**:支持直接输入SQL语句或...

    PL/sql中文教程

    - **更新数据库**:执行INSERT、UPDATE、DELETE等DML操作,改变数据库状态。 - **查看和编辑XMLTYPE列**:处理XML数据格式的列,满足特定业务需求。 - **直接查询导出**:快速导出查询结果,方便数据共享和备份。 - ...

    PL/SQL Developer 9.0用户指南

    - **更新数据库**:执行DML语句(如INSERT、UPDATE、DELETE)来修改数据库中的数据。 - **查看和编辑XMLTYPE列**:操作存储在XMLTYPE列中的数据。 - **直接查询导出**:将查询结果导出到文件或其他格式。 - **保存...

    PL/SQL中文使用说明

    - 支持批量更新功能。 ##### 6.7 查看和编辑XMLTYPE列 - 支持查看和编辑数据库中的XML数据类型列。 - 适用于处理复杂的数据结构。 ##### 6.8 直接查询导出 - 支持将查询结果导出为文件,如CSV、Excel等格式。 - ...

    Oracle Developer:第2章 Oracle Developer对象综述.pdf

    - Array Size:数组大小,指定DML操作处理记录的批量大小。 7. 集成与扩展: - ActiveX Bean:ActiveX组件,用于在Oracle Developer中集成ActiveX对象。 - Java Bean:Java组件,用于在Oracle Developer中集成...

    pl/sql中文版用户使用手册

    - 创建包含一系列命令的文件,方便批量执行。 - **支持命令**: - 包括各种PL/SQL和SQL命令,如DDL、DML等。 #### 九、创建和修改非PL/SQL对象 - **表定义编辑器**: - 创建和管理数据库表。 - 设置列属性、...

    PL/SQL Developer 中文手册

    - 创建包含多个命令的文件,用于批量执行。 3. **支持命令** - 提供了一系列内置命令,增强IDE的功能。 #### 八、创建与修改非PL/SQL对象 1. **表定义编辑器** - 创建和管理数据库表。 2. **序列定义编辑器** -...

    hibernate3.6 文档(pdf 格式)

    - **DML 风格操作**:展示如何使用类似 DML 的风格执行批量操作。 #### 十六、HQL:Hibernate 查询语言 - **大小写敏感性**:解释 HQL 是否区分大小写。 - **from 子句**:介绍如何使用 from 子句指定查询的起点。 ...

    PLSQL Developer 7.0中文用户手册

    - **更新数据库**:直接执行INSERT、UPDATE、DELETE等DML语句更新数据库。 - **查看和编辑XMLTYPE列**:支持查看和编辑XMLTYPE类型的列。 - **直接查询导出**:将查询结果导出为其他格式。 - **创建标准查询**:保存...

    plsql developer 7.0教程

    **更新数据库**:指导如何通过PL/SQL Developer执行DML(数据操纵语言)操作,如INSERT、UPDATE、DELETE等,对数据库进行数据更新。 **查看和编辑XMLTYPE列**:介绍了如何在PL/SQL Developer中处理XML数据类型,...

    Hibernate 中文 html 帮助文档

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6...

    Hibernate参考文档

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6...

    Hibernate中文详细学习文档

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select...

    hibernate 体系结构与配置 参考文档(html)

    DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 ...

    Hibernate+中文文档

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select...

    plsql+developer+7.0+最新中文手册

    - 直接在 IDE 中就可以执行 DML(数据操纵语言)语句,更新数据库中的数据。 ##### 6.7 查看和编辑 XMLTYPE 列 - 支持对 XML 类型的数据进行查看和编辑,适应现代应用的需求。 ##### 6.8 直接查询导出 - 支持将...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select...

    plsql_developer教程.pdf

    - 支持执行DML语句,如INSERT、UPDATE等。 - 直观地更新数据库中的数据。 ##### 6.7 查看和编辑XMLTYPE列 - 支持查看和编辑XML类型的列。 - 方便处理复杂的XML数据。 ##### 6.8 直接查询导出 - 支持将查询结果直接...

    HibernateAPI中文版.chm

    13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select...

Global site tag (gtag.js) - Google Analytics