在本教程中,您将学习什么是 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 。