`
KeepCrazy
  • 浏览: 60723 次
社区版块
存档分类
最新评论

hibernate中的session操作

阅读更多
[size=large]

(附件中的blog.sql脚本添加了外键, 在执行非查询操作时可能会报错, 建议执行blog without foreign key.sql)

    web应用和hibernate中都有session, 它们都是对话, 但是浏览器与服务器之间的对话, 后者是程序和数据库之间的对话.

    先介绍几个hibernate中的基本类,在此基础之上再介绍利用session进行的基本数据操作.
 
API:
    Configuation, 用于加载hibernate.cfg.xml配置文件
     SessionFactory,用于创建session对象.
    Session,负责以对象方式对数据进行增(save(obj))、删(delete(obj))、改(update(obj))、查(load(), get())操作.

session操作:
     要利用session进行操作, 首先得获得session实例.附件中的HibernateUtil类是自己编写的,以较简单的方式封装了获得session的代码. 而HibernateSessionFactory是用Meclipse自动生成的, 不仅封装了获得session的代码, 还增加了线程单例特性.

    1.获得session实例
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static Session session;
    
    // 该过程要加载映射文件,是一个比较耗费资源的过程,所以放在静态代码块中执行
    static {
        Configuration config=new Configuration();
        config.configure("/hibernate.cfg.xml");
        SessionFactory sessionFactory=config.buildSessionFactory();
        session=sessionFactory.openSession();
    }
    
    public static Session getSession() {
        return session;
    }
}

2.查找:session查找有两种方法:load和get, 前者使用了延迟加载(后面会介绍), 后者没有.
   业务:查找id=1的Major, 输出名称.
   @Test
    public void testFindById(){
        Session session=HibernateUtil.getSession();
        
        //只能根据主键id查找
        //查找id=1的Major
        Major major=(Major) session.load(Major.class, 1);
        System.out.println(major.getName());
        
        //关闭session
        session.close();
    }



    查找操作不需要事务管理, 但增删改操作需要. Transaction类就是hibernate用于管理事务的类.

     3.添加
     业务:增加一个major:Chinese专业, 有100个学生.
 @Test
    public void testAdd(){
        Session session=HibernateUtil.getSession();
        Major major=new Major();
        major.setName("Chinese");
        major.setStuNum(100);
        
        //开启事务
        Transaction tx=session.beginTransaction();
        
        session.save(major);
        
        //提交事务
        tx.commit();
        session.close();
    }



    4.更新
     业务:将Chinese专业的人数改为150人

@Test
    public void testUpdate(){
        Session session=HibernateUtil.getSession();
        
        Major major=(Major) session.load(Major.class, 3);
        major.setStuNum(150);
        
        Transaction tx=session.beginTransaction();
        session.update(major);
        tx.commit();
    }


hibernate的session更新操作要先查找出需要更新的记录, 然后更改对象属性, 再调用update方法.若采用这样的更新方式:
        Major major =new Major();
        major.setId(3);
        major.setStuNum(150);
        ...
        session.update(major);
        则需要把对象所有的属性都设置好, 一个都不能落下, 否则在更新操作后没设置的属性就会被置空.若属性较多, 这种更新方法会非常麻烦.

    5. 删除
     业务需求:删除id=3的专业.
@Test
    public void delete(){
        Session session=HibernateUtil.getSession();
        
        //删除操作是根据主键id进行的, 不需要先查后删, 设置好id就行.
        Major major=new Major();
        major.setId(3);
        
        Transaction tx=session.beginTransaction();
        session.delete(major);
        tx.commit();
    }


增删改操作若没有调用事务, 操作无效.
下集预告:hibernate的延迟加载和对象状态.

[/size]
0
0
分享到:
评论

相关推荐

    hibernate中session的管理

    在Hibernate框架中,Session是与数据库交互的主要接口,它负责对象的持久化操作。然而,由于Session不是线程安全的,所以在多线程环境中管理Session就需要特别注意。本篇文章将详细探讨Hibernate中Session的管理,...

    Hibernate-nosession

    Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作,如保存、更新、删除和查询等。Session通常在一个事务中打开并在事务结束时关闭,以确保数据的一致性和完整性。 然而...

    重写hibernate的session简单增删改查

    在应用中,用自定义SessionFactory创建的Session替换原生的Session,这样就可以在增删改查操作中使用自定义功能。 三、文件列表分析 "重写Session增删改查"这个压缩包可能包含了以下内容: - 源码示例:展示如何...

    Hibernate(session管理)

    在Java的持久化框架中,Hibernate是一个非常重要的组件,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的核心概念——Session管理。 首先,...

    hibernate和session学习

    Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对数据库的操作,而无需编写大量的...

    Hibernate_Session_Transaction

    与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`Connection`更为相似,负责处理数据的持久化操作。`Session`具有短暂的生命周期,通常在一次数据库事务的开始和结束之间创建和关闭。 `Session`具有...

    Hibernate的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    这样,在查询操作中,Hibernate Session 将被正确地绑定到当前线程。 而在插入、修改和删除操作中,我们需要添加不同的注解: @Transactional(readOnly=false, propagation=Propagation.REQUIRED) public void ...

    hibernate session生命周期示例

    在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,简化了数据库操作。本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个...

    hibernate的session.flush

    3. **对象状态转换**:在`flush()`操作中,Hibernate可能将瞬态对象转换为持久化对象,或将持久化对象的状态更新到数据库。 4. **批量操作优化**:为了提高效率,`flush()`可能会合并多个小的更新或插入操作,形成...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    当我们在Session上进行操作时,这些操作不会立即反映到数据库中,而是被缓存起来,直到调用`flush()`方法或者事务提交时才会真正执行。 在开始使用Session之前,需要配置Hibernate的环境,包括创建SessionFactory,...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    实现自己的Hibernate框架之Session 方法实现

    在IT行业中,数据库操作是应用程序开发中的重要环节,而Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了Java应用程序对数据库的操作。本篇文章将深入探讨如何实现自己的Hibernate框架,特别是Session...

    模拟hibernate的session.save()功能

    3. **事务处理**:在数据库操作中,事务管理至关重要,`session.save()`通常会包含在一个数据库事务中。你需要实现事务的开启、提交和回滚逻辑,确保数据的一致性。 4. **连接管理**:在没有Hibernate的情况下,你...

    hibernate的核心接口--Session

    - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,包括管理持久化对象的生命周期,并通过提供第一级别的高级缓存来确保持久化对象的数据与...

    Hibernate管理Session和批量操作分析

    在Java的持久化框架Hibernate中,管理Session和执行批量操作是优化数据库交互的关键技术。本文主要探讨了如何高效地管理Hibernate的Session以及如何实施批量处理数据,这些技巧对于提升应用程序性能至关重要。 首先...

    Hibernate_11session

    通过以上介绍,我们可以看到Hibernate Session在数据库操作中的核心地位,正确理解和使用Session是掌握Hibernate的关键。实践中的具体应用需要结合项目需求,灵活运用这些知识,以实现高效、稳定的数据库访问。

    对Hibernate Session做一个简单的包装

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它使得开发者可以更加方便地处理数据库操作。本篇文章将探讨如何对Hibernate的`Session`进行简单的包装,以提升代码的可维护性和灵活性。...

    HibernateSession , Transaction 研究

    在实际开发中,通常我们会将`Session`和`Transaction`的使用结合到一个单元操作中,例如在try-catch-finally块中: ```java SessionFactory sessionFactory = ...; // 获取SessionFactory Session session = ...

Global site tag (gtag.js) - Google Analytics