您在下面的论坛中找到了不使用Spring hibernate模板的信息:
它说:
自hibernate 3.0.1以来,不再需要HibernateTemplate, 从那个版本开始,它变得更容易插入很好地休眠, 在那之前春天需要一些技巧,代理和hackery来管理 事务,线程绑定会话和异常转换。现在 使用不再需要的更新版本的hibernate,你 仍然得到所有好东西异常翻译,会话管理 等但不使用任何春季特定类。哪个是imho 非常好,它使弹簧的使用更加突兀。
我使用了HibernateTemplate和Dao支持,是否需要在新的应用程序中使用这些API?
我可以使用最新的示例代码将Hibernate与Spring框架集成。
2)
除了将SessionFactory保存在实例变量中之外,此样式类似于Hibernate参考文档和示例的样式。我们强烈建议在Hibernate的CaveatEmptor示例应用程序中使用老式静态HibernateUtil类进行基于实例的设置。
因为很多地方我们都在使用SessionFactory,这是从早些时候开始使用HibernateUtil的最佳方式吗?
答案 0 :(得分:2)
在以前的Spring版本中,模板模型用于为许多不同的框架(Hibernate,JPA,JMS等)提供通用抽象。虽然这使得开发变得简单,但它也将您的业务代码与Spring Framework联系起来。 Spring 3.x的目标之一是将您的应用程序代码与Spring分离,要求您尽可能少地使用特定于Spring的代码,从而使您的代码更具可重用性。
推荐的集成方式是针对plain编写DAO代码 Hibernate,JPA和JDO API。使用Spring的DAO的旧式 不再推荐使用模板;但是,这种风格的报道 可以在第A.1节“经典ORM用法”中找到 附录。
[Source]
Spring提供的增强功能(事务管理,异常翻译等)现在通过AOP发生,您不必在代码中担心它。该机制描述于:
而
中涵盖了传统方法答案 1 :(得分:1)
使用Hibernate Session Factory代替Hibernate Template:
public abstract class HomeSessionFactory {
@Autowired
protected SessionFactory sessionFactory;
}
将此类在xxDAOImpl文件中扩展为。
@Repository("LoginDetailsDAO")
@Transactional
public class LoginDetailsDAOImpl extends HomeSessionFactory implements LoginDetailsDAO {
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public List<UserLogin> loginDetails(UserLogin login) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
List<UserLogin> result = session.createQuery("from UserLogin").list();
transaction.commit();
return result;
}
}
Spring Context文件:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.home.app.model.UserLogin</value>
</list>
</property>
</bean>
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>properties/database.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>