4.hql查询实体:测试
2016-06-25 09:32
232 查看
package com.bjpowernode.hibernate; import java.text.SimpleDateFormat; import java.util.Date; import org.hibernate.Session; public class InitData { public static void main(String[] args) { Session session = HibernateUtils.getSession(); try { session.beginTransaction(); for(int i=0; i<10; i++){ Classes classes = new Classes(); classes.setName("班级"+i); session.save(classes); for(int j=0; j<10; j++){ Student student = new Student(); student.setName("班级"+i+"的学生"+j); student.setCreateTime(randomDate("2009-07-01","2009-09-01")); //在内存中建立由student指向classes的引用 student.setClasses(classes); session.save(student); } } for(int i=0; i<5; i++){ Classes classes = new Classes(); classes.setName("无学生班级"+i); session.save(classes); } for(int i=0; i<10; i++){ Student student = new Student(); student.setName("无业游民"+i); session.save(student); } session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally{ HibernateUtils.closeSession(session); } } /** * 获取随机日期 * @param beginDate 起始日期,格式为:yyyy-MM-dd * @param endDate 结束日期,格式为:yyyy-MM-dd * @return */ private static Date randomDate(String beginDate,String endDate){ try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date start = format.parse(beginDate); Date end = format.parse(endDate); if(start.getTime() >= end.getTime()){ return null; } long date = random(start.getTime(),end.getTime()); return new Date(date); } catch (Exception e) { e.printStackTrace(); } return null; } private static long random(long begin,long end){ long rtn = begin + (long)(Math.random() * (end - begin)); if(rtn == begin || rtn == end){ return random(begin,end); } return rtn; } }
package com.bjpowernode.hibernate; import java.util.Iterator; import java.util.List; import org.hibernate.Session; import junit.framework.TestCase; /** * 实体对象查询 * @author Administrator * */ public class SimpleObjectQueryTest1 extends TestCase { @SuppressWarnings("unchecked") public void testQuery1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //返回Student对象的集合 //可以忽select关键字 List students = session.createQuery("from Student").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //返回Student对象的集合 //可以忽select关键字,可以加入别名 List students = session.createQuery("from Student s").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery3() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //返回Student对象的集合 //可以忽select关键字,可以采用as命名别名 List students = session.createQuery("from Student as s").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery4() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //返回Student对象的集合 //如果使用select查询实体对象,必须使用别名 List students = session.createQuery("select s from Student s").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery5() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不支持select * from .....,这种语法 List students = session.createQuery("select * from Student s").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } 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.List; import org.hibernate.Session; import junit.framework.TestCase; /** * 实体对象查询 * @author Administrator * */ public class SimpleObjectQueryTest2 extends TestCase { @SuppressWarnings("unchecked") public void testQuery1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); /** * 采用list查询实体对象会发出一条查询语句,取得实体对象数据 * * Hibernate: select student0_.id as id0_, student0_.name as name0_, * student0_.createTime as createTime0_, student0_.classesid as classesid0_ * from t_student student0_ */ List students = session.createQuery("from Student").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); /** * 会出现N+1问题,所谓的N+1指的是发出了N+1条sql语句 * * 1:发出一条查询id列表的语句 * Hibernate: select student0_.id as col_0_0_ from t_student student0_ * * N:根据id发出N条sql语句,加载相关的对象 * Hibernate: select student0_.id as id0_0_, student0_.name as name0_0_, * student0_.createTime as createTime0_0_, student0_.classesid as classesid0_0_ * from t_student student0_ where student0_.id=? * */ Iterator iter = session.createQuery("from Student").iterate(); while (iter.hasNext()) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery3() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); List students = session.createQuery("from Student").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } System.out.println("-----------------------------------------------------"); /** * 避免了N+1问题 * * 因为执行list操作后会将数据放到session的缓存中(一级缓存),所以采用iterate的时候 * 首先会发出一条查询id列表的语句,再根据id到缓存中加载相应的数据,如果缓存中存在与之匹配的数据 * 则不再发出根据id查询的sql语句,直接使用缓存中的数据 * * Iterate方法如果缓存中存在数据,它可以提高性能,否则出现N+1问题 * */ Iterator iter = session.createQuery("from Student").iterate(); while (iter.hasNext()) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } @SuppressWarnings("unchecked") public void testQuery4() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); List students = session.createQuery("from Student").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } System.out.println("-----------------------------------------------------"); /** * 再此发出查询语句 * * 在默认情况下,每次执行list查询实体对象都会发出查询语句,除非配置了查询缓存 * 虽然一级缓存中存在Student数据,但list不用,所以仍然发出查询语句, * * 其实list就是只向缓存中放入数据,而不利用缓存中的数据 */ students = session.createQuery("from Student").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
相关文章推荐
- 1.hql查询实体:Object,hbm
- 5.hql简单属性查询:总结
- 2.hql简单属性查询:工具类
- 3.hql简单属性查询:hibernate.cfg.xml
- MySQL中Union子句不支持order by的解决方法
- 1.hql简单属性查询:Object,hbm
- 编写一个jsp程序,实现用户登录,当用户输入的用户或密码错误时,将页面重定向到错误提示页,并在该页面显示30秒后 自动回到用户登录界面
- 安装get_homologues
- 秦谊:区块链目前还未达到大型商业应用阶段
- 如何成为资源整合高手
- iOS sqlite3数据库解析
- (Android)The connection to adb is down, and a severe error has occured.解决方法
- Codeforces Round #359 (Div. 2) A. Free Ice Cream 水题
- 生产者消费者模型(二)-引入ArrayBlockingQueue
- 《算法竞赛入门经典》学习笔记 2.4.4 C++中的输入输出
- 让客户自我成交的秘笈
- c++中位运算
- 生产者消费者模型你知道多少
- 比较不同的单元格的值,设置不同的颜色
- win7远程Ubuntu服务器