hibernate学习笔记之(持久对象的生命周期及Query接口初步)

测试实体对象的生命周期

junit简介:
 * 编写测试类xxxTest,需要继承TestCase
 * 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:
   public void testHello1() {}
 * 最好单元测试的代码单独建立一个目录
 
了解Hibernate中CRUD操作

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



SessionTest.java类

 // 方法前要加test
 public void testHello1() {

  System.out.println("------------SessionTest.Hello1()--------------");
 }

 public void testHello2() {

  System.out.println("------------SessionTest.Hello2()--------------");
 }

 public void testSave1() {
  Session session = null;
  Transaction tx = null;
  User user = new User();
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   // Transaction状态
   user = new User();
   user.setName("李四");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   // Persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   session.save(user);
   user.setName("王五");
   tx.commit();// session缓存称为一级缓存,进行脏数据的检查
  } catch (Exception ex) {
   ex.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 ex) {
   ex.printStackTrace();
   session.getTransaction().rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }

 // get,load
 public void testReadByGetMethod() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.getTransaction();
   tx.begin();
   // 序列化才能存在磁盘上
   User user = (User) session.get(User.class,
     "2c909bda22f40f0c0122f40f0f7a0001");
   System.out.println("User Name is :" + user.getName());
   // Persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("状态");
   tx.commit();
  } catch (Exception ex) {
   ex.printStackTrace();
   tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }

 public void testReadByGetMethod1() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.getTransaction();
   tx.begin();
   // 用get加载,如果数据库中不存在相应的数据,则返回null
   User user = (User) session.get(User.class,
     "2c909bda22f40f0c0122f40f0f7a0001x");
   System.out.println("User Name is :" + user.getName());
   // Persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("状态");
   tx.commit();
  } catch (Exception ex) {
   ex.printStackTrace();
   tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testReadByLoadMethod1() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.getTransaction();
   tx.begin();
   //不会发出查询方法,因为load实现了lazy(延迟加载)
   //只有真正使用对象的时候才加载,才发出查询方法,采用代理方法实现
   //Hibernate延迟加载实现原理是代理方式,继承了User
   User user = (User) session.load(User.class, "2c909bda22f40f0c0122f40f0f7a0001");
   System.out.println("User Name is :" + user.getName());
   // Persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("状态1");
   tx.commit();
  } catch (Exception ex) {
   ex.printStackTrace();
   tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }
 public void testReadByLoadMethod2() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.getTransaction();
   tx.begin();
   
   User user = (User) session.load(User.class, "111");
   //采用load加载数据,如果数据库中没有相应的数据,抛出异常
   System.out.println("User Name is :" + user.getName());//使用的时候才调用
   // Persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
   user.setName("状态1");
   tx.commit();
  } catch (Exception ex) {
   ex.printStackTrace();
   tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }
 // 公共的
 @Override
 protected void setUp() throws Exception {
  // TODO Auto-generated method stub
  super.setUp();
 }

 // 相当于释放资源
 @Override
 protected void tearDown() throws Exception {
  // TODO Auto-generated method stub
  super.tearDown();
 }




   

posted @ 2009-08-07 16:57  superGG  阅读(401)  评论(0编辑  收藏  举报