论坛首页 Java企业应用论坛

Spring的DAO设计实践

浏览 108716 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-02-26  
你们该不会还在排挤HibernateTemplate吧
robbin贴出来的那段HibernateTemplate.execute的代码是关键点
OpenSessionInViewFilter和spring aop事务都跟这段代码有关系的
不得不用啊
0 请登录后投票
   发表时间:2005-03-01  
我用过的框架,我翻译了图:
0 请登录后投票
   发表时间:2005-03-03  
chenjin 写道
说一句不大着调的话, 分出程序结构清晰的层次却是是一件好事, 但是过分强调框架,分层.而忽略java本身的语言特性,和简单足够解决问题的原则, 我觉得分太多层加大学习成本, 降低程序效率, 一个简单的, 有效率, 方便维护的代码, 解决方案, 就是满足需要的。

有理。
尤其对于AOP,现在外国的争论也很大,有一些人甚至认为是OOP弄不好才去搞AOP,当然AOP与OOA,OOD倒不是矛盾的。
0 请登录后投票
   发表时间:2005-03-22  
chenjin 写道
说一句不大着调的话, 分出程序结构清晰的层次却是是一件好事, 但是过分强调框架,分层.而忽略java本身的语言特性,和简单足够解决问题的原则, 我觉得分太多层加大学习成本, 降低程序效率, 一个简单的, 有效率, 方便维护的代码, 解决方案, 就是满足需要的。

严重同意,做系统不可头脑发热跟风,还是要看具体的需求很现有的基础
0 请登录后投票
   发表时间:2005-04-01  
想请教一下,如果抛弃了HibernateTemplate,那么DAO代理就是org.springframework.aop.framework.ProxyFactoryBean的实例,然后注入DAO对象本身和拦截器,而不是用org.springframework.transaction.interceptor.TransactionProxyFactoryBean的实例,那么也就不能用org.springframework.transaction.interceptor.TransactionProxyFactoryBean下对事务的配置,那么在这种模式下,如何管理事务呢,难道还要像没有结合spirng只用hibernate时那样手工编写事务代码么?
0 请登录后投票
   发表时间:2005-04-03  
前面的问题我自己已经搞定了,只是没搞明白HibernateInterceptor这个拦截器到底实现了什么功能啊,我试着用一个trancectionInterceptor发现也是可以的。如:
   <bean id="myHibernateInterceptor"  class="org.springframework.orm.hibernate.HibernateInterceptor">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>

	<bean id="txAttributes"
		class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
		<property name="properties">
			<value>
				*=PROPAGATION_REQUIRED
			</value>
		</property>
	</bean>
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
		<property name="transactionAttributeSource">
			<ref bean="txAttributes"/>
		</property>
	</bean>


    <bean id="baseDaoTarget" class="dao.BaseDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <bean id="baseDao" class="org.springframework.aop.framework.ProxyFactoryBean">
 		<property name="target">
			<ref local="baseDaoTarget" />
		</property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
               <!-- 或者用下面这个,实际测试结果一样,不知道有什么区别
                <value>myHibernateInterceptor</value>
                -->
            </list>
        </property>
    </bean>


不知道面的两个interceptor有什么区别,用一个最简单的测试结果也是一样的,而且甚至两个一起都用也没问题。transactionInterceptor很清楚,自己配的,关键是myHibernateInterceptor不知道到底有什么功能?

还有疑问,既然要自己写个BaseDao实现类似HibernateTemplate所有方法的实现,然后再写扩展BaseDao的dao,那么为什么不直接写个类扩展一下HibernateTemplate,在把分页查询,设置query等功能实现了呢?这样的话不是比自己写一个BaseDAO少写很多代码么?
0 请登录后投票
   发表时间:2005-04-04  
引用
既然要自己写个BaseDao实现类似HibernateTemplate所有方法的实现,然后再写扩展BaseDao的dao,那么为什么不直接写个类扩展一下HibernateTemplate,在把分页查询,设置query等功能实现了呢?这样的话不是比自己写一个BaseDAO少写很多代码么?
 有没有在这个方面有经验的同志呢?
0 请登录后投票
   发表时间:2005-06-03  
robbin 写道
http://www.gpowersoft.com/tech/Spring/39.htm

这里有篇如何设计DAO来良好利用Spring的Hibernate支持类的文章,我觉得挺不错,推荐一下。


怎么连接不上呢?
0 请登录后投票
   发表时间:2005-06-05  
Robbin说的那个链接可能是换了吧,是不是这个?
http://www.gpowersoft.com/tech/Spring/46.htm
如果是这个的话,我有些疑问,比如我的一个UserServiceImpl,如果我没理解错的话应该是这样写:
public UserServiceImpl extends EntityManagerImpl  implements UserService {
    public User getUser(Long id); {
        return (User);super.get(User.class, id);;
    }
    public Long createUser(User user); {
        return (Long);super.create(user);;
    }
    .....
}

假如写action的程序员与写service的不是同一个程序员,那么他是要调用哪一个方法呢?
userService.createUser(user) or userService.create(user)?
如果我在service这层中有其它的业务逻揖,比如我需要记录下创建这个user的详细日志(创建时间,用户名等等),那调用后面的那个通用的方法显然是错的。
0 请登录后投票
   发表时间:2005-06-06  
楼上的错了,robbin说的没错.
正是因为我们用Spring Aop来控制事务,才需要去区别直接getSession()与getHibernateTemplate()的区别,如果直接在代码中控制事务的话,那就根本不要去考虑这些问题了.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics