持久层框架(Hibernate)

Posted Foreordination

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持久层框架(Hibernate)相关的知识,希望对你有一定的参考价值。

一、Hibernate对象的状态

  实体类对象在Hibernate中有3中状态:瞬时,持久,脱管。

瞬时:没有和Hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,对象就消失了

持久:一个对象和Hibernate发生联系,有对应的Session,并且在数据库中有对应的一条记录

脱管:一个对象虽然在数据库中有对应的一条记录,但是它所对应的Session已经关闭了。

  首先new一个Product()对像,数据库中还没有对应的记录,这个时候Product对象状态是瞬时的

通过Session的save方法把对象保存在了数据库中,对象也和Session产生了联系,此时状态是持久的

最后把Session关闭了,这个对象在数据库中有对应的数据,但是已经和Session失去了联系,就是脱管的。

技术分享图片
package com.demo.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.demo.pojo.Product;
public class TestHibernate{
    public static void main(String[] args){
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.opneSession();
        Product p=new Product();
        p.setName("demo");//创建实体对象,然后赋值,此时只是瞬时
        System.out.println("此时p是瞬时状态");
        s.save(p);//调用Session的save()方法
        System.out.println("此时p是持久状态");
        s.close();//关闭Session连接后
        System.out.println("此时p是脱管状态");
        sf.close();
    }
}
View Code

二、Hibernate插入对象

  我们可以通过for循环插入对象到数据库,使用Session的save()方法插入数据。

技术分享图片
import org.hibernate.cfg.Configuration;

import com.demo.pojo.Product;
public class TestHibernate{
    public static void main(String[] args){
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.opneSession();
        s.beginTransaction();
        
        for(int i=0;i<10;i++){
            Product p=new Product();
            p.setName("demo"+i);
            p.setPrice(i);
            s.save(p);
        }
        s.getTransaction().commint();
        s.close();
        sf.close();
    }
View Code

三、Hibernate获取对象

  通过id获取对象有两种方式,get和load

区别:1、延迟加载  2、对于id不存在时候的处理

load:

以上是关于持久层框架(Hibernate)的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate: 数据持久层框架

持久层框架(Hibernate)

持久层框架--hibernate

Hibernate持久层ORM框架

持久层框架--hibernate

持久层框架(Hibernate)一