??xml version="1.0" encoding="utf-8" standalone="yes"?> public static void main(String[] args) { c=c+d; 在读完robbin的这两个_֍贴的时候,感觉清晰了很多,实好文章? 里面ȝ的很好了Q我l合以上三个帖子、自q试验Q版本hibernate-3.0.5Q和Hibernate文档也ȝ了一点,加深理解?strong>希望对刚开始学Hibernate的同学有所帮助?/strong> 一、saveorUpdate与unsaved-value Project project = new Project(); 1、默认unsaved-value="null" 2、unsaved-value="none"Q? 3、unsaved-value="any" Hibernate文中写? 2Q.主键p己来赋?/strong> Project project = new Project(); 1、默认unsaved-value="null" 3、unsaved-value="any" Qsave对象Q? 二、save与update操作 Hibernate文中写? 三、delete操作 以前删除我是q样写的 如果有联关p,需要把U联的子cM构造出来addq去Q同样可以删除?/p>
public static void main(String[] args) { System.out.println("Hello World"); } } 此外Q我对于staticQpublicQprivateQExceptionQtry{ }catch {}finally{}{等一开始都不是很懂Q都是把参考书上面的例子运行成功,然后开始破坏它Q不断的Ҏ自己心里面的疑问来重新改写程序,看看能不能运行,q行出来是个什么样子,是否可以得到预期的结果。这栯然比较费旉Q不q一个例子程序这样反复破坏几ơ之后。我对q个相关的知识彻底学通了。有时候甚x意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编E的掌握是及其深ȝ。其中特别值得一提的?a target="_bank">JDK有一个非常棒的调试功?verbose?/p>
java –verbose javac –verbose 以及其它很多JDK工具都有q个选项 -verbose 可以昄在命令执行的q程中,JVM都依ơ加载哪里ClassQ通过q些宝贵的调试信息,可以帮助我们分析出JVM在执行的q程中都q了些什么。另外,自己在学习过E中Q写的很多的q种破坏例程Q应该有意识的分门别cȝ保存下来Q在工作中积累的典型例程也应该定期整理,日积月篏Q自己就有了一个代码库了。遇到类似的问题Q到代码库里?Copy & Paste QSearch & ReplaceQ就好了Q极大提高了开发速度。最理想的情冉|把一些通用的例E自己再抽象一层,形成一个通用的类库,装好。那么可复用性就更强了。所以我觉得其实不是特别需要例E的Q自己写的破坏例E就是最好的例子Q如果你实在对自己写的代码不攑ֿ的话Q我强烈推荐你看看JDK基础cd的Java源代码。在JDK安装目录下面会有一个src.zipQ解开来就可以完整的看到整个JDK基础cdQ也是rt.jar的Java源代码,你可以参考一?a target="_bank">Sun是怎么写JavaE序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的l节的时候,往往会打开相应的类的源代码Q通过看源代码Q所有的问题都会一扫而空?/p>
如今的网l用户都被宠坏了。他们一旦在h公司(Google)或Flickr|站体验q快L响应和良好的互动功能后,传统的点?{待式的Web界面再也无法满他们的需求了。这些功能正是通过Ajax来实现的。由于Ajax所带来的商业h值日益凸玎ͼ微Y公司(Microsoft)?a target="_bank">开?/a>的开发者工作^?a target="_bank">Eclipse的支持者们Q最q正U极开发一些适合Ajax的^収ͼ以便用户能够方便地利用这U工h创徏互动式的Web应用?/p>
Ajax{网l开发工具和技术与传统的服务器端Y件不同。服务器端Y件普遍具有成熟的技术标准,而Ajax{网l开发技术尚q处在不断的变化中。Ajax是新兴的|络开发技术的象征。它?a target="_bank">JavaScript?a target="_bank">XML技术结合在一P用户每次调用新数据时Q无需反复向服务器发出hQ而是在浏览器的缓存区预先获取下次可能用到的数据,界面的响应速度因此得到了显著提升。Google公司的地图服?Google Maps)是Ajax应用最典型的例子之一?/p>
不久前,Eclipse开源项目的领导厂商Q包括国际商业机器公?IBM)、英特尔公司(Intel)、红帽公?Red Hat)和思爱普Y件系l公?SAP){宣布,把Eclipse从开发者工作^台扩展成能与微Y公司在企业市场展开竞争的新q_。在日前召开的EclipseCon大会上,Eclipse基金会执行ȝq克·cxU维?Mike Milinkovich)表示Q?#8220;今后3q_微Y公司可能会不断说服一些企业放弃Win32 APIQƈ转向(Windows)Vista?#8221;然而,cxU维奇却企业最好采用Eclipse的富客户q_。因为开发者采用这套组Ӟ可以在企业桌面应用E序创徏交互性更好的界面Q一ơ开发完毕后Q在视窗pȝ(Windows)?a target="_bank">Linux或者苹果系l上都能够运行?/p>
Eclipse行动 Eclipse目l正在设法ؓ用户提供除微软公品之外的更多选择。不久前Q该目l推Z一个开源项目Rich Ajax Platform(下称“RAP”)Q吸引开发h员用Eclipse来提供界面组Ӟ包括视窗风格的菜单、拖动条以及支持拖曳功能的弹出窗?Drag-and-Drop Window Expanders){,目的是Web应用在浏览器中更h交互性?/p>
不久前,IBM公司与Google公司、Laszlopȝ公司、Mozilla公司、网威公?Novell)、甲骨文公司(Oracle)、红帽公司和雅虎公司(Yahoo){多家企业,共同合作创徏了一开源项目Ajax Toolkit FrameworkQ旨在徏立一U基于Eclipse的Y件系l,以降低在Eclipseq_内用Ajax工具的难度。在此之前,使用Ajax开发程序ƈ不那么容易。Google公司是在开发Google Maps的过E中发现q一点的。它发现地图上标C的阴影或者两点之间的N路线Q都会因为浏览器的用差异而生不同的昄效果。不q,Google Maps产品l理布莱?#183;泰勒(Bret Taylor)也表C:“Google公司在创建工具包斚w投入了大量精力,因此大家对这些细节方面大可放心?#8221;Eclipse目在像Google公司q样的大公司帮助下,正在采用Google公司的方法,以便使所有企业都能更方便C用Ajax技术?/p>
而与此同Ӟ微Y公司也ƈ没有在原地踏步。在日前举行的微软网l技术大会上Q公怸席比?#183;盖茨(Bill Gates)发表了一主题演讌Ӏ盖茨在讲话中承认,C轮的Web应用热潮卛_到来。一些网站变得像传统软g的组件一P可以被API调用Q以及像子程序一栯行?#8220;现在Q富有创新想法的时代已经到来?#8221;盖茨表示Q?#8220;q是软g的新时代?#8221; 日前Q微软公司发布了一个自有Ajax开发工具?a target="_bank">Atlas的升U测试版。它可以在应用程序的客户端创建标准的JavaScript。微软公怹开发了ZJavaScript的服务器端扩展程序,来优化Ajax应用在视H电脑上的执行。这P用Atlas~写的YӞ可以与Windows Vista的各U元素生互动。而且Q采用Atlas~写的Web应用特别能够与Vista的其他程序生互动,比如日历、即旉讯联系人、照相簿和媒体播放Y件等。微软公司Web工具产品l理布赖?#183;戈d法伯(Brian Goldfarb)q透露_“公司正在考虑其他更丰富的应用场景Q从而可以更好地?a target="_bank">IE览器和视窗pȝq行配合? 不过Q微软公司在发布代号?#8220;Orcas”的下一版本Visual Studio Ӟ才会正式推出Atlas工具。因此,距离Atlas的面世还要等上好几年的时间。而与此同ӞEclipse却在利用Ajax工具包而快速发展?/p>
微Y公司的优势就在于Q能够把Atlas工具与公司的视窗pȝ、SQL Server数据库以及其他Y件整合在一赗不q,IBM公司也以开源代码的形式Q捐献出了Eclipse的核心工作^台技术,因ؓ它也希望Java工具拥有与微软公司类似的集成度?/p>
格雷?#183;斯坦?Greg Stein)是Google公司的工E经理?a target="_bank">Apache软g基金会主席以及Apache Web服务器等目的赞助h。斯坦因认ؓQ?#8220;Eclipse是一U集成的开发环境,因此会在一定程度上化Ajax应用的开发难度?#8221;而d国小型Y件公司Innoopract公司的管理ȝU亨·克劳?Jochen Krause)也预说Q这个^?#8220;会把Eclipse的应用扩展到一个不同的?a target="_bank">?/a>Q即互动Web应用领域?#8221;RAP目是p家公司提出的?/p>
单ؓ?/strong> Eclipse目会l企业带来一定的帮助。有了Eclipse工具包,他们无需掌握专门的JavaScript知识Q可以在Eclipse的框架下工作。而大多数C语言?a target="_bank">C++、Cobol、Java?a target="_bank">PHPE序员,对于Eclipse都不陌生。加拿大研究委员?National Research Council Canada)计算机系l官员丹?#183;辄?Danny D’amours)表示Q?#8220;我们的一些应用程序,响应旉会变得更快捷Q而且q能够有更好的在U互动?#8221;在Eclipse的Ajax framework目中,“Ajax会整合成ؓEclipse开发环境的一部分?#8221;辄补充说道?/p>
辄会考虑使用微Y公司的Atlas?看上去,他似乎对此不感兴。的,微Y和非微Y阵营的对抗似乎依然处于紧张状态。尽企业往往会同旉用Visual Studio与Eclipsebased的开发工P很可能也包括两者的Ajax和Web应用技术?/p>
企业通过使用AjaxQ可以强化网站的功能Q提高用户体验。他们可以滚动屏q浏览大量的信息Q或者方便地把物品拖入在U购物RQ或者在UK|品而无需不断地刷新页面。其实,不仅仅是Googleq样的公司在使用AjaxQLands’End|站和沃沃公司(Volvo){也在用Ajax技术让潜在的客戯计他们的产品或汽车,而且Sabre控股公司(Sabre Holdings)也采用了Ajax技术来减少其航I公司客户用的飞行计划软g的响应时间?/p>
factory = (ExampleInterface)c.newInstance();
class c = Class.forName(className); factory = (ExampleInterface)c.newInstance();
q些q来有些人离开公司Q写一些东西或书,对公司指手画脚、评头论뀁指Ҏ山,对公司的高层领导逐个点评一番,我个人感觉除了带来一些娱乐h|q有什么益处呢Q公司照样在发展Q发展的背后Q?万hU种梦想、努力、A献、牺牌Ӏ奋斗、抱怨、不满、沉淀、离厅R希望、失落;发展的背后,U种Z、重大决{、危机、失误等{的内在逻辑又岂是局外h说得清楚Q我不想多说公司Q只是想对自q工作l历好好反思反思,x自己做了什么努力,做了什么A献,做了什么自己最高兴、做了什么自己最受益、学C什么?d说来Q我在华为的十年是懵應|懂过来的Q当初我好像没有什么远大的理想、没有详l的规划Q只是想着把一件一件事情做好。通过自己的ȝ和反思,来我希望自p够更加有规划、更加清C炏V?br />
大概想了惻I我觉得有以下几点Q是q些q深有体会的l验和教训,值得今后再发扬?br />
一?#8220;从小事做P学会吃亏Q与他h合作”Q这是研I生毕业前最后一堂课Q电子电路的老师最后送给我们几句话,虽然我忘了这位老师的名字,但这几句话却至今铭记。在华ؓ的工作实践,发感受到这单的几条的道理深刅R从事做v不是一直满于做小事,也不是夸夸其谈好高骛q。学会吃亏不是忍受吃亏,是不斤斤计较于一时一地的是非得失Q是有勇气关键时候的攑ּ?br />
二?#8220;心有多大Q舞台就有多?#8221;Q我们很多的成功Q来自于敢想Q敢做,p我第一ơ接到问题单Q根本不懂,但敢去试Q敢去解冻Iq真的解决了Q就像我们做 SPESQ即使没人、没技术、没U篏Q还有CISCO{大公司也在做,我们也敢做,敢推行,不盲目崇拜或畏惧权威Q也取得了成功。当Ӟq不只是盲目的胆大,心大q意味着U极地关注广大的外部世界Q开阔宽容的心胸接受U种新鲜事物?br />
三?#8220;好好学习Q天天向?#8221;Q这句话用来形容对IT人的要求Q最贴切不过了。真正的成功者和专家都是“最不怕学?#8221;的hQ啥东西不懂Q拿q来学呗。我?IT现在有个技术大牛K博,其实他不是天生大牛,也是从外行通过学习成ؓ专家的,他自己有一ơ跟我说Q当q一开始做UNIXpȝ理员时Q看刎ͼ提示W大吃一惊,因ؓ自己用过多年在UNIX下搞开发都是%提示W,从未有过理员权限。看看专家的当初p水^Q当q跟我做备䆾目Ӟ我让他研I一?ORALCE数据库时点回退的备份和恢复ҎQ他望文生义Q以为数据库的回退是象人倒退走\一LQ这很有点幽默的味道了,但他天天早上hQ上班前先看一时书,多年U篏下来Q现在在pȝ、数据库、开发等多个领域已成为没人挑战的专家了。但是,学习l对不是光从书本学习Q其实更重要的是从实践工作中学习Q向周边学习。比如说我在华ؓ觉得学到最重要的一个理忉|“要善于利用逆境”Q华为在冬天的时候没有天天强调困难,而是提出“利用冬天的机会扭转全球竞争格局”q真的取得成功,如果没有q个冬天Q华为可能还要落后业界大腕更多年份;华ؓ在被CISCO赯时没有慌乱,而是U极应对Q利用了q次赯辑ֈ了花几亿金可能达不到的提高知名度的效果。等{这些,把几乎是灭顶之灾的境遇反而{化ؓ成功的有利条ӞҎ留下的印象十分深刻,也对公司高层十分佩服?br />
四、勇于实践,勇于犯错Q善于反思。很多事情知易行难,关键是要有行动,特别是管理类的一些理论、方法、观c空谈、空规划一点用处都没有Q不如实际把它做出来Q做出来后不断反思改q,实实在在最有说服力。没有实践中的反复演l和反思,即是h人皆知的东西要做好都其实不容易,举个例子,比如做管理者要会們Q我惛_?9.9%的管理者都很懂q一点,但实际做的如何呢Q华为有多少理者做C不打断别话?不急于下结论给定义Q不急于提供解决ҎQ有多少理者能够做到自然地引导Ҏ表达Q问问对Ҏ受?认自己明白ҎQ?br />
五、要有方法、有套\Q对问题pȝ思考、对解决Ҏ有战略性的设计。在前几q的工作中,׃取得了一Ҏ功,技术上也有了一点研IӞ开始夜郎自大v来了Q后来公司化重金h了大扚w问,一开始对有些Nq真不怎么感冒。后来几q公司规模越来越大、IT的复杂性越来越增加的情况下Q逐渐理解了很多。西方公司职业化的专Ӟ做Q何事情都有方法论、有套\Q甚至于如何开一个会都有很多套\Q后来我对这些套路的研究有了兴趣Q自己ȝZ不少套\q给部门的骨q培训和讨论。在一个复杂的环境下,很多问题已经不能׃Z来研I和解决Q非帔R要系l性的Ҏ和战略性的眼光。对于一个组l的q作来讲Q制度和程的设计尤光要这一炏V爱恩斯坦说q:We can't solve problems by using the same kind of thinking we used when we created them.
六、独立思考,不h云亦云。公司大了,人多了,h子也Ҏ了。h很容易陷入随波逐流、不深入业务的境圎ͼ而看不到问题和危险。专家有q一个研IӞ雪崩发生Ӟ一般受完都是一批一批的Q很有单个人的受害者,原因很简单,单个人在雪崩多发C相当心和警觉。但一个群体,体大Q每个个体就会有一U虚qȝ安全感和Z亦云的判断,但现实是不管体的力量有多大Q雪崩都是不可抵抗的。因此我觉得在大的机构里Q保持独立思考的能力ؓ重要?br />
七、少抱怨、少I、积极主动,多干实事。我曄是个抱怨很多的愤青Q经常容易陷入抱怨之中。但多年的工作得我有所转变Q因为知道了抱怨是最无济于事的。世界上永远有不完美的事情,永远有麻烦,唯一的解决之道是面对它,解决它。做实实在在的事情,改变我们不满的现Ӟ改变我们不满的自己。实际上也有很多值得抱怨的事情都是我们自己一手搞出来的,比如C会上很常见的是高q部退下来了,抱怨h心不古、感慨世态炎凉,如果好好LI一下,原因很可能是他权位在手春风得意时不可一世、视他h如粪土造成的?br />
八、对职业负责、对目标负责Q对自己负责Q成功者往往自觉自律、信守承诺、心无旁骛。大企业肯定会有l效考核、会有论功行赏、会有KPI、会有领导指C、甚至会有一点企业政治,但如果我们片面地q求考核成W、片面追求KPI指标、片面追求权钱利益,片面地对上负责、对别h负责Q而不对自p责、不对自q目标负责Q失d作的使命感、责d、热情和好奇心,必将不能辑ֈ自己的最佛_界。而一个企业如何能够成功营造一个环境,让每个个体尽量发挥到最佛_界,企业也会战无不胜?br />
九、多点h文修d审美情趣Q看h与工作不怎么相关Q其实太相关了。杰出成q取得M开对美的境界的q求Q最伟大的科学发玎ͼ往往蕴涵着U序、简z和。缺乏一点审的q求Q什么UGLY的事情都敢做、不择手Dc凡事凑合,一炚w?#8220;高雅”Q必不能长久?br />
十?#8220;大家好,才是真的?#8221;Q关注hQ帮助hQ真诚待人,厚道做h。快速发展的CC会Q由于媒体的作用Q过分渲染了ZZ间日益冷漠、诡诈的关系Q但实际的社会、社区可能真的不是那么回事,L我来华ؓ之前Q对一个大企业中工作的Z关系开始还有点未知的恐惧,但实际上在这个集体中的感觉几乎h人都能开放、真诚相待,关系融洽和谐。所以关键是我们自己要能够真诚对待他人,在与他h互动中将心比心。当Ӟ工作中的冲突是不可避免的Q实际上冲突也是没有必要去避免,甚至很多冲突对组l来Ԍ是大有益处的。就象夫d一架后感情往往更好。只要我们掌握两大原则:1Q对事不对hQ?Q与Zؓ善。就肯定能把适度的冲H引导到对自己、对l织都有利的方向?br />
十一、开攑֒分n的态度Q在一个高U技公司工作Q如果报着保守和封闭的心态,成长肯定会受阅R?br />
十二、做好时间管理。在华ؓ工作十年Q?650天,工作?000天左叻Iq些旉是不是花在最重要的事情上了,有效的、有产出的工作时间究竟有多少Q实在值得怀疑。时间管理是我在华ؓ工作当中最大的教训之一Q可能也是公司整体性的问题Q工作缺乏计划,l常是面临不断的被打断;或者是不断L断同事下属;或者是不断的会议、讨论,占去l大部分的时_或者是被自q兴趣所牵引Q花大量旉搞一些不着辚w的事情;或者是花很多时间在一些细枝末节的事情上,把很隑־重要的事情一直拖到非解决不可的地步然后被q仓促行事。现在回惻I如果真的能管理好q十q时_我觉得成应该大很多?br />
]]>
在Struts1.*中,要想讉Krequest、response以及session{Servlet对象是很方便的,因ؓ它们一直是作ؓ形参在各个方法之间进行传递的Q而在Struts2中我们就很难看到它们的芳t了Q因为我们获得表单中的值都是通过预先讄好了的getҎ来得到的Q那么如果有些参数我们必通过request.getParametre或者session.getAttribute来得刎ͼ那么应该怎么做呢Q按照Max的教E上的说法,可以分ؓ两种QIoC方式和非IoC方式Q如何理解这两种方式的区别呢QIoC是Spring里面的特征之一Q字面意思是反{控制Q说白了是依赖注入Q比方说cA依赖cBQ那么就d的给A注入一个类B的对象,下面看一下这两种Ҏ的具体实现?br />
1Q非Ioc方式
q种方式主要是利用了com.opensymphony.xwork2.ActionContextcM及org.apache.struts2.ServletActionContextc,具体的方法如下所C?br />
获得request对象Q?br />
AQHttpServletRequest request = ServletActionContext.getRequest ();
BQActionContext ct= ActionContext.getContext()
HttpServletRequest request=(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);
获得session对象Q?br />
在Struts2中底层的session都被装成了MapcdQ我们称之ؓSessionMapQ而^常我们所说的session则是指HttpSession对象Q具体的获得Ҏ如下所C?br />
AQMap session=ActionContext.getSession();
BQMap session=(Map)ActionContext.getContext().get(ActionContext.SESSION);
得到q个SessionMap之后我们可以对sessionq行d了,如果我们惛_到原始的HttpSession可以首先得到HttpServletRequest对象Q然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作Q我们不必再ȝ底层的session了?br />
2QIoC方式
q种方式相对来说变化比较少了,具体程如下所C?br />
获得request对象Q?br />
W一步:让action实现ServletRequestAware接口
W二步:在action中声明一个HttpServletRequestcd的实例变?br />
W三步:在action中实现ServletRequestAware接口的setServletRequestҎQ实现方式很单,如下所C?br />
private HttpServletRequest request;
publicvoid setServletRequest(HttpServletRequest request) {
this.request = request;
}
获得Session对象(注意Q此时的session是SessionMapcd)Q?br />
W一步:让action实现SessionAware接口
W二步:在action中声明一个HttpServletRequestcd的实例变?br />
W三步:在action中实现SessionAware接口的setSessionҎQ实现方式很单,如下所C?br />
private Map session;
publicvoid setSession(Map session) {
this. session = session;
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1721226
]]>
java的几U数值基本类型:int,short,long,float,double
试代码Q?br />
short x = 100;
long b = 2;
int a = 2;
double y=1.1;
float z=(float) 1.2;
double c=1.1;
float d=(float) 1.2;
a=x+a;
x+=1.1;
b=b+a;
y=y-1;
z=z-1;
c=c+1;
d=d+1;
System.out.println(a);
System.out.println(x);
System.out.println(b);
System.out.println(z);
System.out.println(y);
System.out.println(c);
System.out.println(d);
System.out.println(c);
c=c-d;
System.out.println(c);
d=(float) (d-1.1);
System.out.println(d);
}
q行l果Q?br />
102
101
104
0.20000005
0.10000000000000009
2.1
2.2
4.3000000476837155
2.0999999999999996
1.1
试说明Q?br />
不同cd数据做计时按照计算中最大范围数据类型返回,例如Qa=x+a;(如果负值对象是较小范围的类型就需要强转类型,否则会报?
doublecd做加时运精度准,做减q算时有_ֺ偏差Q且和floatcd怺作加减操作都会出现精度缺失;
+=W号做运不牉|cd转换问题Q按照负值对象的cdq回?br />
]]>
最q遇到问题才开始有看了一下?/p>
http://www.javaeye.com/topic/2712
http://www.javaeye.com/topic/1604?page=1
q有q个_֍?
http://www.javaeye.com/topic/7484
也很不错?/p>
到底是savaq是update
Hibernate需要判断被操作的对象究竟是一个已l持久化q的持久对象q是临时对象?
1Q.主键Hibernate的id generator产生
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="increment" />
</id>
project.setId(XXX);
this.projectDao.saveOrUpdate(project);
主键是对象类型,hebernate判断project的主键是否位nullQ来判断project是否已被持久?/strong>
是的话,对project对象发送save(project)Q?
若自p|了主键则直接生成update的sqlQ发送update(project)Q即便数据库里没有那条记录?
主键是基本类型如int/long/double/
自己讄unsaved-null="0"?
所以这L话save和update操作肯定不会报错?/p>
׃不论主键属性ؓM|都不可能为noneQ因此HibernateL对project对象发送update(project)
׃不论主键属性ؓM|都肯定ؓanyQ因此HibernateL对project对象发送save(project)Qhibernate生成主键?/p>
saveOrUpdate()完成了如下工作:
如果对象已经在这个session中持久化q了Q什么都不用?
如果对象没有标识|调用save()来保存它
如果对象的标识gunsaved-value中的条g匚wQ调用save()来保存它
如果对象使用了版?version或timestamp),那么除非讄unsaved-value="undefined",版本查会发生在标识符查之?
如果q个session中有另外一个对象具有同L标识W,抛出一个异?
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="assigned" />
</id>
project.setId(XXX);
this.projectDao.saveOrUpdate(project);
q时有所不同Qhibernate会根据主键生一个selectQ来判断此对象是否已被持久化
已被持久化则updateQ未被持久化则save?
2、unsaved-value="none"Qupdate对象Q同?/p>
如果自己自己讄的ID在数据库中已存在Q则报错?/p>
昑ּ的用session.save()或者session.update()操作一个对象的时候,实际上是用不到unsaved-value?
在同一SessionQsave没什么可说得
update对象? 最直接的更改一个对象的Ҏ是load()它,保持Session打开Q然后直接修改即?
Session s =…
Project p = (Project) sess.load(Project.class, id) );
p.setName(“test”);
s.flush();
不用调用s.update(p);hibernate能察觉到它的变化Q会自动更新。当然显C用的话也不会?/p>
update()Ҏ在下列情形下使用Q?
E序在前面的session中装载了对象
对象被传递到UIQ界面)?
对该对象q行了一些修?
对象被传递回业务?
应用E序在第二个session中调用update()保存修改
删除时直接自己构造一个project卛_删除
this.projectDao.delete(preojct);
public void deleteProject(String id) {
Project project = (Project) this.projectDao.get(Project.class, id);
if (project != null) {
this.projectDao.delete(project);
}
卌样也是可以的
Project project = new Project();
project.setId(id);
this.projectDao.delete(project).
关于设计模式我觉得不用学太多Q但以下三个模式是学习Spring必不可少的:factory模式Q包括简单工厂和抽象工厂Q,Strategy模式QTemplate method模式。如果不掌握q些你就Ҏ没法领悟Spring的精髓,只能依样画葫芦地照搬Q这是很可怕的事?
我这里强烈徏议的书可能让人有Ҏ外,那就是Expert one on one J2EE design and development的第四章Q这一章不仅仅是Spring初学者,而是M搞Java开发的人必ȝ一章。经典!
二、接下可以看一些Spring的入门书c?
其实我自己没怎么看过q方面的书,我当时只看过Spring的referenceQ不q现在这斚w的书好象多的是,而Spring reference看v来还是有些吃力的。JavaEye上很多h夏昕的Spring开发指南,据说入门很容易。另外的入门书应该是Spring live或Spring in action。我大概扫了一下,Spring live是一本只讲怎么做而不讲ؓ什么的书,我不太喜Ƣ(偶尔参考一下倒不错)Q不q有些h特别喜欢q样的书Q看自己的个人爱好吧?
三、研I几个用Spring做的开源项?
理论q是要与实际l合Q所以看完书后是要看实际的项目的。很多h喜欢appfuseQ我觉得appfuseq东西太多Q真正实质性的内容又太。我更喜ƢSpring自带的jpetstoreQ这是一个非常完整的例子Q看完后Spring的基本用法应该都能掌握?
四、开始做实际的项?
在上q这些都完备以后Q我觉得应该要去实际目中锻g。当然ƈ不是每h都有q样的机会的Q这时只能自己做个玩具项目啦。项目的ȝ是非常关键的Q其实每个h都清楚,我就不重复了?
五、l深入学?
l过目的锤|对Spring的用法和原理有了一定的了解的时候,才有可能真正掌握Spring的精髓。这时要ȝ书才是Rod Johnson的三本经典名著,分别是:
Expert one on one J2ee design and development
Expert one on one J2ee without EJB
Professional Java Development with SpringFramework
前两本书的经典程度我׃说了Q只有读了它们,才能真正了解Spring的设计意图,掌握Spring的精髓?
W三本书是我强烈不徏议初学者读的书。里面的东西深入而全Q但是原理讲解得又不够深Q很Ҏ让初学者犯qL。但是却是Spring的高U用户必ȝ一本书Q还有一本pro Spring据说也不错,不过我没读过Q。我q几天会写一下这本书的书评?
当然q个阶段与第四阶D|交错的,边读书边做项目学到的东西才会更多的?
六、分析源代码Q扩展Spring
有h认ؓ没有必要分析Spring的源代码Q因是很累h又不计好的事。但是要x为Spring的高U用Pq是必经的阶Dc在学习的过E中Q我们学到的不仅是SpringQ更重要的是他的设计思想。不怎样Q看牛h的源代码是绝Ҏ好处的。不q这是一个很累h的过E,要有思考准备哦Q?/p>
]]>
public class HelloWorld {
很多初学者不是很理解Z么mainҎ一定要q样来定义public static void main(String[] args)Q能不能不这样写?包括我刚学习Java的时候也有这L疑问。想知道{案?很简单,你把main改个名字q行一下,看看报什么错误,然后Ҏ出错信息q行分析;把main的public取掉Q在试试看,报什么错?staticLq能不能q行;不知道mainҎ是否一定要传一个String[]数组的,把String[]ҎQ改?a target="_bank">int[]Q或者String试试?不知道是否必dargs参数名称的,也可以把argsҎ别的名字Q看看运行结果如何。我当初学习Java的时候就是这样做的,把Hello WorldE序反复改了七八ơ,不断q行Q分析运行结果,最后就d明白Z么mainҎ是这样定义的了?
其中ExampleInterface是Example的接口,可以写成如下形式Q?/p>
class c = Class.forName(“Example”);
q一步可以写成如下Ş式:
String className = "Example";
String className = readfromXMlConfig;//从xml 配置文g中获得字W串
class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(); |
?a target="_bank">JVM的角度看Q我们用关键字new创徏一个类的时候,q个cd以没有被加蝲。但是用newInstance()Ҏ的时候,必M证:1、这个类已经加蝲;2、这个类已经q接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,q个静态方法调用了启动cd载器Q即加蝲java API的那个加载器?/p>
现在可以看出QnewInstance()实际上是把newq个方式分解Z步,即首先调用Class加蝲Ҏ加蝲某个c,然后实例化?q样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灉|性,提供l了一U降耦的手段?/p>
最后用最单的描述来区分new关键字和newInstance()Ҏ的区别:
newInstance: q型。低效率。只能调用无参构造?/p>
new: 强类型。相寚w效。能调用Mpublic构造?/p>