




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年程序员进阶算法与数据结构考试要点
- 人教版除法竖式教学课件
- 【教案版】小学五班级上册 武术
- 2025年专业备考指南初级工程师面试题预测与解析工程技术类
- 2025年特岗教师招聘考试历史专业知识与面试技巧详解
- 2025年初级软件测试工程师模拟题及面试技巧
- 2025年数据分析师实战技能模拟测试题库及答案详解
- 2025年财务会计招聘面试技巧及预测题详解
- 2025年电子商务运营专家老年人电商市场趋势分析预测题集
- 2025年特岗教师招聘考试备考策略与规划
- 医院培训课件:《黄帝内针临床运用》
- 峥嵘岁月 课件-2024-2025学年高中音乐人音版(2019) 必修 音乐鉴赏
- 《医院医疗技术临床应用管理制度》
- 建筑装饰工程涂料施工技术考核试卷
- 数字媒体艺术史全册完整教学课件
- 2024年人社法律法规知识竞赛考试题库及答案
- 知识题库-人社劳动知识竞赛测试题及答案(十五)
- 《民宿管家》课件-民宿管家之预订接待
- 部编小学语文单元作业设计四年级上册第三单元 3
- 《信号完整性测试》课件2
- 火电厂检修培训课件
评论
0/150
提交评论