Hibernate调优之selectnewmap()_第1页
Hibernate调优之selectnewmap()_第2页
Hibernate调优之selectnewmap()_第3页
Hibernate调优之selectnewmap()_第4页
Hibernate调优之selectnewmap()_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate调优之select new map() 分类: Hibernate 2013-07-19 21:42 6756人阅读 评论(24) 收藏 举报         Hibernate调优不只是设置一下lazy,调整一下由谁来维护这个字段而已。        这次要说的是对查询语句进行优化select new map()。        select new map语句结果说明。        语句一: 

2、       String hql=“select from Student s”;        List ls=session.createQuery(hql).list();        for(String obj:ls)                System.out.pringln(obj0);        

3、60;       结果list中,每条记录对应一个object数组,object中每个元素为hql语句中列的序号(从0开始)。         语句二:        String hql=“select new map() from Student s”;        List ls=session.createQuery(hql).list();        for

4、(Map m:ls)                System.out.pringln(m.get("0");                结果list中,每条记录对应一个map,map中key为hql语句中的序号,从0开始,key为字符,非数字。         语句三:        Str

5、ing hql=“select new map( as name)  from Student s”;        List ls=session.createQuery(hql).list();        for(Map m:ls)                System.out.pringln(m.get("name");      

6、0;         结果list中,每条记录对应一个map,map中key为hql语句中的别名。        详解map        此处的map对应的是JDK中的HashMap。        个人理解是Hibernate在对此hql语句解析的时候,遇到map这个关键字,然后将后面的列作为值,别名作为键(若无别名,则用数字代替)存入到一个HashMap中。具体的代码没有看,谁有兴趣找到那段代码了发一下。  &

7、#160;   详解select new map的效率        我第一眼看到这个代码,第一感觉是这样降低了效率。因为涉及到对字段的分析。并且认为map不是jdk的map而是hibernate中mapping的那个map。        而mapping中的map只有一个构造函数new Map(PersistentClass owne)。所以我最刚开始认为是将字段封装成一个PersistentClass类,然后在new一个Map。        但是后来我发现并

8、不是这个类,mapping中的类都是用来做映射文件用的,也就是说我的方向错了。        而用select new map这个语句到底是降低了效率还是提高了效率了呢?        简单说一下就是:你在写sql语句的时候,select * from效率高还是select 字段1,字段2 from 效率高?        答案很显然,前者效率一定不高于后者,因为后者可以只选择有用的数据进行传输。        现在再回来看select

9、 new map,不就是这个道理么?下面是我坐了几个例子进行了一下效率的对比(我用的是100条数据)。        单表查询        html view plaincopyprint?1. /开始查询  2.             long startTime=System.currentTimeMillis();  3. &#

10、160;           String hql="select new map( as name) from User u"  4.             List<Map> list;  

11、5.             list=session.createQuery(hql).list();  6.             /查询完毕  7.             double

12、60;time=(System.currentTimeMillis()-startTime);  8.             NumberFormat numberFormat=new DecimalFormat("0.000");  9.             System

13、.out.println(numberFormat.format(time/1000);  10.             /循环读取数据  11.             for(Iterator iter=list.iterator();iter.hasNext();)  12. &#

14、160;               Map map=(Map) iter.next();  13.                 System.out.println(map.get("name");  1

15、4.               15.             /循环读取完毕  16.             time=(System.currentTimeMillis()-startTime

16、);  17.             System.out.println(numberFormat.format(time/1000);  /开始查询long startTime=System.currentTimeMillis();String hql="select new map( as name) from User u"List<Map> list;list=session.cr

17、eateQuery(hql).list();/查询完毕double time=(System.currentTimeMillis()-startTime);NumberFormat numberFormat=new DecimalFormat("0.000");System.out.println(numberFormat.format(time/1000);/循环读取数据for(Iterator iter=list.iterator();iter.hasNext();)Map map=(Map) iter.next();System.out.println(map.get

18、("name");/循环读取完毕time=(System.currentTimeMillis()-startTime);System.out.println(numberFormat.format(time/1000);        开始和结束时间分别为:0.178,0.185html view plaincopyprint?1. /开始查询  2.             long 

19、startTime=System.currentTimeMillis();  3.             String hql="from User"  4.             List<Map> list;  5.  

20、           list=session.createQuery(hql).list();  6.             /查询完毕  7.             double time=(

21、System.currentTimeMillis()-startTime);  8.             NumberFormat numberFormat=new DecimalFormat("0.000");  9.             System.out.prin

22、tln(numberFormat.format(time/1000);  10.             /循环读取数据  11.             for(Iterator iter=list.iterator();iter.hasNext();)  12.   

23、;              User map=(User) iter.next();  13.                 System.out.println(map.getName();  14.   

24、0;           15.             /循环读取完毕  16.             time=(System.currentTimeMillis()-startTime);  17. &

25、#160;           System.out.println(numberFormat.format(time/1000);  /开始查询long startTime=System.currentTimeMillis();String hql="from User"List<Map> list;list=session.createQuery(hql).list();/查询完毕double time=(System.curre

26、ntTimeMillis()-startTime);NumberFormat numberFormat=new DecimalFormat("0.000");System.out.println(numberFormat.format(time/1000);/循环读取数据for(Iterator iter=list.iterator();iter.hasNext();)User map=(User) iter.next();System.out.println(map.getName();/循环读取完毕time=(System.currentTimeMillis()-sta

27、rtTime);System.out.println(numberFormat.format(time/1000);        开始和结束时间分别为:0.201,0.210        多表查询html view plaincopyprint?1. /开始查询  2.             long startTime=System.currentTimeMi

28、llis();  3.             /String hql="select new map( as name,a.username as username) from Role r,Admin a where r.id=a.role.id"  4.  &#

29、160;          String hql="select new map( as name,a.username as username) from Admin a join a.role r"  5.          

30、;   List<Map> list;  6.             list=session.createQuery(hql).list();  7.             /查询结束  8.     

31、        double time=(System.currentTimeMillis()-startTime);  9.             NumberFormat numberFormat=new DecimalFormat("0.000");  10.    &#

32、160;        System.out.println(numberFormat.format(time/1000);  11.             /读取数据  12.             for(Iterator 

33、;iter=list.iterator();iter.hasNext();)  13.                 Map map=(Map) iter.next();  14.                 Sy

34、stem.out.println(map.get("name")+","+map.get("username");  15.               16.             /读取完毕  17.   

35、0;         time=(System.currentTimeMillis()-startTime);  18.             System.out.println(numberFormat.format(time/1000);  /开始查询long startTime=System.currentTimeMillis();/St

36、ring hql="select new map( as name,a.username as username) from Role r,Admin a where r.id=a.role.id"String hql="select new map( as name,a.username as username) from Admin a join a.role r"List<Map> list;list=session.createQuery(hql).list();/查询结束double time=(System

37、.currentTimeMillis()-startTime);NumberFormat numberFormat=new DecimalFormat("0.000");System.out.println(numberFormat.format(time/1000);/读取数据for(Iterator iter=list.iterator();iter.hasNext();)Map map=(Map) iter.next();System.out.println(map.get("name")+","+map.get("u

38、sername");/读取完毕time=(System.currentTimeMillis()-startTime);System.out.println(numberFormat.format(time/1000);        开始和结束时间分别为:0.171,0.181html view plaincopyprint?1. /开始查询  2.             long startT

39、ime=System.currentTimeMillis();  3.             String hql="from Admin"  4.             List<Map> list;  5.   

40、;          list=session.createQuery(hql).list();  6.             /查询结束  7.             double time=(Syste

41、m.currentTimeMillis()-startTime);  8.             NumberFormat numberFormat=new DecimalFormat("0.000");  9.             System.out.println(n

42、umberFormat.format(time/1000);  10.             /读取数据  11.             for(Iterator iter=list.iterator();iter.hasNext();)  12.    

43、             Admin map=(Admin) iter.next();  13.                 System.out.println(map.getRole().getName()+","+map.getUserna

44、me();  14.               15.             /读取完毕  16.             time=(System.currentTimeMillis()-startTime);  17.  

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论