zoukankan      html  css  js  c++  java
  • Hibernate检索策略

    一、Hibernate的检索策略分类

      1、立即检索

         立即查询方式,调用get方法只会,会马上去查询数据库。

    public void Test2(){
                SessionFactory sessionFactory = null;
                Session session = null;
                Transaction tx = null;
                try {
                    sessionFactory = HibernateUtils.getFactory();
                    session = sessionFactory.openSession();
                    tx = session.beginTransaction();
                    //调用get方法查询出一条记录,调用只后会马上发送sql语句去查询数据库
                    Sort food = session.get(Sort.class, 1);
                    System.out.println(food);
                    tx.commit();
                } catch (Exception e) {
                    tx.rollback();
                }finally{
                    session.close();
                    sessionFactory.close();
                }
            }

      2、延迟检索

         延迟查询方式,使用session对象的load方法查询时,调用load方法后不会立即查询数据库,

        而是等需要得到该查询对象里面的属性的时候才会去查询数据库。

        @Test
                    
                    public void Test13(){
                        SessionFactory sessionFactory = null;
                        Session session = null;
                        Transaction tx = null;
                        try {
                            sessionFactory = HibernateUtils.getFactory();
                            session = sessionFactory.openSession();
                            tx = session.beginTransaction();
                            //调用get方法查询出一条记录,调用只后不会会马上发送sql语句去查询数据库
                            Sort food = session.load(Sort.class, 1);
                            //不发送SQL语句,返回的对象里面只有id值
                            System.out.println(food.getSid());
                            //发送SQL语句,查询数据库
                            System.out.println(food.getSname());
                            tx.commit();
                        } catch (Exception e) {
                            tx.rollback();
                        }finally{
                            session.close();
                            sessionFactory.close();
                        }
                    }

    二、延迟检索分类

      1、类级别的延迟

          延迟查询方式,使用session对象的load方法查询时,调用load方法后不会立即查询数据库,

        而是等需要得到该查询对象里面的属性的时候才会去查询数据库。

        @Test
                    
                    public void Test13(){
                        SessionFactory sessionFactory = null;
                        Session session = null;
                        Transaction tx = null;
                        try {
                            sessionFactory = HibernateUtils.getFactory();
                            session = sessionFactory.openSession();
                            tx = session.beginTransaction();
                            //调用get方法查询出一条记录,调用只后不会会马上发送sql语句去查询数据库
                            Sort food = session.load(Sort.class, 1);
                            //不发送SQL语句,返回的对象里面只有id值
                            System.out.println(food.getSid());
                            //发送SQL语句,查询数据库
                            System.out.println(food.getSname());
                            tx.commit();
                        } catch (Exception e) {
                            tx.rollback();
                        }finally{
                            session.close();
                            sessionFactory.close();
                        }
                    }

      2、关联级别延迟

        查询某个类别,再查询这个类别的所有商品,查询类别的所有商品的过程是否需要延迟,这个过程称为关联级别延迟。

        

    @Test
        
        public void Test1(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                //1、使用get方法查询出食品类
                Sort food = session.get(Sort.class, 1);
                //2、使用sort对象的方法得到所有食品类中的食品,没有发送SQL语句
                Set<Good> set = food.getSetGoods();
                //3、发送SQL语句
                System.out.println(set.size());
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }finally{
                session.close();
                sessionFactory.close();
            }
        }

    三、关联级别延迟操作

       1 在映射文件中进行配置实现

        (1)根据类别得到所有的商品,在类别映射文件中配置

       2 在set标签上使用属性

        (1)fetch:值select(默认)

        (2)lazy:值

            - true:延迟(默认)

            - false:不延迟

            - extra:极其延迟

        (3)延迟效果

          默认延迟效果:

    @Test
        
        public void Test1(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                //1、使用get方法查询出食品类
                Sort food = session.get(Sort.class, 1);
                //2、使用sort对象的方法得到所有食品类中的食品,发送SQL语句
                Set<Good> set = food.getSetGoods();
                //3、发送SQL语句
                System.out.println(set.size());
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }finally{
                session.close();
                sessionFactory.close();
            }
        }

        不延迟效果

    @Test
        
        public void Test1(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                //1、使用get方法查询出食品类
                Sort food = session.get(Sort.class, 1);
                //2、使用sort对象的方法得到所有食品类中的食品,没有发送SQL语句
                Set<Good> set = food.getSetGoods();
                //3、发送SQL语句
                System.out.println(set.size());
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }finally{
                session.close();
                sessionFactory.close();
            }
        }

           极度延迟效果:

        

    @Test
        
        public void Test1(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                //1、使用get方法查询出食品类
                Sort food = session.get(Sort.class, 1);
                //2、使用sort对象的方法得到所有食品类中的食品,没有发送SQL语句
                Set<Good> set = food.getSetGoods();
                //3、发送SQL语句,但发送的查询数量的count聚集函数语句
                System.out.println(set.size());
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }finally{
                session.close();
                sessionFactory.close();
            }
        }

            

  • 相关阅读:
    目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
    目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))
    JavaScript中继承的多种方式和优缺点
    使用Vue封装暂无数据占位图组件
    Vue组件间通信方式到底有几种
    通俗易懂了解Vue中nextTick的内部实现原理
    从0开始编写webpack插件
    常用的webpack优化方法
    通俗易懂了解Vue内置组件keep-alive内部原理
    原生JS实现集合结构
  • 原文地址:https://www.cnblogs.com/jack1995/p/6953394.html
Copyright © 2011-2022 走看看