??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一级视频一区二区,亚洲欧洲日韩综合二区,老司机精品视频在线观看6http://www.aygfsteel.com/Kira-2006/category/31064.html-仅仅是一阵风也Ş?偏偏是这h? 仅仅是一场梦也Ş?偏偏是如此的真实,zh-cnWed, 28 May 2008 13:51:09 GMTWed, 28 May 2008 13:51:09 GMT60深入出HibernateMW记--Hibernate常见优化{略http://www.aygfsteel.com/Kira-2006/articles/203632.htmlKira-2006Kira-2006Wed, 28 May 2008 12:37:00 GMThttp://www.aygfsteel.com/Kira-2006/articles/203632.htmlhttp://www.aygfsteel.com/Kira-2006/comments/203632.htmlhttp://www.aygfsteel.com/Kira-2006/articles/203632.html#Feedback0http://www.aygfsteel.com/Kira-2006/comments/commentRss/203632.htmlhttp://www.aygfsteel.com/Kira-2006/services/trackbacks/203632.html 1. 在允许的情况下,选用最新版本的Hibernate的发行版?br /> 2. 制定合理的缓存策略?br /> 3. 采用合理的Session理机制?br /> 4. 量使用延迟加蝲Ҏ?br /> 5. 讑֮合理的批处理参数(batch_size)?br /> 6. 如果可能Q选用UUID作ؓ主键生成器?br /> 7. 如果可能Q选用Zversion的乐观锁{略替代悲观锁?br /> 8. 开发过E中Q打开Hibernate的SQL日志输出Q通过观察Hibernate生成的sql语句q一步了解实现原理,从而指定更好的实现{略?

Kira-2006 2008-05-28 20:37 发表评论
]]>
深入出Hibernate学习W记--Criteria Queryhttp://www.aygfsteel.com/Kira-2006/articles/199774.htmlKira-2006Kira-2006Sat, 10 May 2008 14:59:00 GMThttp://www.aygfsteel.com/Kira-2006/articles/199774.htmlhttp://www.aygfsteel.com/Kira-2006/comments/199774.htmlhttp://www.aygfsteel.com/Kira-2006/articles/199774.html#Feedback0http://www.aygfsteel.com/Kira-2006/comments/commentRss/199774.htmlhttp://www.aygfsteel.com/Kira-2006/services/trackbacks/199774.html
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression.eq(
"name","Erica"));
criteria.add(Expression.eq(
"sex",new Integer(1));
q里的criteria实例本质上是对SQL“select * from t_user where name='Erica' and sex=1”的封装?br /> Hibernate在运行期会根据Criteria中指定的查询条g生成相应的SQL语句?br />
Criteria查询表达?br />     Criteria本n只是一个容器,具体的查询条件要通过Criteria.addҎd到Criteria实例中?br />
Ҏ 描述
Expression.eq

对应SQL “field=value”表达?/p>

如:Expression.eq("name","Erica")

Expression.allEq 参数Z个Map对象Q其中包含了多个属?值对应关pR相当于多个Expression.eq关系的叠?/td>
Expression.gt 对应SQL“field>value”表达?/td>
Expression.ge 对应SQL“field>=value”表达?/td>
Expression.lt 对应SQL“field<value”表达?/td>
Expression.le 对应SQL“field<=value”表达?/td>
Expression.between

对应SQL“between”表达?/p>

如:Expression.between("age",new Integer(13),new Integer(50));

Expression.like 对应SQL"field like valule"表达?/td>
Expression.in 对应SQL“field in...”表达?/td>
Expression.eqproperty 用于比较两个属性之间的|对应SQL“field>field”
Expression.gtProperty 用于比较两个属性之间的|对应SQL“field>=field”
Expression.ltProperty 用于比较两个属性之间的|对应SQL"field<field"
Expression.leProperty 用于比较两个属性之间的|对应SQL"field<=field"
Expression.and

and关系l合Q如Q?/p>

Expression.add(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1)))

Expression.or

or关系l合Q如Q?/p>

Expression.or(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1)))

Expression.sql

作ؓ补充Q本Ҏ提供了原生SQL语法的支持,我们可以通过q个Ҏ直接通过SQL语句限定查询条g

下面的代码返回所有名UC"Erica"其实的记录:
Expression.sql("lower({alias}.name) like lower(?)","Erica%",Hibernate.STRING);
其中?{alias}"Hibernate在运行期使用当前兌的POJO别名替换


在Hibernate3中,引入了RestrictionscM为Expression的替代?br />
CZ查询
    ExamplecdCCriteria接口Q同P它也可以用作Criteria的查询条件。Example的作用是Q根据已有对象,查找属性与之相W的其他对象?br />
Criteria criteria=session.CreateCriteria(TUser.class);
TUser exampleUser
=new TUser();
exapleUser.getName(
"Erica");
criteria.add(Example.create(exampleUser));

List
<TUser> list=criteria.list();

for(TUser user:list){
System.out.println(user.getName());
}
新徏一个TUser对象exampleUserQƈ作ؓ范本Q查询所有name属性与之相同的记录?br />
复合查询
Criteria criteria=session.createCriteria(TUser.class);
Criteria addrCriteria=criteria.createCriteria("addresses");
addrCriteria.add(Expression.like("addresses","%shanghai%"));


List
<TUser> list = criteria.list();
for(TUser user:list){
    System.out.println(user.getName());
    Set
<TAddress> addrSet=user.getAddresses();
    
for(TAddress addr:addrSet){
        System.out.println(addr.getAddress());
    }

}
U色部分是我们新增的复合查询条Ӟ可以看到Q我们可以通过Criteria.createCriteriaҎ在原有Criteria对象的基上构建复合查询?br />
DetachedCriteria
   Hibernate2中,Criteria生命周期位于其宿主Session生命周期中,也就是说Q由某个session创徏的Criteria实例Q一旦session销毁,那么此Criteria实例也随之失效?br />     Hibernate3中引入了DetachedCriteriaQDetachedCriteria可以qsession实例独立存在Q这P我们可以将某些通用的Criteria查询条gq行抽离Q每ơ用时再与当前session实例l定以获得更好的代码重用效果?br />
DetachedCriteria deCriteria=DetachedCriteria.forClass(TUser.class);
deCriteria.add(Expression.eq(
"name","Erica"));
deCriteria.add(Expression.eq(
"sex",new Integer(1)));

Criteria criteria=deCriteria.getExecutableCriteria(session);
List<TUser> list=criteria.list();
for(TUser user:list){
    System.out.println(user.getName());
}
DetachedCriteria的生存周期与session实例无关Q我们可以独立创建DetachedCriteria实例Qƈ在需要用时与session相绑定,从而获得运行期Criteria实例。这P我们可以将查询逻辑和Criteria实例分离Q以获得最大化代码的重用效果?br />     DetachedCriteria也可以用于子查询表达Q?br />
DetachedCriteria aveAge=DetachedCriteria.forClass(TUser.class);
avgAge.setProjection(Projections.avg(
"age"));

Criteria criteria
=session.createCriteria(TUser.class);
criteria.add(Subqueries.propertyGT("age",avgAge));

通过Subqueries我们可以DetachedCriteriaU_查询表达式,反映在SQL上则是一个典型的子查询语句。上例生成的SQL语句大致如:select ... from T_User where age > (select avg(age) from T_User)

Criteria高Ҏ?br />     限定q回的记录范?/strong>
        通过criteria.setFirstResult/setMaxResultsҎ可以限制一ơ查询返回的记录范围Q?br />
Criteria criteria=session.createCriteria(TUser.class);
//限定查询q回索结果中Q从100条结果开始的20条记?/span>
criteria.setFirstResult(100);
criteria.setMaxResults(
20);
        记录排序Q?br />
//
//
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression.eq(
"groupId",new Integer(2)));

criteria.addOrder(Order.asc(
"name"));
criteria.addOrder(Order.desc(
"groupId"));

    分组与统?br />         在Hibernate3中,我们q可以通过Criteria完成分组和统计。分l、统计表辑ּ由Hibernate3新引入的Projections Classq行装?br />
Criteria criteria=session.createCriteria(TUser.class);
criteria.setProjection(Projections.groupProperty("age"));


List
<TUser> list=criteria.list();
for(TUser user:list){
    System.out.println(user);
}

上例对当前的TUser记录按照q龄q行分组。通过Projections.groupPropertyҎQ我们指定了用于分组的目标属?#8220;age”。生成的SQL语句Qselect this.age as y0_ from T_User this_group by this_.age?br />     另外Q对于多条gl合的统计、分l功能,我们可以借助ProjectionList完成Q下面的例子中,我们l计了各个年龄层ơ中的用h量:

ProjectionList projectionlist=Projections.ProjectionList();
projectionList.add(Projections.groupProperty(
"age"));
projectionList.add9Projections.rowCount());

Criteria criteria
=session.createCriteria(TUser.class);
criteria.setProjection(projectionList);

 

 



Kira-2006 2008-05-10 22:59 发表评论
]]>
深入出Hibernate学习W记--数据兌http://www.aygfsteel.com/Kira-2006/articles/199736.htmlKira-2006Kira-2006Sat, 10 May 2008 12:08:00 GMThttp://www.aygfsteel.com/Kira-2006/articles/199736.htmlhttp://www.aygfsteel.com/Kira-2006/comments/199736.htmlhttp://www.aygfsteel.com/Kira-2006/articles/199736.html#Feedback0http://www.aygfsteel.com/Kira-2006/comments/commentRss/199736.htmlhttp://www.aygfsteel.com/Kira-2006/services/trackbacks/199736.html一对一兌
    主键兌Q?/strong>即两张表通过主键形成一对一映射关系?/p>     用户TUser与护照TPassport兌
    TUer.hbm.xml
    
<hibernate-mapping>
<class
    
name="TUser"
    table
="T_User">
    
    
<one-to-one 
        
name="passport"
        class
="TPassport"
        cascade
="all"
        outer-join
="true"/>
    
</class>
</hibernate-mapping>
cascade="all"表示U联关系讄?#8220;all”Q即无论ȝ房执行Q何操作,都会兌cL行相同的操作?br />
    TPassport.hbm.xml
<hibernate-mapping>
<class
    
name="TPassport"
    table
="T_Passport">
    
<one-to-one
        
name="user"
        class
="TUser"
        constrain
="true">
    .
</class>
</hibernate-mapping>

    
constrain必须讑֮?#8220;true”Q以告知Hibernate当前主键上存在一个约束?br />    
    试代码Q?br />
TUser user = new TUser();
user.setAge(
new Integer(20));
user.setName(
"Carin");

TPassport passport 
= new TPassport();
passport.setSerial(
"PCN759386");
passport.setExpiry(
new Integer(20080101));

//怺讄兌
passport.setUser(user);
user.setPassport(passport);

Transaction tx 
= sessioin.beginTransaction();
//׃TUsercȝone-to-one节点被设|成
//cascade=“all”其关联的passport对象被U联保存
session.save(user);

tx.commit();
    以下代码完成兌对象的读取:
TUser user=(TUser)Hibernate.load(TUser.class,new Integer(15));
System.out.println(
"User name=>"+user.getName());
System.out.println(
"Passport Serial=>"+user.getPassport().getSerial());
    控制台输出:
Hibernate:select tuser0_.id as id1_,
from T_USER tuser0_
left outer join
T_PASSPORT tpassport1_ on tuser0_.id
=tpassport1_.id
where tuser0_.id
=?
User name
=>Carin
Passport Serial
=>PCN759386
Hibernate通过left outer joinT_User表及其关联的T_Passport表同时读入,因ؓ此时out-join=“true”。若讄为falseQ则会分开d两个表?br />
一对多兌
    用户TUser和地址TAddress的一对多兌?br />     单向一对多兌
        L方TUser的映配|:
<hibernate-mapping>
<class
    
name="TUser"
    table
="t_user"
    dynamic-update
="true"
    dynamic-insert
="true">
.
    
<set
        
name="address"
        table
="t_address"
        cascade
="all"
        order-by
="zipcode asc">
        
<key column="user_id"/>
        
<one-to-many class="TAddress">
    
</set>

</class>
</hibernate>
被动方TAddress的记录由Hibernate负责dQ之后存攑֜L方TUser指定的Collectioncd属性中?br /> 单向一对多的实现比较简单,但是存在一个问题,׃是单向关联,Z保持兌关系Q我们只能通过L方对被动方进行联更新。如果被兌方的兌字段?#8220;NOT NULL”Q当Hibernate创徏或者更新时Q可能出现约束违例?br />
双向多对一兌
    实际上是“一对多”?#8220;多对一”兌的组合。也是说我们必dL斚w|一对多关系的基上,在被控方配置与其对应的多对一兌?br />     TUser.hbm.xml
<hibernate-mapping>
<class
    
name="TUser"
    table
="t_user"
    dynamic-update
="true"
    dynamic-insert
="true">
.
    
<set
        
name="address"
        table
="t_address"
        lazy
="false"
        inverse
="true"
        cascade
="all"
        sort
="unsorted"
        order-by
="zipcode asc">
        
<key column="user_id"/>
        
<one-to-many class="TAddress"/>
    
</set>
.
</class>
</hibernate>
inverse="true"QTUser不在作ؓL方,而是关联关pȝl护工作交给兌对象TAddress来做?br /> 在one-to-many关系中,many一方设|ؓL方(inverse=“true”Q将有助于性能的改善?br />     TAddress.hbm.xml
<hibernat-mapping>
<class
    
name="TAddress"
    table
="t_address"
    dynamic-update
="false"
    dynamic-insert
="false">
.
    
<many-to-one
        
name="user"
        class
="TUser"
        cascade
="none"
        outer-join
="auto"
        update
="true"
        insert
="true"
        access
="property"
        column
="user_id"
        not-null
="true"/>
.
</class>
</hibernate-mapping>

多对多关?br /> 需要借助中间表来完成多对多映信息的保存?br />     ׃多对多关联的性能不佳Q由于引入了中间表,一ơ读取操作需要反复多ơ查询)Q因此在设计中应该避免大量用。同Ӟ在多对多关系中,应根据情况,采取延迟加蝲机制来避免无谓的性能开销?br />     TGroup与TRole的多对多兌Q?br />     TGroup.hbm.xmlQ?br />
<hibernate-mapping>
<class
    
name="TGroup"
    table
="t_group"
    dynamic-update
="false"
    dynamic-insert
="false">
.
    
<set
        
name="roles"
        table
="t_group_role"
        lazy
="false"
        inverse
="false"
        cascade
="save-update">
        
<key column="group_id"/>
        
<many-to-many
            
class="TRole"
            column
="role_id"/>
    
</set>
.
</class>
</hibernate>
t_group_role为t_group与t_role之间的映表Q它保存了group和role之间的映关pR?br /> cascade=“save-update”Q对于多对多逻辑而言Q很出现删除一斚w要联删除所有关联数据的情况Q如删除一个groupQ一般不会删除其中包含的Role?br /> column=“group_id”映射表中对于t_group表记录的标识字段?br />  
    TRole.hbm.xmlQ?br />
<hibernate-mapping>
<class
    
name="TRole"
    table
="t_role"
    dynamic-update
="false"
    dynamic-insert
="false">
.
    
<set
        
name="groups"
        table
="t_group_role"
        lazy
="false"
        inverse
="true"
        cascade
="save-update"
        sort
="unsorted">
        
<key column="role_id"/>
        
<many-to-many 
            
class="TGroup"
            column
="group_id"
            outer-join
="auto"/>
    
</set>
.
</class>
</hibernate>
多对多关pMQ由于关联关pL两张表相互引用,因此在保存关联状态时必须对双方同时保存?br />

Kira-2006 2008-05-10 20:08 发表评论
]]>
深入出HibernateW记--1.2.1持久化设计与解?/title><link>http://www.aygfsteel.com/Kira-2006/articles/197776.html</link><dc:creator>Kira-2006</dc:creator><author>Kira-2006</author><pubDate>Fri, 02 May 2008 11:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/Kira-2006/articles/197776.html</guid><wfw:comment>http://www.aygfsteel.com/Kira-2006/comments/197776.html</wfw:comment><comments>http://www.aygfsteel.com/Kira-2006/articles/197776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Kira-2006/comments/commentRss/197776.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Kira-2006/services/trackbacks/197776.html</trackback:ping><description><![CDATA[     摘要: 解耦合的设计目标:     1. 应用层解耦合--应用逻辑与数据逻辑相分R?    2. 资源层解耦合--逻辑l构与物理结构相分离? DAO模式Q即Data Accessor模式和Active Domain Object模式?    Data Accessor模式...  <a href='http://www.aygfsteel.com/Kira-2006/articles/197776.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Kira-2006/aggbug/197776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Kira-2006/" target="_blank">Kira-2006</a> 2008-05-02 19:33 <a href="http://www.aygfsteel.com/Kira-2006/articles/197776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate生成?/title><link>http://www.aygfsteel.com/Kira-2006/articles/196287.html</link><dc:creator>Kira-2006</dc:creator><author>Kira-2006</author><pubDate>Sat, 26 Apr 2008 10:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/Kira-2006/articles/196287.html</guid><wfw:comment>http://www.aygfsteel.com/Kira-2006/comments/196287.html</wfw:comment><comments>http://www.aygfsteel.com/Kira-2006/articles/196287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Kira-2006/comments/commentRss/196287.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Kira-2006/services/trackbacks/196287.html</trackback:ping><description><![CDATA[<p><!--讄主键映射--><br /> <id  name=""  column=""  type=""><br />     <generator  class="">  讄主键生成?br /> </id><br /> Hibernate框架内徏Z键提供了多种生成器,具体包括如下内容Q?br /> 1. incrementQ用于ؓlongQshortQintcd生成唯一标识?br /> 2. identityQ对DB2QMySQLQMS SQL ServerQSybase和HypersonicSQL的内|标识字D|供支持?br /> 3. sequenceQ在DB2QPostgreSQLQOracleQSAPDBQMcKoi中用序列(sequenceQ,而在Interbase中用生成器QgeneratorQ?br /> 4. hiloQ用一个高/低位法高效生成longQshort或intcd的标识符。给定一个表和字D(默认分别是hibernate_unique_key和nextQ作为高位值的来源。高/低位法生成的标识符只在一个特定的数据库中是唯一的?br /> 5. seqhiloQ用一个高/低位法高效生成longQshort或intcd的标识符Q给定一个数据库序列QsequenceQ的名字?br /> 6. uuid.hexQ用一?28-bit的UUID法生成字符串类型的标识W。在一个网l中是唯一的(使用了IP地址Q。UUID被编码位一?2?6q制数字的字W串?br /> 7. uuid.stringQ用同LUUID法。UUID被编码位一?6个字W长的Q意ASCII字符l成的字W串?br /> 8. nativeQ根据底层数据库的能力选择identity、sequence、hilo中的一个?br /> 9. assignedQ让应用E序在插表之前ؓ对象分配一个标识符?br /> 10. foreignQ用另一个相兌的对象的标识W。通常被用在有兌关系的表中?br /> <br /> <span style="color: red">一般来_在Hibernate中,不推荐用assigned作ؓ主键生成器。因为对数据库表来说Q以业务逻辑字段作ؓ主键有潜在的危险性。当该业务逻辑字段在将来需要改变的时候,作ؓ主键的应用就会相当麻烦。常用的手段是用一个和业务无关的字D作Z键,而在PO中定义这个字D|为变量属性,同事又作对象的惟一标识?/span></p> <img src ="http://www.aygfsteel.com/Kira-2006/aggbug/196287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Kira-2006/" target="_blank">Kira-2006</a> 2008-04-26 18:15 <a href="http://www.aygfsteel.com/Kira-2006/articles/196287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ӥ̶</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ᶫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ů</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">׼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">綫</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">üɽ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ϲ</a>| <a href="http://" target="_blank">˰</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ɽ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>