问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java框架hibernate中如何只关联其他对象的一部分属性

发布网友 发布时间:2022-04-13 15:20

我来回答

3个回答

懂视网 时间:2022-04-13 19:41

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 list;
list=session.createQuery(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("name"));
}
//循环读取完毕
time=(System.currentTimeMillis()-startTime);
System.out.println(numberFormat.format(time/1000));

更多详情见请继续阅读下一页的精彩内容:

Hibernate 的详细介绍:请点这里
Hibernate 的下载地址:请点这里

Hibernate 中文手册 PDF

linux

热心网友 时间:2022-04-13 16:49

其实无所谓的,你就算下面那两个属性写成private int aaa,private String bbb 这样都行,只要在User这个类里面写上getset方法,然后对应xml里面复制上两个字段改一下名字,变成aaa和bbb就行,到时候你hql语句变一下就行,比如select new Map(g.groupid as aaa,g.groupName as bbb,u.id,u,name) from User u join Group g 这样就行了,到时候你在页面直接用User里面的属性取就OK,没必要配什么东西。

热心网友 时间:2022-04-13 18:07

hibernate现在不是可以直接执行sql语句了么,再手动封装即可。直接写sql语句关联出需要的字段即可。hibernate项目中好像都不会去配置关联关系。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 没有es文件管理器,电视怎么装应用 艾草足贴变黑真的排毒吗 安卓APP哪个文件夹下的文件安装后可以在手机文件管理器里直接看见? RE文件管理器 怎么用来打开已经安装好的app? 安卓怎么把非系统软件放到app文件夹让他变成系统文件,比如es文件管理。 明明可以在ES之类的文件管理器里直接安装apk文件,那还需要apk安装器有啥用? 老北京足贴用了假货有害吗 安卓系统8.0为什么安装上第三方文件管理器(如ES文件浏览器)后修改外插SD卡有故障? ES文件管理器怎样安装应用程序 手机安装不了应用怎么安装那个RE文件管理器 换手机如何备份短信 没买到票,买的是全程票,中间我要下车在转车,网上显示行程冲突买不了,怎么办?火车票 苹果换手机怎么导短信 行程冲突怎么解决方法? 买火车票的行程冲突是怎么回事 荣威rx5保养怎么多,第三次保养,要一千,什么发动机松下板还要更换,什么质量 如何用工行的信用卡给支付宝充值 火车票出票失败,行程冲突怎么回事? 工商信用卡可以转账吗? 怎么用工行信用卡在支付宝付款啊? 白条逾期几天会怎么样 黑雾之源怎么打 黑雾之源的boss 闪电球单刷怎么办 地下城黑雾之源boss怎么打?那四个电球怎么吃 轻松筹的微爱通道没有达到目标金额,可以提现吗 黑雾之源单人怎么打 黑雾之源boss怎么打啊,感觉老是回血,吃血球 轻松筹微爱大病互助活动怎么激活不了? 淘宝里的买家好评率多久更新一次 为什么你买了很多东西 显示的那是那... 入党志愿书应该怎么写啊?之前不是团员可以申请入党吗? 不是团员交了入党申请书会被退回来吗 入党一定要是团员吗? 不入团还能入党吗 二郎神出场是孙悟空蟠桃宴上第几次大闹天宫之后的事 潍坊学院里的大一学生不是团员能申请入党吗? 毛笔的问题 西游记中杨戬出现在哪回 没有团员可以直接入党吗? 西游记二朗神出场 为何新版西游记当中的二郎神出场如此寒酸