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方法,如果传入的参数是持久化对象,那么直接返回不起作用,若属性发生变化则更新,否则不更新

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值