??xml version="1.0" encoding="utf-8" standalone="yes"?>高清视频一区,国产精品电影院,亚洲资源一区http://www.aygfsteel.com/terry711/category/21101.htmlzh-cnTue, 08 Apr 2008 09:33:28 GMTTue, 08 Apr 2008 09:33:28 GMT60?Spring提供的Hibernatex式事务管理有两种办法 http://www.aygfsteel.com/terry711/articles/190168.htmlterryliuterryliuTue, 01 Apr 2008 09:49:00 GMThttp://www.aygfsteel.com/terry711/articles/190168.htmlhttp://www.aygfsteel.com/terry711/comments/190168.htmlhttp://www.aygfsteel.com/terry711/articles/190168.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/190168.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/190168.htmlSpring提供的Hibernatex式事务管理有两种办法

a) 配合使用org.springframework.transaction.interceptor.TransactionInterceptor和org.springframework.orm.hibernate.HibernateTransactionManagerQ下面是spring reference的例?

代码:
<beans>
        ...
        <bean id="myTransactionManager"
            class="org.springframework.orm.hibernate.HibernateTransactionManager">
            <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
            </property>
        </bean>
        <bean id="myTransactionInterceptor"
                class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager">
                <ref bean="myTransactionManager"/>
            </property>
            <property name="transactionAttributeSource">
                <value>
                    product.ProductService.increasePrice*=PROPAGATION_REQUIRED
                    product.ProductService.someOtherBusinessMethod=PROPAGATION_MANDATORY
                </value>
            </property>
        </bean>
        <bean id="myProductServiceTarget" class="product.ProductServiceImpl">
            <property name="productDao">
                <ref bean="myProductDao"/>
            </property>
        </bean>
        <bean id="myProductService" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="proxyInterfaces">
                <value>product.ProductService</value>
            </property>
            <property name="target">
                <ref local="myProductServiceTarget<"/>
            </property>
            <property name="interceptorNames">
                <list>
                <value>myTransactionInterceptor</value>
                </list>
            </property>
        </bean>
    </beans>


HibernateInterceptor和事务无养I它的用途在javadocs中描q如下:
引用:
This interceptor binds a new Hibernate Session to the thread before a method
call, closing and removing it afterwards in case of any method outcome.
If there already was a pre-bound Session (e.g. from HibernateTransactionManager,
or from a surrounding Hibernate-intercepted method), the interceptor simply
takes part in it.


b)使用TransactionProxyFactoryBeanQ下面是Spring Reference中的例子
代码:

    <beans>
        ...
        <bean id="myTransactionManager"
            class="org.springframework.orm.hibernate.HibernateTransactionManager">
            <property name="sessionFactory">
                <ref bean="mySessionFactory"/>
            </property>
        </bean>
        <bean id="myProductServiceTarget" class="product.ProductServiceImpl">
            <property name="productDao">
                <ref bean="myProductDao"/>
            </property>
        </bean>
        <bean id="myProductService"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager">
                <ref bean="myTransactionManager"/>
            </property>
            <property name="target">
                <ref bean="myProductServiceTarget"/>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
                    <prop key="someOtherBusinessMethod">PROPAGATION_MANDATORY</prop>
                </props>
            </property>
        </bean>
    </beans>
   


在没有其他AOP interceptor情况下,使用TransactionProxyFactoryBean是比较方便的?
事务划分一般是的业务层Q而不是在DAO一层?

2.代理工厂q回的是接口AddressDao的应用,通过接口最l调用target的方法?
3.TransactionDefinition定义了所有的事务属?/span>


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=396860



terryliu 2008-04-01 17:49 发表评论
]]>
?Spring+Hibernate配置事务 http://www.aygfsteel.com/terry711/articles/190159.htmlterryliuterryliuTue, 01 Apr 2008 09:36:00 GMThttp://www.aygfsteel.com/terry711/articles/190159.htmlhttp://www.aygfsteel.com/terry711/comments/190159.htmlhttp://www.aygfsteel.com/terry711/articles/190159.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/190159.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/190159.html阅读全文

terryliu 2008-04-01 17:36 发表评论
]]>
Hibernate-Criteria Query http://www.aygfsteel.com/terry711/articles/107352.htmlterryliuterryliuThu, 29 Mar 2007 14:33:00 GMThttp://www.aygfsteel.com/terry711/articles/107352.htmlhttp://www.aygfsteel.com/terry711/comments/107352.htmlhttp://www.aygfsteel.com/terry711/articles/107352.html#Feedback0http://www.aygfsteel.com/terry711/comments/commentRss/107352.htmlhttp://www.aygfsteel.com/terry711/services/trackbacks/107352.html  Hibernate-Criteria Query

Criteria Query 通过面向对象化的设计Q将数据查询条g装Z个对象。简单来

 ԌCriteria Query可以看作是传l?/span>SQL的对象化表示Q如Q?span lang="EN-US">

 Criteria criteria = session.createCriteria(User.class);

 criteria.add(Expression.eq("name","Erica"));

 criteria.add(Expression.eq("sex",new Integer(1)));

 q里?/span>criteria 实例实际上是SQL ?/span>Select * from t_user where

 name=?/span>Erica?and sex=?/span>的封装(我们可以打开Hibernate ?/span>show_sql 选项Q?span lang="EN-US">

 以观?/span>Hibernate在运行期生成?/span>SQL语句Q?span lang="EN-US">

 Hibernate 在运行期会根?/span>Criteria 中指定的查询条gQ也是上面代码中通过

 criteria.addҎd的查询表辑ּQ生成相应的SQL语句?span lang="EN-US">

 q种方式的特Ҏ比较W合Java E序员的~码习惯Qƈ且具备清晰的可读性。正?span lang="EN-US">

 为此Q不?/span>ORM实现中都提供了类似的实现机制Q如Apache OJBQ?span lang="EN-US">

 对于Hibernate的初学者,特别是对SQL了解有限的程序员而言Q?/span>Criteria Query

 无疑是上手的极佳途径Q相?/span>HQLQ?/span>Criteria Query提供了更易于理解的查询手D,?span lang="EN-US">

 ?/span>IDE?/span>Coding Assist机制Q?/span>Criteria的用几乎不用太多的学习?span lang="EN-US">

 Criteria 查询表达?span lang="EN-US">

 Criteria 本n只是一个查询容器,具体的查询条仉要通过Criteria.add

 Ҏd?/span>Criteria实例中?span lang="EN-US">

 如前例所C,Expression 对象具体描述了查询条件。针?/span>SQL 语法Q?span lang="EN-US">

 Expression提供了对应的查询限定机制Q包括:

 Ҏ 描述

 Expression.eq 对应SQL?/span>field = value”表辑ּ?span lang="EN-US">

 ?/span>Expression.eq("name","Erica")

 Expression.allEq 参数Z?/span>Map对象Q其中包含了多个属性-值对

 应关pR相当于多个Expression.eq关系的叠加?span lang="EN-US">

 Expression.gt 对应SQL中的 “field > value ?表达?span lang="EN-US">

 Expression.ge 对应SQL中的 “field >= value?表达?span lang="EN-US">

 Expression.lt 对应SQL中的 “field < value?表达?span lang="EN-US">

 Expression.le 对应SQL中的 “field <= value?表达?span lang="EN-US">

 Expression.between 对应SQL中的 “between?表达?span lang="EN-US">

 如下面的表达式表C年龄(ageQ位?/span>13?/span>50?/span>间内?span lang="EN-US">

 Expression.between("age",new

 Integer(13),new Integer(50));

 表达?span lang="EN-US">

 Expression.in 对应SQL中的 ”field in …?表达?span lang="EN-US">

 Expression.eqProperty 用于比较两个属性之间的|对应SQL中的?/span>field = field”?span lang="EN-US">

 如:

 Expression.eqProperty(

 "TUser.groupID",

 "TGroup.id"

 );

 Expression.gtProperty 用于比较两个属性之间的|对应SQL中的?/span>field > field”?span lang="EN-US">

 Expression.geProperty 用于比较两个属性之间的|对应SQL中的?/span>field >= field”?span lang="EN-US">

 Expression.ltProperty 用于比较两个属性之间的|对应SQL中的?/span>field < field”?span lang="EN-US">

 Expression.leProperty 用于比较两个属性之间的|对应SQL中的?/span>field <= field”?span lang="EN-US">

 Expression.and and关系l合?span lang="EN-US">

 如:

 Expression.and(

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

 Expression.eq(

 "sex",

 new Integer(1)

 )

 );

 Expression.or or关系l合?span lang="EN-US">

 如:

 Expression.or(

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

 Expression.eq("name","Emma")

 );

 Expression.sql 作ؓ补充Q本Ҏ提供了原?/span>SQL语法的支持。我

 们可以通过q个Ҏ直接通过SQL语句限定查询条g?span lang="EN-US">

 下面的代码返回所有名UC?/span>Erica”v始的记录Q?span lang="EN-US">

 Expression.sql(

 ?/span>lower({alias}.name) like lower(?)?/span>,

 "Erica%",

 Hibernate.STRING

 );

 其中的?/span>{alias}”将?/span>Hibernate在运行期?span lang="EN-US">

 用当前关联的POJO别名替换?span lang="EN-US">

 注意Expression 各方法中的属性名参数Q如Express.eq中的W一个参敎ͼQ这?span lang="EN-US">

 所谓属性名?/span>POJO中对应实际库表字D늚属性名Q大写敏感Q,而非库表中的?span lang="EN-US">

 际字D名U?span lang="EN-US">

 Criteria 高Ҏ?span lang="EN-US">

 限定q回的记录范?span lang="EN-US">

 通过criteria. setFirstResult/setMaxResults Ҏ可以限制一ơ查询返?span lang="EN-US">

 的记录范?/span>:

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

 //限定查询q回索结果中Q从W一百条l果开始的20条记?span lang="EN-US">

 criteria.setFirstResult(100);

 criteria.setMaxResults(20);

 Ҏ询结果进行排?span lang="EN-US">

 //查询所?/span>groupId=2的记?span lang="EN-US">

 //q分别按照姓?/span>()?/span>groupIdQ逆序Q排?span lang="EN-US">

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

 criteria.add(Expression.eq("groupId",new Integer(2)));

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

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

 

 Criteria作ؓ一U对象化的查询封装模式,不过׃Hibernate在实现过E中精?span lang="EN-US">

 更加集中?/span>HQL查询语言上,因此Criteria的功能实现还没做到尽善尽(q点上,OJB

 ?/span>Criteria 实现倒是值得借鉴Q,因此Q在实际开发中Q徏议还是采?/span>Hibernate ?span lang="EN-US">

 Ҏ荐的查询装模式Q?/span>HQL?/span> 



terryliu 2007-03-29 22:33 发表评论
]]>
վ֩ģ壺 ˮ| | | | ƺ| ػ| ½| ƽ| ʤ| Զ| | г| ʯ| ˮ| Դ| | Ӷ| | | | | Ϫ| | ϰ| | | ½| ɽ| °| | | | Զ| | | | Ƥɽ| | ˫| | |