对象生命周期及crud操作

来源:互联网 发布:db2 命令行执行sql 编辑:程序博客网 时间:2024/06/03 04:06
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有值--oid13             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方法 相当于 之前的getById11             //如果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     @Test25     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方法 相当于 之前的getById34             //如果get查询的数据不存在,那么返回null35             //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             //关闭session46             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             //关闭session62             HibernateUtil.closeSession();63         }64     }65     @Test66     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方法 相当于 之前的getById75             //如果get查询的数据不存在,那么返回null76             //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             //关闭session87             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             //手动创建对象 可以被更新,需要指定id10             //当指定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             //关闭session21             HibernateUtil.closeSession();22         }23         //瞬时状态24         25     }26     @Test27     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             //手动创建对象 可以被更新,需要指定id35             //当指定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             //关闭session46             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             //关闭session20             HibernateUtil.closeSession();21         }22         //瞬时状态23     }24     @Test25     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             //关闭session41             HibernateUtil.closeSession();42         }43         //瞬时状态44     }

 

0 0
原创粉丝点击