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( )); //加载一个持久化对象
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 ();
}
}

待补充:

5、Session.update()
 
6、Session.beginTrasaction()
 
7、Session.close()
 
8、Session.connection()
 
9、Session.saveOrUpdate()

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

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

    一.get方法和load方法的简易理解  (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用 ...

  2. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  3. Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

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

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  5. hibernate中session

    hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果 ...

  6. Hibernate中Session与本地线程绑定

    ------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...

  7. [转]Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

  8. Hibernate中Session.get()/load()之区别

    原文链接http://sunxin1001.iteye.com/blog/292090 Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区 ...

  9. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

随机推荐

  1. MySQL数据库的环境及简单操作

    ***********************************************声明*************************************************** ...

  2. 锚点链接和hash属性

    相信大家挺经常见过这样一个效果.有一个很长很长的页面,分成好几部分,目录中一点击,就能定位到页面某个位置. 例如:有这样一个目录,例如你点击一下“HTML”,就会直接跳转到“HTML”的页面位置 这就 ...

  3. 记一次lnmp环境下无法执行php文件

    lnmp环境搭建好后却无法正常执行php文件,坑爹啊!~ [错误状况] 页面直接打印出php代码内容: php文件无法执行?: 查看nginx配置文件: server { listen 80; ser ...

  4. div有最小高度且自适应高度

    DIV最小高度且自适应高度   在IE6中,如果子容器的高度超过父容器的时候,父容器会被子容器撑开,所以我们可以直接设置一个height的高度值即可.但是在IE7和firefox就不行了,它不会自动撑 ...

  5. 23 读取excel

    /** index mappingname originalname datatype family 0 task_id taskIndexCode STRING info 1 task_type r ...

  6. poj2409

    用n个颜色的珠子编项链,求有多少种情况 由N(G,C) = 所有f的稳定核的和/|G| m边形有m种旋转m种翻转 首先说旋转,有模线性方程可知每种旋转都有gcd(m,i)个循环节且每个循环节长度为n/ ...

  7. 关于 HRESULT:0x80070

    异常来自 HRESULT:0x80070057 (E_INVALIDARG) 网上看的普遍办法是: 解决方法 是 删除 C:/WINDOWS/Microsoft.NET/Framework/v2.0. ...

  8. ECSTORE关于后端FILTER条件的表现形式以及含义。

    cstore关于后端filter条件的表现形式以及含义如下: $FILTERARRAY= ARRAY( 'THAN'=>' > '.$VAR, 'LTHAN'=>' < '.$ ...

  9. 一个基础的CURL类

    /** * 一个基础的CURL类 * * @author Smala */ class curl{ public $ch; public $cookie = '/cookie'; public $rs ...

  10. (转载)lib 和 dll 的区别、生成以及使用详解

    简单地讲: 第一:.DLL是动态链接库,而.LIB是静态链接库dll是个编译好的程序,调用时可以直接调用其中的函数,不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, ...