Hibernate 学习笔记 (一) 之Junit 与 Session 一级缓存

hibernate学习笔记(一)

  • Junit 的使用
  • Session 一级缓存

Junit 的使用

Junit 单元测试提供了三种配置测试,分别是@Before,@Test,@After。举个例子
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init(){

        //1.) 创建Configuration 对象:对应hibernate 的基本配置信息 和对应关系映射信息
                Configuration configuration = new Configuration().configure();  //默认关联  configure( "/hibernate.cfg.xml" );
                //2.) 创建一个ServiceRegistry  对象,hibernate 的任何配置和服务都需要在该对象中注册后才能有效。
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
                                                                                        .buildServiceRegistry();

                sessionFactory = configuration.buildSessionFactory(serviceRegistry);
                //2. 创建Session 对象
                session = sessionFactory.openSession();
                //3. 开启事务
                 transaction = session.beginTransaction();
    }



    @Test
    public void test() {

        //4. 执行操作
        News news = new News("java", "testAuthor", new Date(new java.util.Date().getTime()));
        session.save(news);
    }


    @After
    public void destory(){

        //5. 提交事务
        transaction.commit();
        //6. 关闭Session 对象
        session.close();
        //7. 关闭SessionFactory 对象
        sessionFactory.close();
    }

Session 一级缓存

  • Session 是Hibernate 向应用提供操作数据库最主要的接口,它提供了基本保存,更新,删除和加载Java 对象的方法。
  • 站在持久化的角度,Hibernate 把对象分为四种状态:持久化状态,临时状态,游离状态,删除状态。Session 提供方法可将对象的状态转化。
  • Session 接口的实现中包含了一系列的Java 集合,而这些集合构成了Session 缓存,只要Session 没有结束生命周期或没有手动清理缓存,Session 缓存就会一直存在。

操作Session 缓存的三种方法

这里写图片描述

  • flush()

    • flush: 使数据表中的记录和 Session 缓存中的对象的状态保持一致. 为了保持一致, 则可能会发送对应的 SQL 语句。
    • 在 Transaction 的 commit() 方法中: 先调用 session 的 flush 方法, 再提交事务
    • flush() 方法会可能会发送 SQL 语句, 但不会提交事务。
    • 注意: 在未提交事务或显式的调用 session.flush() 方法之前, 也有可能会进行 flush() 操作.
    • 1). 执行 HQL 或 QBC 查询, 会先进行 flush() 操作, 以得到数据表的最新的记录
    • 2). 若记录的 ID 是由底层数据库使用自增的方式生成的, 则在调用 save() 方法时, 就会立即发送 INSERT 语句.
      • 因为 save 方法后, 必须保证对象的 ID 是存在的!
  • reflesh()

    • refresh(): 会强制发送 SELECT 语句, 以使 Session 缓存中对象的状态和数据表中对应的记录保持一致!
  • clear():清理缓存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值