仓酷云

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

[学习教程] 发布一篇在Hibernate中检索战略的使用详解

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

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

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

x
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,
Hibernate的检索战略包含类级别检索战略和联系关系级别检索战略。
类级别检索战略有当即检索和提早检索,默许的检索战略是当即检索。在Hibernate映照文件中,经由过程在<不着class>上设置lazy属性来断定检索战略。关于Session的检索体例,类级别检索战略仅合用于load办法;也就说,关于get、qurey检索,耐久化对象城市被当即加载而不论lazy是false仍是true.一样平常来讲,我们检索对象就是要会见它,因而当即检索是一般的选择。因为load办法在检索不到对象时会抛出非常(当即检索的情形下),因而我团体其实不倡议利用load检索;而因为<class>中的lazy属性还影响到多对一及一对一的检索战略,因而利用load办法就更没需要了。
联系关系级别检索战略有当即检索、提早检索和急切左外毗连检索。关于联系关系级别检索,又可分为一对多和多对多、多对一和一对一两种情形会商。
一对多和多对多联系关系干系一样平常利用<set>设置。<set>有lazy和outer-join属性,它们的分歧取值相对了检索战略。
1)当即检索:这是一对多默许的检索战略,此时lazy=false,outer-join=false.只管这是默许的检索战略,但假如联系关系的汇合是无用的,那末就不要利用这类检索体例。
2)提早检索:此时lazy=true,outer-join=false(outer-join=true是偶然义的),这是优先思索的检索体例。
3)急切左外毗连检索:此时lazy=false,outer-join=true,这类检索战略只合用于依托id检索体例(load、get),而不合用于query的汇合检索(它会接纳当即检索战略)。比拟于当即检索,这类检索战略削减了一条sql语句,但在Hibernate中,只能有一个设置成outer-join=true.
多对一和一对一检索战略一样平常利用<many-to-one>、<one-to-one>设置。<many-to-one>中必要设置的属性是outer-join,同时还必要设置one端联系关系的<class>的lazy属性(设置的可不是<many-to-one>中的lazy哦),它们的组合后的检索战略以下:
1)outer-join=auto:这是默许值,假如lazy=true为提早检索,假如lazy=false为急切左外毗连检索。
2)outer-join=true,有关于lazy,都为急切左外毗连检索。
3)outer-join=false,假如lazy=true为提早检索,不然为当即检索。
能够看到,在默许的情形下(outer-join=auto,lazy=false),对联系关系的one端对象Hibernate接纳的急切左外毗连检索。依我看,良多情形下,我们其实不必要加载one端联系关系的对象(极可能我们必要的仅仅是联系关系对象的id);别的,假如联系关系对象也接纳了急切左外毗连检索,就会呈现select语句中有多个外毗连表,假如个数多的话会影响检干脆能,这也是为何Hibernate经由过程hibernate.max_fetch_depth属性来把持外毗连的深度。关于急切左外毗连检索,query的汇合检索其实不合用,它会接纳当即检索战略。
关于检索战略,必要依据实践情形举行选择。关于当即检索和提早检索,它们的长处在于select语句复杂(每张表一条语句)、查询速率快,弱点在于联系关系表时必要多条select语句,增添了会见数据库的频次。因而在选择即检索和提早检索时,能够思索利用批量检索战略来削减select语句的数目(设置batch-size属性)。关于切左外毗连检索,长处在于select较少,但弱点是select语句的庞大度进步,多表之间的联系关系会是很耗时的操纵。别的,设置文件是逝世的,但程序是活的,能够依据必要在程序里显现的指定检索战略(大概常常必要在程序中显现指定急切左外毗连检索)。为了分明检索战略的设置效果怎样,能够设置show_sql属性检察程序运转时Hibernate实行的sql语句。

还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-20 18:32:36 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-25 19:42:08 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
柔情似水 该用户已被删除
地板
发表于 2015-2-3 17:54:57 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
爱飞 该用户已被删除
5#
发表于 2015-2-6 01:44:47 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
不帅 该用户已被删除
6#
发表于 2015-2-14 20:57:55 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
第二个灵魂 该用户已被删除
7#
发表于 2015-3-1 18:15:22 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再现理想 该用户已被删除
8#
发表于 2015-3-10 21:48:55 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
金色的骷髅 该用户已被删除
9#
发表于 2015-3-17 11:04:23 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
山那边是海 该用户已被删除
10#
发表于 2015-3-24 07:54:02 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 05:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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