??xml version="1.0" encoding="utf-8" standalone="yes"?>美国职业棒球比分牌kpc:BlogJava-Flyingis-随笔分类 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/category/4273.htmlTalking and thinking freely !<br> Flying in the world of Java and GIS !zh-cnTue, 27 Feb 2007 12:21:20 GMTTue, 27 Feb 2007 12:21:20 GMT60Hibernate的灵zM方便 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/01/14/28004.htmlFlyingisFlyingisSat, 14 Jan 2006 02:22:00 GMT//www.355548.live/flyingis/archive/2006/01/14/28004.html//www.355548.live/flyingis/comments/28004.html//www.355548.live/flyingis/archive/2006/01/14/28004.html#Feedback5//www.355548.live/flyingis/comments/commentRss/28004.html//www.355548.live/flyingis/services/trackbacks/28004.html    作者:Flyingis

    许多软g设计的思维都源于生zȝҎ面面Q可能存在某些设计思想q受^时生zL启_Q但它们面的情况却如此相象。Y件设计原本就是生zȝ一部分QY件设计的“灵zZ与“方侎?或“简侎?x世界万物的一个共同点?BR>
    Hibernate作ؓ行的企业应用和关系数据库之间的持久化中间gQ受到越来越多的x。虽然用Hibernate可以使得目易于l护Q帮助开发h员更好地处理复杂关系模型Q提供了很强的方便性,但却失去了JDBC原有的灵zL。如何在“灵zZ与“方侎쀝之间取舍、^衡显得重要v来?BR>
    不久?A href="/calvin/">江南白的一文?A id=viewpost1_TitleUrl href="/calvin/archive/2006/01/05/26791.html">ORM透明持久化方案面对的共同困境道出了现在ORM不尽如h意的地方Q除了网上,q有书本的前a{对Hibernate的众多赞之词外Q现在讨论它呆板、配|繁琐的声音也逐渐多了hQ最热闹的就是前D|?A >Ruby on Rails引vJ2EE阵营的骚动。个人对Java研究浅Q对Hibernate有一些用心得,下面所列出的不一定是Hibernate本n的缺P不之处希望大家拍砖指出?BR>
1.  提取表单中字典Value的不ѝ?BR>    字典一般由ID和NAME两个字段l成Q其ID号存储于数据库其他表中,当查询这些表信息ӞHibernate以List或Set形式q回的结果,没有办法IDhCZؓ对应的NAME。在JDBC中,可以直接通过Map来存储字典,通过map.getValue()来返回字典的倹{?BR>
2.  Hibernate内置映射cd复杂?BR>    在开发过E中Q时怼查找Hibernate映射cd--Javacd--标准SQLcd之间的关pR繁杂之处体现在两方面,一是各U数据库的数据类型和标准SQL之间会有一定的出入Q二是Hibernate映射cd虽然大部分和Javacd相同Q但也存在比较晦涩的地方Q例如charactercd对应Java的char / java.lang.Character / java.lang.StringQtext对应着Java的java.lang.String?BR>
3.  ID规定化生?BR>    Hibernate中内|标识符生成器给表单ID自动生成提供了方便,但却不能自定义各UID形式。开发过E中Q有旉要特定的IDh区分各种字典Q例如字?的ID号ؓ1AQ?A……,字典2的ID号ؓ1BQ?B……,当这些ID号存储在表单中时Q可以方便开发h员在数据库中查找各表单存储各cd典数据的情况Q方便调试,但用Hibernate生成器就失去了这U灵zL?BR>
    Hibernate的不?/FONT>|上已有很多讨论Q以上只是个人增加的几点体会。即使这PHibernate仍是一ƾ优U的持久层插gQ只是“灵zZ的背后隐藏着“复杂”,“方侎쀝的背后隐藏着“不侎쀝,如何取舍与^衡,q是看实际需要吧?/FONT>

Flyingis 2006-01-14 10:22 发表评论
]]>
Hibernate学习心得--性能优化 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2005/11/15/19809.htmlFlyingisFlyingisTue, 15 Nov 2005 02:22:00 GMT//www.355548.live/flyingis/archive/2005/11/15/19809.html//www.355548.live/flyingis/comments/19809.html//www.355548.live/flyingis/archive/2005/11/15/19809.html#Feedback2//www.355548.live/flyingis/comments/commentRss/19809.html//www.355548.live/flyingis/services/trackbacks/19809.html    作者:Flyingis
    
    在用Hibernateq行查询的时候大安会用到Hibernate~存Q其中Session~存即一块内存空_存放了相互关联的Java对象Q这些位于Session~存中的对象是持久化对象,SessionҎ持久化对象的状态变化来同步更新数据库。这个Session~存是Hibernate的一U缓存。此外,SessionFactory有一个内|缓存和一个外|缓存,即Hibernate的第二~存。而Hibernate正是׃q些~存的存在,才得其数据库操作效率提高,是_在提供了方便易操作的操作数据库数据的方式的同时保证了工作效率Q但是不能因此而免d之忧,需要在设计业务逻辑层的时候考虑使用最优的架构Q节省有效的pȝ资源。在查询斚wQHibernate主要从以下几个方面来优化查询性能Q?BR>
1.降低讉K数据库的频率Q减select语句的数目。实现手D包括:

    使用q切左外q接或迫切内q接索策略?BR>    对gq检索或立即索策略设|批量检索数目?BR>    使用查询~存?BR>
2.避免多余加蝲E序不需要访问的数据。实现手D包括:

    使用延迟索策略?BR>    使用集合qo?BR>
3.避免报表查询数据占用~存。实现手Dؓ利用投媄查询功能Q查询出实体的部分属性?BR>
4.减少select语句中的字段Q从而降低访问数据库的数据量。实现手Dؓ利用Query的iterate()Ҏ?BR>

    在插入和更新数据Ӟ要控制insert和update语句Q合理设|映属性来保证插入更新的性能Q例如,当表中包含许多字D|Q徏议把dynamic-update属性和dynamic-update属性都设ؓtrueQ这样在insert和update语句中就只包含需要插入或更新的字D,q可以节省数据库执行SQL语句的时_从而提高应用的q行性能?/FONT>

    q有什么其它的提升性能的方式希望和大家一赯论?/FONT>



Flyingis 2005-11-15 10:22 发表评论
]]>Hibernate学习心得--映射对象标识W?/title><link>//www.355548.live/flyingis/archive/2005/11/14/19658.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Mon, 14 Nov 2005 02:43:00 GMT</pubDate><guid>//www.355548.live/flyingis/archive/2005/11/14/19658.html</guid><wfw:comment>//www.355548.live/flyingis/comments/19658.html</wfw:comment><comments>//www.355548.live/flyingis/archive/2005/11/14/19658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.355548.live/flyingis/comments/commentRss/19658.html</wfw:commentRss><trackback:ping>//www.355548.live/flyingis/services/trackbacks/19658.html</trackback:ping><description><![CDATA[<FONT size=2>    作者:<A HREF="/flyingis/"><FONT color=#000080>Flyingis</FONT></A><BR><BR>    在关pL据库中的主键可分然主?h业务含义)和代理主?不具有业务含?Q其中代理主键可以适应不断变化的业务需求,因此更加行。代理主键通常为整数类型,与此对应Q在持久化类中野应该把OID定义为整数类型,Hibernate允许把OID定义为short、int和longcdQ以及它们的包装cd?BR><BR>    Hibernate提供了几U内|标识符生成器,每一U标识符生成器都有它的用范_应该Ҏ所使用的数据库和Hibernate应用的Y件架构来选择合适的标识W生成器。下面是几种常用数据库系l可使用的标识符生成器:<BR><BR>MYSQL: identity increment hilo native<BR>MS SQL Server: identity increment hilo native<BR>Oracle: sequence seqhilo hilo increment native<BR>夸^台开? native<BR><BR>    OID是ؓ持久化层服务的,它不具备业务含义Q而域对象位于业务逻辑层,用来描述业务模型。因此,在域对象中强行加入不具备业务含义的OIDQ可以看作是持久化层对业务逻辑层的一U渗透,但这U渗透是不可避免的,否则Hibernate无法徏立缓存中的对象与数据库中记录的对应关pR?BR><BR>    当然Q映中q包括自然主键的映射Ҏ。对于从头设计的关系数据库模型,应该优先考虑使用代理主键?/FONT><img src ="//www.355548.live/flyingis/aggbug/19658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.355548.live/flyingis/" target="_blank">Flyingis</a> 2005-11-14 10:43 <a href="//www.355548.live/flyingis/archive/2005/11/14/19658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate学习心得--Hibernate最单的描述 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2005/11/13/19584.htmlFlyingisFlyingisSun, 13 Nov 2005 05:14:00 GMT//www.355548.live/flyingis/archive/2005/11/13/19584.html//www.355548.live/flyingis/comments/19584.html//www.355548.live/flyingis/archive/2005/11/13/19584.html#Feedback0//www.355548.live/flyingis/comments/commentRss/19584.html//www.355548.live/flyingis/services/trackbacks/19584.html    作者:Flyingis

    在网上很多文章和论坛都在讨论HibernateQ初ơ接触HibernateQ当焉要知道它是什么,可以用来做什么。用单的语言来描qͼ可以认ؓHibernate是:

    它是q接Java应用E序和关pL据库的中间g?BR>    它对JDBC APIq行了封装,负责Java对象的持久化?BR>    在分层的软g架构中它位于持久花层Q封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑?BR>    它是一UORM(Object-Relation Mapping)映射工具Q能够徏立面向对象的域模型和关系数据库模型之间的映射?BR>
    在Java应用中用Hibernate包含以下步骤Q?BR>
1.创徏Hibernate的配|文件?BR>2.创徏持久化类?BR>3.创徏对象-关系映射文g?BR>4.通过Hibernate API~写讉K数据库的代码?/FONT>

Flyingis 2005-11-13 13:14 发表评论
]]>
Hibernate 2 升为Hibernate 3 的注意事[转蝲] - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2005/11/12/19518.htmlFlyingisFlyingisSat, 12 Nov 2005 11:29:00 GMT//www.355548.live/flyingis/archive/2005/11/12/19518.html//www.355548.live/flyingis/comments/19518.html//www.355548.live/flyingis/archive/2005/11/12/19518.html#Feedback0//www.355548.live/flyingis/comments/commentRss/19518.html//www.355548.live/flyingis/services/trackbacks/19518.html目的Q主要是那当前的目l手Q熟悉一下hibernate2和hibernate3的差别,l当前项目一Ҏ展的I间?BR>
1.首先hibernate2.jar替换为hibernate3.jar(hibernate-3.0.5)
  hibernate-tools.jar也替换成新的(从hibernate-tools-3.0.0.alpha4a扑և来的)

2.所有程序中的net.sf.hibernate替换为org.hibernate.
 
3.但是有例?BR>  net.sf.hibernate.expression.Expression换ؓorg.hibernate.criterion.Expression
  如果用eclipse,用ctrl+shift+o快捷键可以加快速度
 
4.在用hql查询时将
  createSQLQuery(hql,"c",EZCampaignDTO.class);改ؓcreateSQLQuery(hql).addEntity("c",EZCampaignDTO.class);
 
5.在批量插入时
  原来的int size = ((SessionFactoryImpl)(session.getSessionFactory())).getJdbcBatchSize()
  改ؓint size = ((SessionFactoryImpl)(session.getSessionFactory())).getSettings().getJdbcBatchSize();
 
6.在计count?BR>  原来的int size = ((Integer) session.iterate(hql).next()).intValue();
  改ؓint size = ((Integer) session.createQuery(hql).iterate().next()).intValue();
其中hql="select count(*) from " + DAOVar.contactClass;
 
7.q有是?hbm中的hibernate-mapping-2.0.dtd替换为hibernate-mapping-3.0.dtd
  Hibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0
 
8.hibernate.cfg.xml?BR>  Hibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0
  <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
 
9.hibernate.properties中类?BR> 
10.cache-config.xml?BR>   <provider className="net.sf.hibernate.cache.OSCacheProvider"/>替换?BR>   <provider className="org.hibernate.cache.OSCacheProvider"/>
 
11.classeshibernate.properties?BR>   hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
   hibernate.dialect=org.hibernate.dialect.SQLServerDialect
 
12.在自动外部模块部分有一个功能是Ҏ模版自动生成.hbm文g在load,l果出来?hbm中有问题:
   生成?nbsp;<composite-id unsaved-value="any" mapped="false">其中mapped="false" 出错。找了半天才发现在网上的hibernate-mapping-3.0.dtd文g有支持mapped="false"q个属性。而本地的hebernate3.0.5中的hibernate-mapping-3.0.dtd文g没有q个属性。晕Qhibernate也太不负责了吧。解军_法把hibernate-mapping-3.0.dtd copy到jboss\bin目录下然后,在template文g?lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "hibernate-mapping-3.0.dtd">Q然后他会在jboss\bin目录下读取该文g?BR> 
13.重新试,q是咣铛Q发现子c读父类数据时抛出异常:
   "org.hibernate.LazyInitializationException: could not initialize proxy"
   延迟抓取出的错,hb3对many-to-one的默认处理是lazy = "proxy"Q没有搞懂到底怎么回事Q把所有many-to-one,one-to-one都加上lazy="false"Q再试l于大功告成?BR>
文章原作者BlogQ?/FONT>::URL:://blog.csdn.net/chinaewolf/

Flyingis 2005-11-12 19:29 发表评论
]]>
Hibernate学习心得--软g设计阶段的模?/title><link>//www.355548.live/flyingis/archive/2005/11/12/19513.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 12 Nov 2005 11:14:00 GMT</pubDate><guid>//www.355548.live/flyingis/archive/2005/11/12/19513.html</guid><wfw:comment>//www.355548.live/flyingis/comments/19513.html</wfw:comment><comments>//www.355548.live/flyingis/archive/2005/11/12/19513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>//www.355548.live/flyingis/comments/commentRss/19513.html</wfw:commentRss><trackback:ping>//www.355548.live/flyingis/services/trackbacks/19513.html</trackback:ping><description><![CDATA[<P><FONT size=2>    作者:<A HREF="/flyingis/"><FONT color=#000080>Flyingis</FONT></A><BR><BR>    在科学和工程技术领域,模型是一个很有用途的概念Q它可以用来模拟一个真实的pȝ。在软g开发领域,模型用来表示真实世界的实体。在软g开发的不同阶段Q需要ؓ目标pȝ创徏不同cd的模型。在分析阶段Q需要创建概忉|型。在设计阶段Q需要创建域模型和数据模型。其中,域模型是面向对象的,数据模型是面向关pȝQ域模型和数据模型之间存在一U对?关系映射?BR><BR><B>概念模型</B><BR><BR>    概念模型清楚地显CZ问题域中的实体。不是技术h员还是非技术h员都能看得懂攚w模型Q他们可以很Ҏ地提出模型中存在的问题,帮助分析人员及早Ҏ型进行修攏V在软g设计域开发周期中Q模型的变更需求提出得晚Q所耗费得开发成本就大?BR><BR>    概念模型描述了每个实体得概念和属性,以及实体之间的关p:一对一、一对多和多对多。在现实生活中都可以扑ֈ相应的例子,例如一只母鸡有很多鸡是一对多关系Q一位客户选购了很多商品,而这些商品也可以被许多客户选购Q这是多对多关系?BR><BR><B>关系数据模型</B><BR><BR>    到目前ؓ止,关系数据库仍然是使用最q泛的数据库Q它存储的是关系数据。关pL据模型是在概忉|型的基础上徏立v来的Q用于描q这些关pL据的静态结构,它由以下内容l成Q?BR><BR>    一个或多个?BR>    表的所有烦?BR>    视图<BR>    触发?BR>    表与表之间的参照完整?BR><BR>    数据库Schema是对数据模型的实现。对于支持SQL的关pL据库Q可以采用SQL DDL语言来创建数据库Schema。SQL DDL 用于生成数据库中的物理实体,例如下面的创建CUSTOMERS表的 SQL DDLQ?BR><BR>    create table CUSTOMERS {<BR>      ID int not null,<BR>      NAME varchar(20),<BR>      AGE int,<BR>      primary key (ID)<BR>    };<BR><BR>    值得注意的是Q数据库Schema有两U含义,一U是概念上的SchemaQ指的是一lDDL语句集,该语句集完整地描qC数据库的l构。还有一U是物理上的SchemaQ指的是数据库中的一个名字空_它包含一l表、视囑֒存储q程{命名对象。物理Schema可以通过标准SQL语句来创建、更新和修改。例如以下SQL语句创徏了两个物理SchemaQ?BR><BR>    create schema SCHEMA_A;<BR>    create table SCHEMA_A.CUSTOMERS(ID int not null,…?;<BR><BR>    create schema SCHEMA_B;<BR>    create table SCHEMA_B.CUSTOMERS(ID int not null,…?;<BR><BR><B>域模?/B><BR><BR>    域模型由以下内容l成Q具有状态和行ؓ的域对象Q域对象之间的关pR?BR><BR>域对?BR><BR>1.实体域对象:代表人、地炏V事物或概念。通常Q可以把业务领域中的名词Q例如客戗订单、商品,当然也包括前面提到过的母鸡,作ؓ实体域对象;<BR>2.q程域对象:代表应用中的业务逻辑或流E。它通常依赖于实体域对象?BR>3.事g域对象:代表应用中的一些事Ӟ例如异常、警告或时{?BR><BR>域对象之间的关系<BR><BR>    在域模型中,cM间存在四U关pR?BR><BR>1.兌(Association)<BR>   <BR>    兌指的是类之间的引用关p,q是实体域对象之间最普遍的一U关pR关联可以分Z对一、一对多和多对多兌?BR><BR>2.依赖(Dependency)<BR><BR>    依赖指的是类之间的访问关pR如果类A讉KcB的属性或ҎQ或者说是A负责实例化BQ那么可以说cA依赖cB?BR><BR>3.聚集(Aggregation)<BR><BR>    聚集指的是整体与部分之间的关p,在实体域对象之间也很常见。例如,Z手就是聚集关p,在PersoncM׃个hands集合Q它存放被聚集的Hand对象Q?BR><BR>    public class Person {<BR>      private Set hands = new HashSet();<BR>      ………?BR>    }<BR><BR>4.一般化(Generalization)<BR><BR>    一般化指的是类之间的承关pR?BR><BR>域对象的持久化概?BR><BR>    当实体域对象在内存中创徏后,它们不可能永q存在。最后,他们要么从内存中清除Q要么被持久化到数据存储库中。内存无法永久地保存数据Q因此必d实体域对象进行持久化。否则,如果对象没有被持久化Q用户在应用q行时创建地订单信息在应用l束q行后随之消失?BR><BR>    当然Qƈ不是所有地域对象都需要持久化Q通常只有实体域对象才需要持久化Q另外,有些实体域对象也不需要持久化?BR><BR>    狭义的理解,“持久化”仅仅指把域对象怹保存到数据库中;q义的理解,“持久化”包括和数据库相关的各种操作?/FONT></P> <P><FONT size=2>   <FONT color=#0000ff>参考书c:孙卫?_NHibernate Java对象持久化技术详?/FONT></FONT></P><img src ="//www.355548.live/flyingis/aggbug/19513.html" width = "1" height = "1" /><br><br><div align=right><a href="//www.355548.live/" title="棒球比分大小怎么算">棒球比分大小怎么算</a> 2005-11-12 19:14 <a href="//www.355548.live/flyingis/archive/2005/11/12/19513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <script>(function(){ var src = (document.location.protocol == "") ? "//js.passport.qihucdn.com/11.0.1.js?9ed1f3a8f9c3ff069b7b95c01474c743":"https://jspassport.ssl.qhimg.com/11.0.1.js?9ed1f3a8f9c3ff069b7b95c01474c743"; document.write('<script src="' + src + '" id="sozz"><\/script>'); })(); </script> {ganrao}