Hibernate中session的CRUD操作

SessionCRUD操作,是用于查询一条记录,要查询多条记录或者全部记录,需要用到hibernate提供的HQL语言来实现。




  Hibernate中session的CRUD操作:

get和load的区别?
 * get不支持lazy,load支持lazy
 * 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常
 
transient状态的特征?
 * 在数据库中没有与之匹配的数据
 * 没有纳入session的管理
 
persistent状态的特征?
 * persistent状态的对象在数据库中有与之匹配的数据
 * 纳入了session的管理
 * 在清理缓存(脏数据检查)的时候,会和数据库同步
 
detached状态的特征?
 * 在数据库中有与之匹配的数据
 * 没有纳入session的管理    
 

 

 


import java.util.Date;

import org.hibernate.Session;
import org.hibernate.Transaction;

import junit.framework.TestCase;

public class SessionTest extends TestCase {

 public void testHello1() {
  System.out.println("-----------SessionTest.Hello1()------------");
  //throw new java.lang.RuntimeException();
 }
 
 public void testHello2() {
  System.out.println("-----------SessionTest.testHello2()------------");
  
  //this.assertEquals("hello", "hello111");
 }
 
 public void testSave1() {
  Session session = null;
  Transaction tx = null;
  User user = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   
   //Transient状态
   user = new User();
   user.setName("李四");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   
   //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   session.save(user);
   
   user.setName("王五");
   //session.update(user);
   tx.commit();
  }catch(Exception e) {
   e.printStackTrace();
   tx.rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
  
  //detached状态
  user.setName("张三");
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
    //persistent状态
   session.update(user);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }  
 }
 
 public void testReadByGetMethod1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   //马上发出查询sql,加载User对象
   User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");
   System.out.println("user.name=" + user.getName());
   
   //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("龙哥");
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testReadByGetMethod2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   //采用get加载数据,如果数据库中不存在相应的数据,返回null
   User user = (User)session.get(User.class, "asdfsafsdfdsf");

   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testReadByLoadMethod1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   //不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
   //延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
   //hibernate延迟加载实现原理是代理方式
   User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2a2ff0001");
   System.out.println("user.name=" + user.getName());
   
   //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("发哥");
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testReadByLoadMethod2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   //采用load加载数据,如果数据库中没有相应的数据
   //那么抛出ObjectNotFoundException
   User user = (User)session.load(User.class, "55555555");
   
   System.out.println(user.getName());
   
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
   throw new java.lang.RuntimeException();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testUpdate1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   //手动构造的detached状态的对象
   User user = new User();
   user.setId("402880d01b9be8dc011b9be9b23d0001");
   user.setName("德华");
   
   session.update(user);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 } 
 

 public void testDelete1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
//   //手动构造的detached状态的对象
//   User user = new User();
//   user.setId("402880d01b9be8dc011b9be9b23d0001");
//   user.setName("德华");
//   session.delete(user);
   
   User user = (User)session.load(User.class, "402880d01b9be8dc011b9be9b23d0001");
   session.delete(user);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
  
  //transient状态
 } 
 
}

 

 

 

 

 

转载于:https://www.cnblogs.com/liuyang-1037/archive/2009/03/19/1416462.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值