锁定老帖子 主题:Spring的DAO设计实践
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-02-26
你们该不会还在排挤HibernateTemplate吧
robbin贴出来的那段HibernateTemplate.execute的代码是关键点 OpenSessionInViewFilter和spring aop事务都跟这段代码有关系的 不得不用啊 |
|
返回顶楼 | |
发表时间:2005-03-01
我用过的框架,我翻译了图:
|
|
返回顶楼 | |
发表时间:2005-03-03
chenjin 写道 说一句不大着调的话, 分出程序结构清晰的层次却是是一件好事, 但是过分强调框架,分层.而忽略java本身的语言特性,和简单足够解决问题的原则, 我觉得分太多层加大学习成本, 降低程序效率, 一个简单的, 有效率, 方便维护的代码, 解决方案, 就是满足需要的。
有理。 尤其对于AOP,现在外国的争论也很大,有一些人甚至认为是OOP弄不好才去搞AOP,当然AOP与OOA,OOD倒不是矛盾的。 |
|
返回顶楼 | |
发表时间:2005-03-22
chenjin 写道 说一句不大着调的话, 分出程序结构清晰的层次却是是一件好事, 但是过分强调框架,分层.而忽略java本身的语言特性,和简单足够解决问题的原则, 我觉得分太多层加大学习成本, 降低程序效率, 一个简单的, 有效率, 方便维护的代码, 解决方案, 就是满足需要的。
严重同意,做系统不可头脑发热跟风,还是要看具体的需求很现有的基础 |
|
返回顶楼 | |
发表时间:2005-04-01
想请教一下,如果抛弃了HibernateTemplate,那么DAO代理就是org.springframework.aop.framework.ProxyFactoryBean的实例,然后注入DAO对象本身和拦截器,而不是用org.springframework.transaction.interceptor.TransactionProxyFactoryBean的实例,那么也就不能用org.springframework.transaction.interceptor.TransactionProxyFactoryBean下对事务的配置,那么在这种模式下,如何管理事务呢,难道还要像没有结合spirng只用hibernate时那样手工编写事务代码么?
|
|
返回顶楼 | |
发表时间: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少写很多代码么? |
|
返回顶楼 | |
发表时间:2005-04-04
引用 既然要自己写个BaseDao实现类似HibernateTemplate所有方法的实现,然后再写扩展BaseDao的dao,那么为什么不直接写个类扩展一下HibernateTemplate,在把分页查询,设置query等功能实现了呢?这样的话不是比自己写一个BaseDAO少写很多代码么? 有没有在这个方面有经验的同志呢?
|
|
返回顶楼 | |
发表时间:2005-06-03
robbin 写道 http://www.gpowersoft.com/tech/Spring/39.htm
这里有篇如何设计DAO来良好利用Spring的Hibernate支持类的文章,我觉得挺不错,推荐一下。 怎么连接不上呢? |
|
返回顶楼 | |
发表时间: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的详细日志(创建时间,用户名等等),那调用后面的那个通用的方法显然是错的。 |
|
返回顶楼 | |
发表时间:2005-06-06
楼上的错了,robbin说的没错.
正是因为我们用Spring Aop来控制事务,才需要去区别直接getSession()与getHibernateTemplate()的区别,如果直接在代码中控制事务的话,那就根本不要去考虑这些问题了. |
|
返回顶楼 | |