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

本文详细介绍了JUnit的使用方法、Hibernate中的CRUD操作、get与load的区别、transient、persistent与detached状态的特征,并通过SessionTest类展示了如何在不同状态下进行对象的保存、读取与更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试实体对象的生命周期

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();
 }




   

转载于:https://www.cnblogs.com/superGG/archive/2009/08/07/1541350.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值