原文: https://javatutorial.net/introduction-to-spring-orm

在本教程中,您将学习什么是 Spring ORM 以及如何使用它。

Spring ORM 简介 - 图1

什么是 Spring ORM?

Spring ORM 涵盖了 Hibernate,iBatis 和 JPA 等许多技术。 Spring 提供了集成类,因此,所提到的每种技术都可以按照 Spring 的配置原则来实现。

推荐的集成方式是针对 Hibernate,JPA 和 JDO 制作 DAO。

因为所有内容都是作为一组可重用的 JavaBean 设计的,所以我们可以从 ORM 支持中提取与从库中提取一样多的功能。

使用 ORM 的优点

由于我们使用名为“实体”的 java 对象映射到数据库表,因此我们可以使用诸如继承和封装之类的 OOP 概念与环境进行交互。 这是一个巨大的好处,因为我们已经熟悉 OOP 概念,并且不必花时间学习新概念等。

  • 更容易的测试
  • 常见的数据访问异常
  • 一般资源管理
  • 整合交易管理

要完全深入了解上述优点,请单击此处以获取文档。

实践

首先,我们需要在 Spring 容器中设置SessionFactory。 这样做是为了避免将应用程序对象与硬编码的资源查找绑定在一起。 我们在应用程序上下文中将 Hibernate SessionFactory定义为 bean。 如果您不熟悉 bean,可以单击此处

  1. <beans>
  2. <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  3. <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
  4. <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
  5. <property name="username" value="sa"/>
  6. <property name="password" value=""/>
  7. </bean>
  8. <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  9. <property name="dataSource" ref="myDataSource"/>
  10. <property name="mappingResources">
  11. <list>
  12. <value>product.hbm.xml</value>
  13. </list>
  14. </property>
  15. <property name="hibernateProperties">
  16. <value>
  17. hibernate.dialect=org.hibernate.dialect.HSQLDialect
  18. </value>
  19. </property>
  20. </bean>
  21. </beans>

以下示例显示了 Spring 容器中的 DAO 定义,该定义引用了上面定义的SessionFactory和 DAO 方法实现的示例。

  1. <beans>
  2. <bean id="myProductDao" class="product.ProductDaoImpl">
  3. <property name="sessionFactory" ref="mySessionFactory"/>
  4. </bean>
  5. </beans>
  1. public class ProductDaoImpl implements ProductDao {
  2. private HibernateTemplate hibernateTemplate;
  3. public void setSessionFactory(SessionFactory sessionFactory) {
  4. this.hibernateTemplate = new HibernateTemplate(sessionFactory);
  5. }
  6. public Collection loadProductsByCategory(String category) throws DataAccessException {
  7. return this.hibernateTemplate.find("from test.Product product where product.category=?", category);
  8. }
  9. }

以上代码段摘自原始文档

我们在这里所做的是,创建了一个实现ProductDao接口的ProductDaoImpl cla,并在其中包含HibernateTemplate实例变量以及setSessionFactory()loadProductsByCategory()方法。

如您所见,在setSessionFactory()方法中,我们将hibernateTemplate设置为指定的sessionFactory

什么是HibernateTemplate

HibernateTemplate是一个类,可帮助简化数据访问代码。 此类将HibernateExceptions转换为DataAccessExceptions,这是未经检查的异常。HibernateTemplate用于实现数据访问或业务逻辑服务。

如果您对 ORM API 支持的所有方法感兴趣,则可以查看 Oracle javadoc