zoukankan      html  css  js  c++  java
  • 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处于打开状态;

  • 相关阅读:
    博客园的第一篇博客
    I-如何办好比赛
    塞特斯玛斯塔
    字典序最大的子序列
    百练POJ 1657:Distance on Chessboard
    百练POJ2750:鸡兔同笼
    HDU3790最短路径问题
    HDU 2544最短路Dijkstra算法
    快速幂【倍增+二分】
    树的高度
  • 原文地址:https://www.cnblogs.com/zhang-bo/p/6550538.html
Copyright © 2011-2022 走看看