Hibernate中Session的几个方法的简单说明

原创 2013年12月02日 00:18:08

个人学习整理,如有不足之处,请不吝指教。转载请注明: @CSU-Max


Hibernate对普通JDBC的操作进行了轻量级的封装,使得开发人员可以利用Session对象以面向对象的思想来实现对关系数据库的操作。

一般通过Configuration对象读取相应的配置文件来创建SessionFactory,然后通过SessionFactory对象获取Session对象,获取Session对象之后,我们就可以相关数据的操作了。

下面来介绍一下Session对象的几种方法:

1、Session.save()
Session.save(Object obj):把瞬时状态对象obj加入到Session缓存中,使之成为持久化对象;选用映射文件指定的标识生成ID;当Session缓存被清理时,向数据库发出一条insert语句,在数据库中新增一条与该持久化对象相应的记录。
在执行Session.save(obj)后,Session清理缓存之前,如果obj对象属性被修改,那么最终存入数据库的值将是最后修改后的值,此过程中ID不能被修改。
//新增一个用户对象 
public void addUser(User user) {
        Session session = HibernateUtil. currentSession ();
        Transaction ts = null ;
        try {
            ts = session.beginTransaction();
            session.save(user);
            ts.commit();
        } catch (Exception e){
            ts.rollback();
            System. out .println( "---error---" );
            e.printStackTrace();
        } finally {
            HibernateUtil. closeSession ();
        }
    }

2、Session.delete()
使用delete()方法删除数据。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离态对象,就会是游离态对象被Session关联,使它变为持久化对象,然后计划执行一个delete语句。
Session只有在清理缓存的时候才执行delete语句;只有当调用Session的close()方法是,才会从Session的缓存中删除该对象。
public void removeUser() {
        Session session = HibernateUtil. currentSession ();
        Transaction ts = null ;
        User user = null ;
        try {
            ts = session.beginTransaction();
            user = (User)session.get(User. class , new Integer( 1 )); //加载一个持久化对象
            session.delete(user); //计划执行一个deleted操作
            ts.commit(); //在清理缓存时,数据库执行deleted操作
        } catch (Exception e){
            ts.rollback();
            System. out .println( "---error---" );
            e.printStackTrace();
        } finally {
            HibernateUtil. closeSession (); //从缓存中删除User对象,关闭Session
        }
    }


        Session session = HibernateUtil. currentSession ();
        Transaction ts = null ;
        try {
            ts = session.beginTransaction();
            /**
            * 假设user是一个游离态对象,调用session.delete(user)会使其先变为 一个持久化对象,然后再计划执行一个deleted操作
            */
            session.delete( user );
            ts.commit(); //在清理缓存时,数据库执行deleted操作
        } catch (Exception e){
            ts.rollback();
            System. out .println( "---error---" );
            e.printStackTrace();
        } finally {
            HibernateUtil. closeSession (); //从缓存中删除User对象,关闭Session
    }


3、Session.get()
如果不确定数据库中是否有匹配的记录存在,即可使用get()方法加载对象,使用get()方法会立刻访问数据库,如果数据库中不存在匹配的记录,则会返回null。
//使用get()方法加载一个指定id的User对象 
public   void  getUserById( int  id) {
        Session session = HibernateUtil. currentSession ();
        Transaction ts =  null ;
        User  user  =  null ;
         try {
            ts = session.beginTransaction();
            user = (User)session.get(User. class , id);
            ts.commit();
        } catch (Exception e){
            ts.rollback();
            System. out .println( "---error---" );
            e.printStackTrace();
        } finally {
            HibernateUtil. closeSession ();
        }   
  }

4、Session.load()
load()方法返回对象的代理,只有在返回对象被调用是Hibernate才会发出SQL语句查询对象。如果指定的记录不存在,则会抛出异常,这个与get()方法是不同的。
//使用load()方法加载一个指定id的User对象 
public   void  getUserById( int  id) {
        Session session = HibernateUtil. currentSession ();
        Transaction ts =  null ;
        User  user  =  null ;
         try {
            ts = session.beginTransaction();
            user = (User)session. load (User. class , id);
            ts.commit();
        } catch (Exception e){
            ts.rollback();
            System. out .println( "---error---" );
            e.printStackTrace();
        } finally {
            HibernateUtil. closeSession ();
        }   
  }

可以自己实验一下,看一下控制台Hibernate的SQL语句输出情况,理解体会其中的不同。


前一段先到这,后面在下次在补充。

5、Session.update()

6、Session.beginTrasaction()

7、Session.close()

8、Session.connection()

9、Session.saveOrUpdate()









版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。

相关文章推荐

Session中清除对象方法比较

Session中清除对象方法比较   http://blog.csdn.net/dongzhiquan/article/details/5446965 Session.Abandon ...

Hibernate三种状态和Session常用的方法

我们知道Hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口。要想对数据库操作我们就要理清楚对象在整个操作中的所属的状态。 就像马士兵老师在视频...

hibernate session的常用方法解析

1)persist()方法和save()方法      persist()方法是在Hibernate3版本中才出现的,实现了EJB3规范中定义的持久化语义,persist()方法不保证立即为持久化对...
  • rdman
  • rdman
  • 2014年05月23日 11:13
  • 1348

hibernate中的session用法

Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在: 临时状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态...

hibernate中session接口方法总结

 Session的save()和persist()方法 Session的save()方法使一个临时对象转变为持久化对象。它完成以下操作: (1)将临时对象加入到Session缓存中,使其进入...

hibernate中session的常见方法说明

HibernateUtil类: package sun.util; import org.hibernate.Session; import org.hibernate.SessionFactor...
  • z_Dendy
  • z_Dendy
  • 2013年05月14日 11:36
  • 1255

关于try{}catch{}的经典面试题

---------执行结果 --------- 1 运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到...

Hibernate学习笔记

学习Hibernate需要了解两个基础知识:一、什么是ORM?首先Hibernate是一种开源的ORM(Object/Relational Mapping)框架。那么什么是ORM呢?所谓的ORM指的是...

处理ASP.NET Session失效的几个方法

检查ASP.NET Session是否失效,是否超时,默认是20分钟,设置的方法是Session.TimeOut=30;或者您可以设置到更高,这个数值的单位是分钟,大家视情况而定。  检查代码有无Se...
  • dhklsl
  • dhklsl
  • 2011年02月18日 17:58
  • 485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate中Session的几个方法的简单说明
举报原因:
原因补充:

(最多只允许输入30个字)