Hibernate-----API ----------evict clear refresh flush aveOrUpdate saveOrUpdate

本文详细介绍了Hibernate中的几个关键API用法,包括evict用于从缓存中移除对象,clear清空一级缓存,refresh强制刷新缓存对象与数据库同步,flush则是在对比快照后提交缓存对象到数据库。此外,还探讨了saveOrUpdate方法在保存或更新操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.itheima.d_api;

import java.util.List;

import org.hibernate.Session;
import org.junit.Test;

import com.itheima.domain.User;
import com.itheima.utils.HibernateUtils;
//其他API (大部分都是了解)
public class Demo1 {
    @Test
    //1. evict 将缓存中的对象移除.
    //2. clear 清空1级缓存 

    public void fun1(){
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        //------------------------------------------------
        User u1 = (User) session.get(User.class, 1);    
        session.clear();
        
        User u2 = (User) session.get(User.class, 1);        
        //------------------------------------------------
        session.getTransaction().commit();
        session.close(); // 游离状态
    }


    @Test
    //3 refresh 刷新 => 强制刷新缓存中的对象 => (可以用来解决缓存与数据库数据不同步的问题)
    public void fun2(){
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        //------------------------------------------------
        User u1 = (User) session.get(User.class, 1);
        session.refresh(u1); //将缓存中的对象立刻与数据库同步,会再发送一个sql语句
        //------------------------------------------------
        session.getTransaction().commit();
        session.close(); // 游离状态
    }
    @Test
    //4 flush 对比快照,并提交缓存对象
    public void fun3(){
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        //------------------------------------------------
        User u1 = (User) session.get(User.class, 1);
        //u1.setName("zhangsan");
        
        session.flush();// 立刻提交session缓存中的对象到数据库
        //------------------------------------------------
        session.getTransaction().commit();
        session.close(); // 游离状态
    }
    
    @Test
    // 代理主键,如果是=> native。。。。。。。。。。。。。。。。。。。
    //5.1 saveOrUpdate方法

    //saveOrUpdate 可以同时完成保存或更新操作
    //主键为空=>save
    //主键有值=> update

    public void fun4(){
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        //------------------------------------------------
        User u = new User();
        u.setId(99);
        u.setName("jack");
        u.setPassword("1234");
        
        session.saveOrUpdate(u);
        //------------------------------------------------
        session.getTransaction().commit();
        session.close(); // 游离状态
    }
    
    //如果是 自然主键=> assigned。。。。。。。。。。。。。。。。。

    //5 update 与 saveOrUpdate方法
        //saveOrUpdate 可以同时完成保存或更新操作
        //主键为空=> 报错,因为无论是save还是update 都必须指定id
        //主键有值=> 先会根据主键查询数据库.
                // 数据库中存在=> 执行update
                // 数据库中不存在=> 执行insert
    @Test
        public void fun5(){
            Session session = HibernateUtils.openSession();
            session.beginTransaction();
            //------------------------------------------------
            User u = new User();
            u.setId(88);
            u.setName("jack01");
            u.setPassword("1234");
            
            session.saveOrUpdate(u);
            //------------------------------------------------
            session.getTransaction().commit();
            session.close(); // 游离状态
        }
    
    
    @Test
    //在我们使用Hibernate时候,注意要避免出现,两个相同的ID对象.放入一级缓存的情况.
    public void fun6(){
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        //------------------------------------------------
        User u = (User) session.get(User.class, 1);// 持久化,缓存中存在
        
        session.evict(u); // 游离态,缓存中不存在
        
        User u2 = (User) session.get(User.class, 1);// 持久化,缓存中存在
        
        session.update(u); // 将U重新变为持久化状态,缓存中存在
        //------------------------------------------------
        session.getTransaction().commit();
        session.close(); // 游离状态
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值