1、 对象状态及生命周期
瞬时状态:
持久状态:
游离状态:
2、 new->save->close->update
1 public void testSave(){ 2 Session session=null; 3 Transaction tx=null; 4 User user=null; 5 try { 6 session = HibernateUtil.getSession(); 7 tx = session.beginTransaction(); 8 //构造对象--瞬时状态 9 user = new User(); 10 user.setName("刘德华"); 11 user.setPwd("2222"); 12 //持久状态,user被session管理,并且id有值--oid 13 session.save(user); 14 //在持久状态下;脏数据检查:当提交事务,清理缓存时发现session中数据 15 //和数据库中数据不一致时,将会把session中的数据更新到数据库中 16 user.setName("学友"); 17 //在保存以后 再修改对象 那么将会产生2条sql语句,那么效率较低,建议在save前修改 18 session.flush(); 19 tx.commit(); 20 } catch (Exception e) { 21 e.printStackTrace(); 22 tx.rollback(); 23 }finally{ 24 HibernateUtil.closeSession(); 25 } 26 //user:游离状态 27 System.out.println("姓名:"+user.getName()); 28 user.setName("朝伟"); 29 try { 30 session = HibernateUtil.getSession(); 31 tx = session.beginTransaction(); 32 //持久状态 33 session.update(user); 34 tx.commit(); 35 } catch (Exception e) { 36 e.printStackTrace(); 37 tx.rollback(); 38 }finally{ 39 HibernateUtil.closeSession(); 40 } 41 }
3、get/load(持久)->delete(瞬时); get/load(持久)->colse(游离)
1 @Test 2 public void testLoad(){ 3 Session session=null; 4 Transaction tx=null; 5 User user=null; 6 try { 7 session = HibernateUtil.getSession(); 8 tx = session.beginTransaction(); 9 //持久状态 10 //load方法 相当于 之前的getById 11 //如果load查询的数据不存在,那么 抛出异常 12 //load不会立即查询数据,当使用的时候再查找数据 13 user = (User)session.load(User.class,1) ; 14 //System.out.println(user); 15 System.out.println("姓名:"+user.getName()); 16 tx.commit(); 17 } catch (Exception e) { 18 e.printStackTrace(); 19 tx.rollback(); 20 }finally{ 21 HibernateUtil.closeSession(); 22 } 23 } 24 @Test 25 public void testGet(){ 26 Session session=null; 27 Transaction tx=null; 28 User user=null; 29 try { 30 session = HibernateUtil.getSession(); 31 tx = session.beginTransaction(); 32 //持久状态 33 //get方法 相当于 之前的getById 34 //如果get查询的数据不存在,那么返回null 35 //get方法会立即查询数据(session--数据库) 36 user = (User)session.get(User.class, 1) ; 37 System.out.println(user); 38 user.setName("张三"); 39 //System.out.println("姓名:"+user.getName()); 40 tx.commit(); 41 } catch (Exception e) { 42 e.printStackTrace(); 43 tx.rollback(); 44 }finally{ 45 //关闭session 46 HibernateUtil.closeSession(); 47 } 48 //游离状态 49 user.setName("siggy"); 50 System.out.println("============"); 51 try { 52 session = HibernateUtil.getSession(); 53 tx = session.beginTransaction(); 54 //持久 55 session.update(user); 56 tx.commit(); 57 } catch (Exception e) { 58 e.printStackTrace(); 59 tx.rollback(); 60 }finally{ 61 //关闭session 62 HibernateUtil.closeSession(); 63 } 64 } 65 @Test 66 public void testGet1(){ 67 Session session=null; 68 Transaction tx=null; 69 User user=null; 70 try { 71 session = HibernateUtil.getSession(); 72 tx = session.beginTransaction(); 73 //持久状态 74 //get方法 相当于 之前的getById 75 //如果get查询的数据不存在,那么返回null 76 //get方法会立即查询数据(session--数据库) 77 user = (User)session.get(User.class, 2) ; 78 session.delete(user); 79 //瞬时状态 80 user.setName("王五"); 81 tx.commit(); 82 } catch (Exception e) { 83 e.printStackTrace(); 84 tx.rollback(); 85 }finally{ 86 //关闭session 87 HibernateUtil.closeSession(); 88 } 89 //瞬时状态 90 91 }
4、 update方法:先获取对象再更新
1 @Test 2 public void testUpdate(){ 3 Session session=null; 4 Transaction tx=null; 5 User user=null; 6 try { 7 session = HibernateUtil.getSession(); 8 tx = session.beginTransaction(); 9 //手动创建对象 可以被更新,需要指定id 10 //当指定id不存在时 会抛异常 11 user = new User(); 12 user.setId(10); 13 user.setName("paul"); 14 session.update(user); 15 tx.commit(); 16 } catch (Exception e) { 17 e.printStackTrace(); 18 tx.rollback(); 19 }finally{ 20 //关闭session 21 HibernateUtil.closeSession(); 22 } 23 //瞬时状态 24 25 } 26 @Test 27 public void testUpdate1(){ 28 Session session=null; 29 Transaction tx=null; 30 User user=null; 31 try { 32 session = HibernateUtil.getSession(); 33 tx = session.beginTransaction(); 34 //手动创建对象 可以被更新,需要指定id 35 //当指定id不存在时 会抛异常 36 user = (User)session.get(User.class, 1); 37 user.setName("t_bag"); 38 user.setPwd("3333"); 39 session.update(user); 40 tx.commit(); 41 } catch (Exception e) { 42 e.printStackTrace(); 43 tx.rollback(); 44 }finally{ 45 //关闭session 46 HibernateUtil.closeSession(); 47 } 48 //瞬时状态 49 }
5、delete方法:先更新 再删除—》可以避免异常
1 @Test 2 public void testDelete(){ 3 Session session=null; 4 Transaction tx=null; 5 User user=null; 6 try { 7 session = HibernateUtil.getSession(); 8 tx = session.beginTransaction(); 9 //手动构建对象 并指定id可以从数据库删除 10 //如果指定id不存在 将抛异常 11 user = new User(); 12 user.setId(3); 13 session.delete(user); 14 tx.commit(); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 tx.rollback(); 18 }finally{ 19 //关闭session 20 HibernateUtil.closeSession(); 21 } 22 //瞬时状态 23 } 24 @Test 25 public void testDelete1(){ 26 Session session=null; 27 Transaction tx=null; 28 User user=null; 29 try { 30 session = HibernateUtil.getSession(); 31 tx = session.beginTransaction(); 32 user = (User)session.get(User.class, 1); 33 if(user!=null) 34 session.delete(user); 35 tx.commit(); 36 } catch (Exception e) { 37 e.printStackTrace(); 38 tx.rollback(); 39 }finally{ 40 //关闭session 41 HibernateUtil.closeSession(); 42 } 43 //瞬时状态 44 }