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

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不能被修改。

 1 //新增一个用户对象
 2 public void addUser(User user) {
 3         Session session = HibernateUtil. currentSession ();
 4         Transaction ts = null ;
 5         try {
 6             ts = session.beginTransaction();
 7             session.save(user);
 8             ts.commit();
 9         } catch (Exception e){
10             ts.rollback();
11             System. out .println( "---error---" );
12             e.printStackTrace();
13         } finally {
14             HibernateUtil. closeSession ();
15         }
16     }  

2、Session.delete()

使用delete()方法删除数据。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离态对象,就会是游离态对象被Session关联,使它变为持久化对象,然后计划执行一个delete语句。

Session只有在清理缓存的时候才执行delete语句;只有当调用Session的close()方法是,才会从Session的缓存中删除该对象。

 1 public void removeUser() {
 2         Session session = HibernateUtil. currentSession ();
 3         Transaction ts = null ;
 4         User user = null ;
 5         try {
 6             ts = session.beginTransaction();
 7             user = (User)session.get(User. class , new Integer( 1 )); //加载一个持久化对象
 8             session.delete(user); //计划执行一个deleted操作
 9             ts.commit(); //在清理缓存时,数据库执行deleted操作
10         } catch (Exception e){
11             ts.rollback();
12             System. out .println( "---error---" );
13             e.printStackTrace();
14         } finally {
15             HibernateUtil. closeSession (); //从缓存中删除User对象,关闭Session
16         }
17     }
18
19
20         Session session = HibernateUtil. currentSession ();
21         Transaction ts = null ;
22         try {
23             ts = session.beginTransaction();
24             /**
25             * 假设user是一个游离态对象,调用session.delete(user)会使其先变为 一个持久化对象,然后再计划执行一个deleted操作
26             */
27             session.delete( user );
28             ts.commit(); //在清理缓存时,数据库执行deleted操作
29         } catch (Exception e){
30             ts.rollback();
31             System. out .println( "---error---" );
32             e.printStackTrace();
33         } finally {
34             HibernateUtil. closeSession (); //从缓存中删除User对象,关闭Session
35     }  

3、Session.get()

如果不确定数据库中是否有匹配的记录存在,即可使用get()方法加载对象,使用get()方法会立刻访问数据库,如果数据库中不存在匹配的记录,则会返回null。

 1 //使用get()方法加载一个指定id的User对象
 2 public   void  getUserById( int  id) {
 3         Session session = HibernateUtil. currentSession ();
 4         Transaction ts =  null ;
 5         User  user  =  null ;
 6          try {
 7             ts = session.beginTransaction();
 8             user = (User)session.get(User. class , id);
 9             ts.commit();
10         } catch (Exception e){
11             ts.rollback();
12             System. out .println( "---error---" );
13             e.printStackTrace();
14         } finally {
15             HibernateUtil. closeSession ();
16         }
17   }  

4、Session.load()

load()方法返回对象的代理,只有在返回对象被调用是Hibernate才会发出SQL语句查询对象。如果指定的记录不存在,则会抛出异常,这个与get()方法是不同的。

 1 //使用load()方法加载一个指定id的User对象
 2 public   void  getUserById( int  id) {
 3         Session session = HibernateUtil. currentSession ();
 4         Transaction ts =  null ;
 5         User  user  =  null ;
 6          try {
 7             ts = session.beginTransaction();
 8             user = (User)session. load (User. class , id);
 9             ts.commit();
10         } catch (Exception e){
11             ts.rollback();
12             System. out .println( "---error---" );
13             e.printStackTrace();
14         } finally {
15             HibernateUtil. closeSession ();
16         }
17   }  

待补充:

5、Session.update()

6、Session.beginTrasaction()

7、Session.close()

8、Session.connection()

9、Session.saveOrUpdate()

时间: 2025-01-09 06:55:20

Hibernate中Session的几个方法的简单说明的相关文章

Hibernate中Session.get()方法和load()方法的详细比较(转)

一.get方法和load方法的简易理解 (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时,如果没有数据不存在,就会抛出个org.hibernate.ObjectNotFoundException异常 (2)load先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中查询,这就是我们常说的 load

Hibernate中Session.get()方法和load()方法的详细比较

一.get方法和load方法的简易理解 (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时,如果没有数据不存在,就会抛出个org.hibernate.ObjectNotFoundException异常 (2)load先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中查询,这就是我们常说的 load

Hibernate中Session的get和load

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable id, L

hibernate中session的获取使用以及其他注意事项

hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行数据查询时不是出现了"session is close"异常就是出现其他异常问题,痛定思痛,决定收集并整理相关资料,方便今后的使用. 一.session的获取 在hibernate中的Session对象通过SessionFactory来管理,可以通过使用openSession ().get

Hibernate中Session与本地线程绑定

------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session 对象是单线程对象,只能自己使用,不能共用 将 Session 与本地线程绑定,保证 Session 对象绝对是一个单线程对象 3.Hibernate 帮助我们实现了 Session 与本地线程绑定(底层是 ThreadLocal) 4.获取与本地线程绑定的 Session (1)在 Hiberna

hibernate中session

hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果只是单独的hibernate程序的话. 获得session之后,打开事务,操作数据库,提交(回滚事务),关闭session.就这样完成了操作DB ? Hibernate中session的使用: 在Hibernate中session主要是用来操作数据库? Hibernate在操作数据库前需要得到Ses

[转]Hibernate中Session的get和load

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable id, L

hibernate中session线程安全的实现

在hibernate中session是使用ThreadLocal实现线程安全的. ThreadLocal并不是一个Thread,而是一个线程副本,ThreadLocal为每个使用该变量的线程提供一个变量副本,线程修改自己的变量副本不会影响其他线程的变量副本 ThreadLocal有四个方法: set():设置当前线程的局部变量的值 get():获取当前线程的局部变量的值 remove():将当前线程局部变量的值删除,此方法不必显示的调用,因为局部变量自有垃圾回收器去清理 initialValue

HttpSession与Hibernate中Session的区别

HttpSession与Hibernate中Session的区别 一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户身份的唯一表示.注意,是容器(Tomcat,Resin)自动创建的. 用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限.例如在购物车程序里,存放用户买的商品. 销毁:一定时间(跟容器有关)内,用户无任何动作,session