zoukankan      html  css  js  c++  java
  • Hibernate检索策略及批量抓取

    检索策略的概念

      1 hibernate检索策略分为两类:

      (1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库

                //根据cid=1客户
                //执行get方法之后,是否发送sql语句
                //调用get方法马上发送sql语句查询数据库
                Customer customer = session.get(Customer.class, 1);

      (2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库

                /*
                 * 1 调用load方法之后,不会马上发送sql语句
                 * (1)返回对象里面只有 id值
                 * 
                 * 2 得到对象里面不是id的其他值时候才会发送语句
                 * */
                Customer customer = session.load(Customer.class, 2);//不会发送
                
                System.out.println(customer.getCid());//不会发送
                
                System.out.println(customer.getCustName());//会发送

      2 延迟查询分成两类:

      (1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句

               //上面的代码

      (2)关联级别延迟:

        - 查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟

                //根据cid=1客户,再查询这个客户里面所有联系人
                Customer customer = session.get(Customer.class, 1);
                //再查询这个客户里面所有联系人
                //直接得到客户里面联系人的set集合
                
                //得到set集合,没有发送语句
                Set<LinkMan> linkman = customer.getSetLinkMan();
                
                // 发送语句
                System.out.println(linkman.size());

    关联级别延迟操作

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

        (1)根据客户得到所有的联系人,在客户映射文件中配置

      2 在set标签上使用属性

        (1)fetch:值select(默认)

        (2)lazy:值

          - true:延迟(默认)

          - false:不延迟

          - extra:极其延迟

            <set name="setLinkMan" batch-size="10" fetch="select" lazy="false">

      (1)调用get之后,发送两条sql语句

            

            <set name="setLinkMan" batch-size="10" fetch="select" lazy="extra">

        (1)极其懒惰,要什么值给什么值

            

     

    批量抓取

      1 查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人

        (1)上面操作代码,发送多条sql语句

                //查询所有客户
                Criteria criteria = session.createCriteria(Customer.class);
                List<Customer> list = criteria.list();
                //得到每个客户里面所有的联系人
                for (Customer customer : list) {
                    System.out.println(customer.getCid()+"::"+customer.getCustName());
                    //每个客户里面所有的联系人
                    Set<LinkMan> setLinkMan = customer.getSetLinkMan();
                    for (LinkMan linkMan : setLinkMan) {
                        System.out.println(linkMan.getLkm_id()+"::"+linkMan.getLkm_name());
                    }
                }

      2 在客户的映射文件中,set标签配置

        (1)batch-size值,值越大发送语句越少

            <set name="setLinkMan" batch-size="10">
  • 相关阅读:
    主成分分析法
    K-means算法
    高斯混合模型
    data structure test
    八皇后问题求解
    商品管理系统课程设计
    哈佛商学院20部必看电影
    usaco1.1
    Visual Studio 2012 出现关于ActivityLog.xml错误的解决方案
    2012蓝桥杯决赛题
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10074688.html
Copyright © 2011-2022 走看看