`
picluo
  • 浏览: 340492 次
  • 性别: Icon_minigender_1
  • 来自: 大力亚
社区版块
存档分类
最新评论

Hibernate插入、查询、删除操作 HQL

阅读更多

Hibernate的所有的操作都是通过Session完成的.

基本步骤如下:

1:通过配置文件得到SessionFactory:

     SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

2:通过SessionFactory 得到一个Session

     Session session=sessionFactory.openSession();

3:通过session进行插入,删除,修改以及查询.

    插入例子:(1)声明一个事务;(2)Session执行save()操作;(3)事务提交;(4)关闭Session,可选.                   
             public void insert(Person p){
   Transaction tran=session.beginTransaction();
   session.save(p);              
                tran.commit(); 
//   session.close();             
             }     
    修改例子:(1)声明一个事务;(2)Session执行update()操作;(3)事务提交;(4)关闭Session,可选.

             public void update(Person p){

   Transaction tran=session.beginTransaction();

   session.update(p);

   tran.commit();

//   session.close();

   }

    删除例子(主键删除,推荐使用):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执行Query的executeUpdate()操作;(5)Session事务提交

     public void delete(int id){

   String hql="delete Person as p where p.id=?";

   Query query=session.createQuery(hql);

   query.setInteger(0,id);

   query.executeUpdate();

   session.beginTransaction().commit();

            }

   删除例子(对象删除):(1)声明一个事务;(2)Session执行delete()操作;(3)事务提交;(4)关闭Session,可选.
    public void delete(Person p){

   Transaction tran = session.beginTransaction();

   session.delete(p);  
   tran.commit();

   session.close();  
   }

   查询例子:(跟删除差不多) 查询语句不需要事务提交

(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;

   public Persion queryById(int id){

   String hql="from Person as p where p.id=?";

   Query query=session.createQuery();
 
   query.setInteger(0,id);

   List rsList=query.list();

   iterator it=rsList.iterator();

   Person person=null;

   while(it.haseNext()){

     person=(Person)it.next();

    }

   return person;

   }
session.delete()- -
session.delete(obj)将obj的状态变为transient。两种情况
1)obj是session的cache里边的cache没有的,比如:
         session.delete(new Employee(4));
2)obj存在于session的cache中,比如:
         Employee employee = (Employee)session.load(Employee.class, new Integer(4));
         session.delete(employee);

这两种情况都是允许的,hibernate都会发送一条delete语句给数据库。

delete执行之后,如果调用了session.load(), 又可以分为两种情况:
1)在session.flush()之前,如:
           tx.beginTransaction();
    session.delete(new Employee(4));
           session.load(Employee.class, new Integer(4));//发生在session.flush()之前
           tx.commit();
      那么hibernate会抛出ObjectDeletedException:The object with that id was deleted:

2)在session.flush()之后,如:
           tx.beginTransaction();
    session.delete(new Employee(4));
           session.load(Employee.class, new Integer(4));
           tx.commit();

           tx.beginTransaction();
           session.load(Employee.class, new Integer(4));//同一个session中,上面的tx.commit()将session flush了一次。
           tx.commit();
      那么这个时候hibernate仅仅会抛出ObjectNotFoundException:No row with the give...
表示找不到该object。如果第二个tx里边采用session.get()也就不会抛出exception了。

delete执行之后,如果调用了session.save(obj):
           tx.beginTransaction();
           Employee employee = (Employee)session.load(Employee.class, new Integer(4));
     session.delete(employee);
           System.out.println(employee);
           session.save(employee);
           System.out.println(employee);
           tx.commit();
      这种情况是完全合理的,合法的,
      delete将employee从persistent的状态变为transient的状态。
      save将employee从transient状态变为persistent的状态。
      save一个被delete的obj的时候,在save处hibernate强制执行session.flush(),发送delete语句,然后按照常规的save流程来进行。为什么要这么做,还没有完全想明白。

delete执行之后,如果对obj对象属性的修改,tx.commit()时不会进行dirtyChecking。

4
3
分享到:
评论
1 楼 wangtao0501 2009-12-23  
“主键删除,推荐使用”和对象删除的区别在哪,是性能上吗

相关推荐

    hibernate查询之HQLhibernate查询之HQL

    Hibernate查询之HQL是ORM(对象关系映射)框架Hibernate中的一个重要组成部分,它是一种面向对象的查询语言,与SQL有着显著的区别。HQL允许开发者使用类名和属性而不是表名和列名进行查询,从而更好地适应面向对象的...

    Hibernate_NSQL&HQL增删改操作

    在Hibernate框架中,进行数据库操作时,开发者可以选择使用两种不同的查询语言:NSQL(Native SQL)和HQL(Hibernate Query Language)。这两种查询方式各有优势,在不同的场景下使用可以达到最佳的效果。 ##### 一...

    HQL批量插入、更新和删除

    HQL是Hibernate框架中的一个核心特性,它允许开发者以面向对象的方式编写查询语句,从而简化了数据库操作过程。 #### 二、HQL批量插入 在批量插入数据时,需要注意内存管理问题。如果一次性插入大量数据,可能会...

    hql批量删除

    Hibernate查询语言(HQL)是一种面向对象的查询语言,它允许开发者以面向对象的方式来操作数据库中的数据。HQL与SQL有些相似,但是它是基于类和属性而非数据库表和列的。HQL是Hibernate框架的核心组件之一,它支持...

    HQL查询语言基础知识 + 插入,查询,更新, 代码集

    本教程将深入探讨HQL的基础知识,包括插入、查询和更新操作,并提供相关代码示例。 1. **HQL简介** HQL是Hibernate的核心组成部分,允许开发者以面向对象的方式来执行数据库查询。与SQL不同,HQL基于对象,而不是...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    HQL 是 Hibernate 自带的一种类似于 SQL 的查询语言,它可以用来执行各种数据库操作。HQL 支持面向对象的语法,使得查询更加直观。 - **标准 HQL** - **读取数据** - `select` 子句用于指定要获取的数据字段。 -...

    hibernate操作

    `get()`用于根据主键查询,`createQuery()`用于构建HQL(Hibernate Query Language)查询,`save()`用于插入新记录,而`delete()`则用于删除记录。注意在执行事务性操作时,需要使用`Transaction`来确保数据的一致性...

    hibernate数据库相关操作步骤

    - 使用`Session`的`createQuery()`或`createCriteria()`方法执行HQL(Hibernate查询语言)或SQL查询。 - `Criteria`查询提供了更面向对象的查询方式,可以方便地进行条件、排序和分页操作。 6. **事务管理** - ...

    超好用的hibernate查询工具类

    6. **批量操作**:提供批量插入、更新或删除的方法,比如`public void batchSave(List<T> entities)`,这在处理大量数据时可以大大提高效率。 7. **缓存管理**:Hibernate支持第二级缓存,工具类可以封装缓存的启用...

    Hibernate操作数据库的方法

    - **查询操作**:使用Session的`createQuery()`方法来执行HQL(Hibernate Query Language)查询,或者通过`get()`方法来根据ID查询单个对象。 一个典型的插入和更新操作示例是: ```java // 获取Session实例 ...

    Hibernate中查询的法方

    在本文中,我们将深入探讨Hibernate中的一些基本查询方法,这对于初学者掌握Hibernate进行数据操作非常有帮助。 1. **保存(Save)** Hibernate提供了`save()`方法来保存一个持久化对象到数据库。例如,如果有一个...

    hibernate代码优化基于配置的多表查询

    例如,使用`Session.flush()`和`Session.clear()`控制事务边界,或配置`hibernate.jdbc.batch_size`来批量插入、更新和删除数据。 7. **避免N+1查询问题**: 当遍历一个集合并访问其关联属性时,可能会触发多次...

    Hibernate数据查询

    Hibernate提供了批量插入、更新和删除的方法,如`Session.saveOrUpdateAll()`和`Session.deleteAll()`,可以提高数据处理效率。 10. **查询优化** - 使用HQL或Criteria API而非原生SQL,以利用Hibernate的查询...

    HQL语句大全

    HQL支持各种查询操作,包括插入、删除、更新以及复杂的查询。 #### 插入数据:`insert`方法 在HQL中,插入数据通常通过`save`或`saveOrUpdate`方法实现。给定的代码示例展示了如何使用`save`方法来插入一个对象到...

    Java的Hibernate框架中用于操作数据库的HQL语句讲解

    Hibernate通过HQL(Hibernate Query Language)提供了一种面向对象的查询语言,使得开发者能够以类和对象的方式而不是直接的SQL语法来操作数据库。 HQL与SQL的主要区别在于其面向对象的特性。在SQL中,我们直接操作...

    Hibernate通用数据库操作方法

    在上述代码中,我们看到了四个核心的 Hibernate 操作:插入(insert)、删除(delete)、更新(update)以及查询(select),这些都是在数据库操作中非常基础且重要的功能。 1. **插入(insert)**: `insert` ...

    SSH CRM 项目Hibernate操作数据字典源码(3)

    综上所述,SSH CRM项目中Hibernate操作数据字典的核心包括:实体类的设计、Session的使用、CRUD操作、查询方式(HQL和Criteria API)。通过熟练掌握这些知识点,开发者可以更高效地管理CRM项目中的数据字典,从而...

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    Hibernate是JPA的一个实现,提供了丰富的特性和优化,如缓存机制、第二级缓存、查询语言HQL等。 在审计日志的实现中,一种常见方法是使用AOP(面向切面编程)。AOP允许我们在不修改原有业务逻辑的情况下,添加额外...

    hibernate开发租房系统

    4. 查询:使用`Session`的`createQuery()`或`createCriteria()`方法构建HQL(Hibernate Query Language)或Criteria查询,获取数据。 四、Ajax技术 Ajax(Asynchronous JavaScript and XML)允许在不刷新整个页面的...

Global site tag (gtag.js) - Google Analytics