Hibernate框架编写代码的过程中遇到了几个对象:

1.  -------------
   Configuration
   -------------

   ①:主要用来加载配置并解析配置

   ②:通过Configuration对象获取SessionFactory对象

       --->1,Configuration对象提供了很多额外的通过API配置hibernate的方式(add...);
         --->2,buildSessionFactory虽然已经过期了,但是仍然是使用最广泛的得到sessionfactory的方法
         --->3,新的sessionFactory方法:

sessionFactory =cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());

具体代码:

    Configuration config=new Configuration().configure();
    SessionFactory SessionFactory = config.buildSessionFactory();
    

2.  --------------
   sessionFactory
   --------------

   ①:sessionFactory是用来创建session对象的;
   ②:openSession:开启一个全新的Session;

具体代码:

    SessionFactory SessionFactory = config.buildSessionFactory();
    Session session = SessionFactory.openSession();
    

3.  -------
   Session
   -------
   session对象提供了对象持久化的各种方法:

       1) beginTransaction:开启一个事务;
         2) save(object):保存一个对象;

public void save(Teacher tc) {
        Session session = null;
        try {
            // 加载hibernate.cfg.xml文件
            Configuration config = new Configuration().configure();
            // 获取session
            session = config.buildSessionFactory().openSession();
            // 开始事务
            session.beginTransaction();
            // 保存对象
            session.save(tc);
            // 事务提交
            session.getTransaction().commit();
            // 关闭资源
        } catch (HibernateException e) {
            e.printStackTrace();
            Transaction transaction = session.beginTransaction();
            if (transaction.isActive()) {
                transaction.rollback();
            }
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }

         3) get(Class,Serializable):根据主键加载一个指定类型的对象实例;

public Teacher get(Teacher tc) {
        Configuration config=new Configuration().configure();
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session openSession = sessionFactory.openSession();
        return (Teacher) openSession.get(Teacher.class, tc.getId());
    }

         4) update(object):修改一个对象,要求对象需要有id等值;

public void update(Teacher tc) {
        Configuration config=new Configuration().configure();
        SessionFactory SessionFactory = config.buildSessionFactory();
        Session session = SessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.update(tc);
        transaction.commit();
        session.close();
    
    }

         5) delete(object):删除一个对象,要求对象必须有id;

public void delete(Teacher tc) {
        Session session = null;
        Transaction beginTransaction = null;
        try {
            session = HibernateUtils.getSession();
            beginTransaction = session.beginTransaction();
            session.delete(tc);
            beginTransaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            if (beginTransaction.isActive()) {
                beginTransaction.rollback();
            }
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }

         6) createQuery(String hql):创建一个查询对象;

public List<?> list() {
        Configuration config=new Configuration().configure();
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session openSession = sessionFactory.openSession();
        Query createQuery = openSession.createQuery("FROM Teacher");
        return createQuery.list();
    }

           7) close():关闭一个session;

           8) saveOrUpdate:保存没有id的对象,修改有id的对象;

public void saveOrUpdate(Teacher tc) {
        // 利用saveOrUpdate添加对象
        // 如果要使用saveOrUpdate, 
        // 要么没有id, 要么使用已经在数据库中存在的id
        Configuration config=new Configuration().configure();
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session openSession = sessionFactory.openSession();
        Transaction transaction = openSession.beginTransaction();
        openSession.saveOrUpdate(tc);
        transaction.commit();
        openSession.close();
    }

         9) persist:
            ①) 把对象保存到数据库中;
            ②) persist方法要执行,必须在事务空间之内;

public void testPersist() throws Exception {
        Session session = HibernateUtil.getInstance().getSession();//自己封装的获取session的方法
        session.beginTransaction();
        Student stu = new Student("小花1", 16);
        session.persist(stu);
        session.getTransaction().commit();
        session.close();
    }

       10)merge:
            ①) 相当于update方法;
            ②) merge方法要执行,必须在事务空间之内;
       11)load
          1) get方法,在调用get方法的时候就会立刻去发送一条SELECT查询,如果没有结果,返回null,如果有结果,返回对象,
          2) load方法和get一样,也能够查询指定id的对象;
          3) load方法把真正执行select延后到了使用这个对象的时候,我们叫做延迟加载;
              `使用`: 在使用对象非主键属性的时候;
              * load方法的原理:
              1: load方法返回的对象是hibernate动态为我们的domain创建的一个子类;
              2: hibernate在这个子类里面重写了非主键的属性的getter方法,和tostring方法;
              3: hibernate为这个子类添加了一个(是否加载完成)的状态;如果在调用这个对象的getter方法的时候,这个对象还没有被加载,就发送SQL去查询对象,并且把查           询到的结果设置到对象中,并设置是否加载完成状态为[加载完成];如果之后再去调用getter方法,因为已经加载完成了所以,只需要直接返回这些属性的值就可           以了;
              4: hibernate使用javassist来完成延迟加载子类的动态生成;
              5: 如果在session关闭之前没有去实例化延迟加载对象
              6: 用load方法返回的对象永远不可能为空;
              7: 如果load方法返回的对象在使用的过程中发现数据库里面没有值对应,报错;
              8: 如果要使用load方法,请保证id在数据库中一定存在;

4.  -----------
   Transaction
   -----------
    * 对事务的一个封装,事务的提交或者回滚由这个对象管理;
    * 常用的几个方法:
        session.getTransaction:得到当前会话上绑定的事务对象;
        session.beginTransaction:在标记当前session的事务正常开始了;
        transaction.isActive:判断当前事务是否是活动的;
        session.isOpen:判断当前session处于打开状态;

原文地址:https://www.cnblogs.com/zhang-bo/p/6550538.html