Hibernate调优之select new map()
Hibernate调优不只是设置一下lazy,调整一下由谁来维护这个字段而已。这次要说的是对查询语句进行优化mdash;mdash;select new
Hibernate调优之select new map()
[日期:2013-12-08] 来源:Linux社区 作者:jianxin1009 [字体:]
Hibernate调优不只是设置一下lazy,调整一下由谁来维护这个字段而已。
这次要说的是对查询语句进行优化——select new map()。
select new map语句结果说明。
语句一:
String hql=“select s.name from Student s”;
List ls=session.createQuery(hql).list();
for(String obj[]:ls){
System.out.pringln(obj[0]);
}
结果list中,每条记录对应一个object数组,object[]中每个元素为hql语句中列的序号(从0开始)。
语句二:
String hql=“select new map(s.name) from Student s”;
List ls=session.createQuery(hql).list();
for(Map m:ls){
System.out.pringln(m.get("0"));
}
结果list中,每条记录对应一个map,map中key为hql语句中的序号,从0开始,,key为字符,非数字。
语句三:
String hql=“select new map(s.name as name) from Student s”;
List ls=session.createQuery(hql).list();
for(Map m:ls){
System.out.pringln(m.get("name"));
}
结果list中,每条记录对应一个map,map中key为hql语句中的别名。
详解map
此处的map对应的是JDK中的HashMap。
个人理解是Hibernate在对此hql语句解析的时候,遇到map这个关键字,然后将后面的列作为值,别名作为键(若无别名,则用数字代替)存入到一个HashMap中。具体的代码没有看,谁有兴趣找到那段代码了发一下。
详解select new map的效率
我第一眼看到这个代码,第一感觉是这样降低了效率。因为涉及到对字段的分析。并且认为map不是jdk的map而是hibernate中mapping的那个map。
而mapping中的map只有一个构造函数new Map(PersistentClass owne)。所以我最刚开始认为是将字段封装成一个PersistentClass类,然后在new一个Map。
但是后来我发现并不是这个类,mapping中的类都是用来做映射文件用的,也就是说我的方向错了。
而用select new map这个语句到底是降低了效率还是提高了效率了呢?
简单说一下就是:你在写sql语句的时候,select * from效率高还是select 字段1,字段2 from 效率高?
答案很显然,前者效率一定不高于后者,因为后者可以只选择有用的数据进行传输。
现在再回来看select new map,不就是这个道理么?下面是我坐了几个例子进行了一下效率的对比(我用的是100条数据)。
单表查询
//开始查询
long startTime=System.currentTimeMillis();
String hql="select new map(u.name as name) from User u";
List
更多详情见请继续阅读下一页的精彩内容:
Hibernate 的详细介绍:请点这里
Hibernate 的下载地址:请点这里
Hibernate 中文手册 PDF

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)
