4.LazyForCollection 测试

来源:互联网 发布:java调用外部命令 编辑:程序博客网 时间:2024/06/02 07:31
package com.bjpowernode.hibernate;import java.util.HashSet;import java.util.Set;import org.hibernate.Session;public class InitData {public static void main(String[] args) {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();Classes classes = new Classes();classes.setName("动力节点");session.save(classes);Student student1 = new Student();student1.setName("张三");student1.setClasses(classes);session.save(student1);Student student2 = new Student();student2.setName("李四");student2.setClasses(classes);session.save(student2);session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}
package com.bjpowernode.hibernate;import java.util.Iterator;import java.util.Set;import org.hibernate.Session;import junit.framework.TestCase;/** * 保持默认 * @author Administrator * */public class CollectionLazyTest1 extends TestCase {public void testLoad1() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出sqlSystem.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//会发出sqlfor (Iterator iter=students.iterator(); iter.hasNext();) {Student student = (Student)iter.next();System.out.println("student.name=" +student.getName());}session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}public void testLoad2() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出sqlSystem.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//会发出查询该班级全部学生的sql语句,存在效率问题System.out.println("count=" + students.size());session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}

package com.bjpowernode.hibernate;import java.util.Iterator;import java.util.Set;import org.hibernate.Session;import junit.framework.TestCase;/** * 将<set>标签上的lazy设置为false,其他默认 * @author Administrator * */public class CollectionLazyTest2 extends TestCase {public void testLoad1() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出两条查询语句,分别查询班级和学生System.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//不会发出sqlfor (Iterator iter=students.iterator(); iter.hasNext();) {Student student = (Student)iter.next();System.out.println("student.name=" +student.getName());}session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}public void testLoad2() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出两条查询语句,分别查询班级和学生System.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//不会发出sqlSystem.out.println("count=" + students.size());session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}

package com.bjpowernode.hibernate;import java.util.Iterator;import java.util.Set;import org.hibernate.Session;import junit.framework.TestCase;/** * 将<set>标签上的lazy设置为extra,其他默认 * @author Administrator * */public class CollectionLazyTest3 extends TestCase {public void testLoad1() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出sqlSystem.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//会发出sqlfor (Iterator iter=students.iterator(); iter.hasNext();) {Student student = (Student)iter.next();System.out.println("student.name=" +student.getName());}session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}public void testLoad2() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//不会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//会发出sqlSystem.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//会发出一条智能的sql,如://Hibernate: select count(id) from t_student where classesid =?//建议集合上的lazy设置为extraSystem.out.println("count=" + students.size());session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}

package com.bjpowernode.hibernate;import java.util.Iterator;import java.util.Set;import org.hibernate.Session;import junit.framework.TestCase;/** * 将<class>上的lazy设置为false,其他默认 * @author Administrator * */public class CollectionLazyTest4 extends TestCase {public void testLoad1() {Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();//会发出sqlClasses classes = (Classes)session.load(Classes.class, 1);//不会发出sqlSystem.out.println("classes.name=" + classes.getName());//不会发出sqlSet students = classes.getStudents();//会发出sqlfor (Iterator iter=students.iterator(); iter.hasNext();) {Student student = (Student)iter.next();System.out.println("student.name=" +student.getName());}session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}