zoukankan      html  css  js  c++  java
  • 019 关联映射文件中集合标签中的lazy(懒加载)属性

    <set><list>集合上,可以取值:true/false/extra,(默认值为:true)

    实例一:(集合上的lazy=true(默认))class默认lazy=true(默认)

    session = HibernateUtils.getSession();
                tx = session.beginTransaction();
                //不会发出SQL语句
                Classes classes = (Classes)session.load(Classes.class, 1);
                //发出SQL语句,因为在使用对象
                System.out.println("classes.name=" + classes.getName());
    
               
                //不会发SQL语句,只会返回一个代理类,因为没有使用对象
                Set<Student> students = classes.getStudents();       
                //会发出SQL语句,因为使用了对象
                for (Iterator<Student> iter = students.iterator();iter.hasNext();){
                   Student student = iter.next();
                    System.out.println(student.getName());
                }         
                //提交事务
    
                tx.commit();

    实例二:集合上的lazy=true(默认)class已经设置懒加载,class默认lazy=true(默认)

    session = HibernateUtils.getSession();
    
                tx = session.beginTransaction();
                //不会发出SQL语句
                Classes classes = (Classes)session.load(Classes.class, 1);
                //发出SQL语句,因为在使用对象
               System.out.println("classes.name=" + classes.getName());        
                //不会发SQL语句,只会返回一个代理类,因为没有使用对象
                Set<Student> students = classes.getStudents();         
                //会发出SQL语句,发出查询全部数据的SQL,效率不高
                System.out.println("student.count=" + students.size());         
                //提交事务
    
                tx.commit();

    实例三:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

              //不会发出SQL语句,因为只设置了集合上的lazy为false,其它保持默认
                Classes classes = (Classes)session.load(Classes.class, 1);
                //发出两条SQL语句,分别加载classes和student
                //并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false
    
                System.out.println("classes.name=" + classes.getName());         
                //不会发SQL语句,因为已经在前面加载了数据
    
                Set<Student> students = classes.getStudents();       
                for (Iterator<Student> iter = students.iterator();iter.hasNext();){
    
                    Student student = iter.next();
    
                    System.out.println(student.getName());
    
                }

    实例四:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

    //不会发出SQL语句
    
            Classes classes = (Classes)session.load(Classes.class, 1);
            //发出两条SQL语句,分别加载classes和student
            //并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false
            System.out.println("classes.name=" + classes.getName());       
            //不会发SQL语句,因为已经在前面加载了数据
            Set<Student> students = classes.getStudents();       
            //不会发SQL语句,因为已经在前面加载了数据
            System.out.println("student.count=" + students.size());

    实例五:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

    session = HibernateUtils.getSession();
    
                tx = session.beginTransaction();
                //不会发出SQL语句
                Classes classes = (Classes)session.load(Classes.class, 1);
                ////发出两条SQL语句
                System.out.println("classes.name=" + classes.getName());
             
                //不会发出SQL语句,只返回代理类
                Set<Student> students = classes.getStudents();          
                //会发出SQL语句
                for (Iterator<Student> iter = students.iterator();iter.hasNext();){
                    Student student = iter.next();
                    System.out.println(student.getName());
                }          
                //提交事务
                tx.commit();

    实例六:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

    session = HibernateUtils.getSession();
            tx = session.beginTransaction()
            //不会发出SQL语句
            Classes classes = (Classes)session.load(Classes.class, 1);
            //发出两条SQL语句
            System.out.println("classes.name=" + classes.getName());     
            //不会发出SQL语句,只返回代理类
            Set<Student> students = classes.getStudents();    
            //发出SQL语句,发出一条比较智能的SQL语句(select count(id) form t_student where classesid=?)
    
    //和lazy=true相比,效率高       
    
    System.out.println("student.count=" + students.size());
    
           
            //提交事务
    
            tx.commit();
  • 相关阅读:
    [Cycle.js] Hyperscript as our alternative to template languages
    [Immutable + AngularJS] Use Immutable .List() for Angular array
    [Protractor] Running tests on multiple browsers
    [Protractor] Protractor Interactive with elementor
    [Regular Expressions] Match the Start and End of a Line
    [ES7] Object.observe + Microtasks
    [Regular Expressions] Match the Same String Twice
    [Regular Expressions] Find the Start and End of Whole Words
    牡丹-洛阳牡丹:洛阳牡丹
    汉字-生僻字:生僻字目录2
  • 原文地址:https://www.cnblogs.com/crazylqy/p/4079405.html
Copyright © 2011-2022 走看看