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

什么是 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,可以单击此处。
<beans><bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="org.hsqldb.jdbcDriver"/><property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/><property name="username" value="sa"/><property name="password" value=""/></bean><bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="myDataSource"/><property name="mappingResources"><list><value>product.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value></property></bean></beans>
以下示例显示了 Spring 容器中的 DAO 定义,该定义引用了上面定义的SessionFactory和 DAO 方法实现的示例。
<beans><bean id="myProductDao" class="product.ProductDaoImpl"><property name="sessionFactory" ref="mySessionFactory"/></bean></beans>
public class ProductDaoImpl implements ProductDao {private HibernateTemplate hibernateTemplate;public void setSessionFactory(SessionFactory sessionFactory) {this.hibernateTemplate = new HibernateTemplate(sessionFactory);}public Collection loadProductsByCategory(String category) throws DataAccessException {return this.hibernateTemplate.find("from test.Product product where product.category=?", category);}}
以上代码段摘自原始文档。
我们在这里所做的是,创建了一个实现ProductDao接口的ProductDaoImpl cla,并在其中包含HibernateTemplate实例变量以及setSessionFactory()和loadProductsByCategory()方法。
如您所见,在setSessionFactory()方法中,我们将hibernateTemplate设置为指定的sessionFactory。
什么是HibernateTemplate?
HibernateTemplate是一个类,可帮助简化数据访问代码。 此类将HibernateExceptions转换为DataAccessExceptions,这是未经检查的异常。HibernateTemplate用于实现数据访问或业务逻辑服务。
如果您对 ORM API 支持的所有方法感兴趣,则可以查看 Oracle javadoc 。
