• 对象生命周期及crud操作


    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     }
  • 相关阅读:
    JVM运行参数优化详细教程
    idea 代码热启动配置方法
    Spring MVC拦截器完整代码示例
    Spring MVC异常处理代码完整实例
    Python3基础语法(20190617)
    Java代码生成器Easy Code
    Mybatis @Many注解一对多关联映射
    Mybatis @One注解使用
    Mybatis @ResultMap复用@Result
    Mybatis @Result注解的使用案例
  • 原文地址:https://www.cnblogs.com/jiangjianzhu/p/5546019.html
Copyright © 2020-2023  润新知