Java hibernate spring与最新版本的集成

Java hibernate spring与最新版本的集成,java,hibernate,spring,Java,Hibernate,Spring,Hi在下面的论坛中找到,该论坛描述了不使用Spring hibernate模板: 它说: 自hibernate 3.0.1以来,不再需要HibernateTemplate, 自从发布以来,很好地插入hibernate变得更加容易, 在那之前,春天需要一些诡计,代理和黑客来管理 事务、线程绑定会话和异常转换。现在 有了不再需要的新版本的hibernate,您 仍然可以得到所有的好东西例外翻译,会话管理 等等,但不使用任何特定于spring的类。哪个imho是 真的很好,它使得弹簧的使用更加不显眼

Hi在下面的论坛中找到,该论坛描述了不使用Spring hibernate模板:

它说:

自hibernate 3.0.1以来,不再需要HibernateTemplate, 自从发布以来,很好地插入hibernate变得更加容易, 在那之前,春天需要一些诡计,代理和黑客来管理 事务、线程绑定会话和异常转换。现在 有了不再需要的新版本的hibernate,您 仍然可以得到所有的好东西例外翻译,会话管理 等等,但不使用任何特定于spring的类。哪个imho是 真的很好,它使得弹簧的使用更加不显眼

我使用了HibernateTemplate和Dao支持,在新的应用程序中使用这些API需要吗

可以给我一些最新的示例代码来集成Hibernate和Spring框架吗

(二)

此样式类似于Hibernate参考文档和示例,只是将SessionFactory保存在实例变量中。我们强烈建议在Hibernate的CaveatEmptor示例应用程序中使用这种基于实例的设置,而不是老式的静态HibernateUtil类


由于我们在许多地方使用SessionFactory,这是自我在以前的Spring版本中使用HibernateUtil以来获取会话的最佳方式,因此模板模型用于为许多不同的框架(Hibernate、JPA、JMS等)提供通用抽象。虽然这使得开发变得容易,但它也将您的业务代码绑定到Spring框架。Spring3.x的目标之一是将您的应用程序代码与Spring解耦,要求您使用尽可能少的Spring特定代码,从而使您的代码更加可重用

推荐的集成风格是针对普通数据对DAO进行编码 Hibernate、JPA和JDOAPI。使用弹簧刀的旧风格 不再推荐模板;然而,这种风格的报道 可以在中的A.1节“经典ORM用法”中找到 附录。
[]

Spring提供的增强功能(事务管理、异常转换等)现在通过AOP实现,您不必在代码中担心它。该机制如所述:

而传统方法在


使用Hibernate会话工厂而不是Hibernate模板,如下所示:

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;
    }
}
@Repository(“LoginDetailsDAO”)
@交易的
公共类LoginDetailsDAOImpl扩展HomeSessionFactory实现LoginDetailsDAO{
@抑制警告(“未选中”)
@事务(只读=真)
公共列表登录详细信息(用户登录){
Session Session=sessionFactory.openSession();
事务=会话。beginTransaction();
列表结果=session.createQuery(“来自UserLogin”).List();
commit();
返回结果;
}
}
Spring上下文文件:

<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>

org.hibernate.dialogue.mysqldialogue
真的
com.home.app.model.UserLogin
属性/database.properties