01. Session 常用方法:save、update、saveOrUpdate

Session 常用方法:save、update、saveOrUpdate

save方法

  • 该方法传入的参数是临时对象

     //启动事务1
    trans=session.beginTransaction();
    
    /*临时对象*/
    Student student=new Student();
    student.setId("2017");
    student.setName("Vin");
    student.setGender("female");
    student.setAge(17);
    
    session.save(student);
    
    trans.commit();
  • 若save方法传入的是持久化对象直接返回,不起作用,若属性变化则更新,否则不更新

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    Student student=(Student)session.get(Student.class, "2016");
    System.out.println(student);
    /*不起作用,不会执行insert SQL语句*/
    session.save(student);
    
    trans.commit();

    更新持久化对象并保存,清理一级缓存时,会与快照对比,如果发生了更新则执行同步到数据库。如果此时对该类开启了二级缓存,并设置访问策略为 “read-only”,那么此处将不能修改该持久化对象,否则将发生异常。

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    Student student=(Student)session.get(Student.class, "2016");
    System.out.println(student);
    student.setAge(25);
    /*发生了改变,将执行update SQL语句*/
    session.save(student);
    
    trans.commit();
  • 若save方法传入的游离对象,那就将其作为临时对象处理进行保存

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    Student student=(Student)session.get(Student.class, "2016");
    System.out.println(student);
    
    /*使持久化对象成为游离对象,清理缓存或将指定对象清理缓存*/
    //session.clear();
    session.evict(student);
    /*会执行insert SQL语句,在主键不冲突的情况下,将记录插入到数据库中*/
    session.save(student);
    
    trans.commit();

update方法

  • 该方法传入的参数是游离对象

  • 若update方法传入的是临时对象且OID=null,那么久抛异常。若update方法传入的是临时对象且OID!=null,那就执行update语句。

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    //Student student=(Student)session.get(Student.class, "2016");
    //System.out.println(student);
    
    /*只能更新在数据库表里已经存在的,如下,数据表中已有"2015"这个主键*/
    Student stu=new Student();
    stu.setId("2015");
    stu.setName("Hello");
    stu.setGender("female");
    stu.setAge(19);
    
    session.update(stu);
    
    trans.commit();
  • 若update方法传入的是持久化对象,那么直接返回不起作用。若属性发生变化则更新,否则不更新。

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    Student student=(Student)session.get(Student.class, "2016");
    System.out.println(student);
    student.setAge(22);
    session.update(student);
    
    trans.commit();
  • 若update方法传入的是游离对象那么就进行update更新,不管属性是否发生变化

    //启动事务1
    trans=session.beginTransaction();
    
    /*持久化对象,使用反射了解类的结构*/
    Student student=(Student)session.get(Student.class, "2016");
    System.out.println(student);
    
    /*清理一级缓存,使之成为游离对象*/
    session.clear();
    
    session.update(student);
    
    trans.commit();

saveOrUpdate方法

该方法包含了save和update方法的功能,如果传入的参数是临时对象,就调用save方法,如果传入的参数是游离对象(数据库表中可能是有记录的),那么就调用update方法,如果传入的参数是持久化对象,那么直接返回不起作用,若属性发生变化则更新,否则不更新

猜你喜欢

转载自blog.csdn.net/sinat_37976731/article/details/80663709
01.