仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 689|回复: 9
打印 上一主题 下一主题

[学习教程] 了解下JAVA的Hibernate中outerjoin、fetch join的利用

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:14:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)
1、outer-join关头字(many-to-one的情形)
outer-join关头字有3个值,分离是true,false,auto,默许是auto。
true:暗示利用外毗连抓取联系关系的内容,这里的意义是当利用load(OrderLineItem.class,"id")时,Hibernate只天生一条SQL语句将OrderLineItem与他的父亲Order全体初始化。
select*fromOrderLineItemoleftjoinOrderpono.OrderId=p.OrderId whereo.OrderLineItem_Id=?
false:暗示不利用外毗连抓取联系关系的内容,当load(OrderLineItem.class,"id")时,Hibernate天生两条SQL语句,一条查询OrderLineItem表,另外一条查询Order表。如许的优点是能够设置提早加载,此处要将Order类设置为lazy=true。
select*fromOrderLineItemowhereo.OrderLineItem_Id=?
select*fromOrderpwherep.OrderId=?
auto:详细是ture仍是false看hibernate.cfg.xml中的设置
注重:假如利用HQL查询OrderLineItem,如fromOrderLineItemowhereo.id=id,老是不利用内部抓取,及outer-join生效。
2、outer-join(汇合)
因为汇合能够设置lazy="true",以是lazy与outer-join不克不及同时为true,当lazy="true"时,outer-join将一向是false,假如lazy="false",则outer-join用法与1同
3、HQL语句会将POJO设置文件中的联系关系一并查询,即便在HQL语句中没有明白join。
4、InHQL,the"fetchjoin"clausecanbeusedforper-queryspecificouterjoinfetching.Oneimportantthingmanypeoplemissthere,isthatHQLquerieswillignoretheouter-joinattributeyouspecifiedinyourmapping.Thismakesitpossibletoconfigurethedefaultloadingbehaviourofsession.load()andsession.get()andofobjectsloadedbynavigatingrelationship.Soifyouspecify
andthendo
MyObjectobj=session.createQuery("fromMyObject").uniqueResult();
obj.getMySet().iterator().next();
youwillstillhaveanadditionalqueryandnoouter-join.Soyoumustexplicilyrequesttheouter-joinfetching:
MyObjectobj=session.createQuery(
"fromMyObjectmoleftjoinfetchmo.mySet").uniqueResult();
obj.getMySet().iterator().next();
Anotherimportantthingtoknowisthatyoucanonlyfetchonecollectionreferenceinaquery.Thatmeansyoucanjustuseonefetchjoin.Youcanhoweverfetch"one"referencesinaddition,asthissamplefromtheHibernateDocsdemonstrates:
fromeg.Catascat
innerjoinfetchcat.mate
leftjoinfetchcat.kittens
Wehaveonceconsideredliftingthislimitation,butthendecidedagainstit,becauseusingmorethanonefetch-joinwouldbeabadideagenerally:ThegeneratedResultSetbecomeshugeandisamajorperformanceloss.
Soalltogetherthe"fetchjoin"clauseisanimportantinstrumentHibernateusersshouldlearnhowtoleverage,asitallowstuningthefetchbehaviourofacertainusecase.
5、joinfetch与join的区分
假如HQL利用了毗连,可是没有利用fetch关头字,则天生的SQL语句固然有毗连,可是并没有取毗连表的数据,仍是必要独自的sql取数据,也就是selecta,b,d...中没有毗连表的字段
6、假如汇合被声明为lazy=true,在HQL中假如显式的利用joinfetch则提早加载生效。
7、在one-to-many的one端显式设置fecth="join",则不管怎样都接纳事后抓取(天生一个SQl),提早加载生效(天生两个SQL)
8、many-to-one的提早加载是在设置文件的class标签设置lazy="true",one-to-many和many-to-many的提早加载是在set标签中设置lazy="true"。而one-to-one不但要在calss标签设置lazy="true",并且要在one-to-one标签中设置constrained="true".

其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。
分手快乐 该用户已被删除
9#
发表于 2015-3-20 00:17:00 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
若天明 该用户已被删除
8#
发表于 2015-3-12 16:37:45 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-2 01:30:57 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
只想知道 该用户已被删除
6#
发表于 2015-2-24 03:25:27 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
爱飞 该用户已被删除
5#
发表于 2015-2-8 03:15:47 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
透明 该用户已被删除
地板
发表于 2015-2-5 10:57:26 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
莫相离 该用户已被删除
板凳
发表于 2015-1-27 23:20:55 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
兰色精灵 该用户已被删除
沙发
发表于 2015-1-26 22:42:01 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
若相依 该用户已被删除
楼主
发表于 2015-1-20 18:25:33 来自手机 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 21:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表