• hibernate&查询优化


    hibernate延迟加载

    1. 延迟加载先获取到代理对象,当真正使用到该对象中的属性的时候,才会发送SQL语句,是Hibernate框架提升性能的方式
    2. 类级别的延迟加载
    Session对象的load方法默认就是延迟加载
    Customer c = session.load(Customer.class, 1L);没有发送SQL语句,当使用该对象的属性时,才发送SQL语句
    使类级别的延迟加载失效
    在<class>标签上配置lazy=”false”
    Hibernate.initialize(Object proxy);

    3. 关联级别的延迟加载(查询某个客户,当查看该客户下的所有联系人是是否是延迟加载)
      默认是延迟加载
    Session session = HibernateUtils.getCurrentSession();
    Transaction tr = session.beginTransaction();
    Customer c = session.get(Customer.class, 1L);
    System.out.println("=============");
    System.out.println(c.getLinkmans().size());
    tr.commit();

    hibernate查询策略

    1. 查询策略:使用Hibernate查询一个对象的时候,查询其关联对象.应该如何查询.是Hibernate的一种优化手段!!!
    2. Hibernate框架的检索策略解决的问题
    查询的时机
    Customer c1 = (Customer) session.get(Customer.class, 1);
    System.out.println(c1.getLinkmans().size());


    lazy属性解决查询的时机的问题,需要配置是否采用延迟加载!!

    查询的语句形式
    List<Customer> list = session.createQuery("from Customer").list();
    for(Customer c : list){
    System.out.println(c.getLinkmans());
    }

    fetch属性就可以解决查询语句的形式的问题!!

    set标签上配置策略

    1. 在<set>标签上使用fetch和lazy属性
    fetch的取值 -- 控制SQL语句生成的格式
    select -- 默认值.发送查询语句
    join -- 连接查询.发送的是一条迫切左外连接!!!配置了join.lazy就失效了
    subselect -- 子查询.发送一条子查询查询其关联对象.(需要使用list()方法进行测试)

    lazy的取值 -- 查找关联对象的时候是否采用延迟!
    true -- 默认.延迟
    false -- 不延迟
    extra -- 及其延迟
    2. set标签上的默认值是fetch="select"和lazy="true"
    3. 总结:Hibernate框架都采用了默认值,开发中基本上使用的都是默认值。特殊的情况。

    man-to-one标签上配置策略

    1. 在<many-to-one>标签上使用fetch和lazy属性
    fetch的取值 -- 控制SQL的格式.
    select -- 默认。发送基本select语句查询
    join -- 发送迫切左外连接查询

    lazy的取值 -- 控制加载关联对象是否采用延迟.
    false -- 不采用延迟加载.
    proxy -- 默认值.代理.现在是否采用延迟.
    由另一端的<class>上的lazy确定.如果这端的class上的lazy=”true”.proxy的值就是true(延迟加载).
    如果class上lazy=”false”.proxy的值就是false(不采用延迟.)

    2. 在<many-to-one>标签上的默认值是fetch="select"和proxy
  • 相关阅读:
    如何制作Python百分比进度条
    如何按列表的元素中的第二个元素排序
    map的用法Python
    上一个问题增加用户名密码登陆
    最近alex买了个Tesla Model S,通过转账的形式,并且支付了5%的手续费,tesla价格为95万。账户文件为json,请用程序实现该提现行为。
    最近alex买了个Tesla Model S,通过转账的形式,并且支付了5%的手续费,tesla价格为95万。账户文件为json,请用程序实现该转账行为。
    写一个6位随机验证码程序,要求验证码中至少包含一个数字,一个小写字母,一个大写字母
    传统html和html5网页布局
    图片路径问题
    面向对象编程的一个形象比喻
  • 原文地址:https://www.cnblogs.com/sybk/p/10004736.html
Copyright © 2020-2023  润新知