Spring ORM简介
在本教程中,我们将学习什么是springorm以及如何使用它。
什么是Spring ORM?
springorm涵盖了许多技术,如Hibernate、iBatis和JPA等,Spring提供了集成类,因此,所提到的每一种技术都可以按照Spring的configuration原则来实现。
推荐的集成风格是针对Hibernate、JPA和JDO生成DAOs。
因为所有东西都被设计成一组可重用的javabean,所以我们可以从ORM支持中提取与从库中提取一样多的功能。
使用ORM的优势
因为我们要用一个名为“Entity”的java对象映射到一个数据库表,所以我们可以使用OOP概念(如继承和封装等)与环境交互。这是一个巨大的好处,因为我们已经熟悉OOP的概念,而且我们不必花时间学习新的概念等等。
更容易测试
常见数据访问异常
一般资源管理
集成事务管理
实施
首先,我们需要在Spring容器中设置SessionFactory。这样做是为了避免将应用程序对象绑定到硬编码的资源查找。我们将HibernateSessionFactory定义为应用程序上下文中的bean。如果我们不熟悉beans,可以单击此处。
<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容器中引用上述定义的SessionFactory的DAO定义以及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);
}
}
以上代码片段取自原始文档。
我们在这里所做的是,我们创建了一个ProductDaoImpl clas来实现ProductDao接口,在它里面,我们有HibernateTemplate实例变量和*setSessionFactory()和loadProductsByCategory()*方法。
如我们所见,在setSessionFactory()方法中,我们将hibernateTemplate设置为指定的sessionFactory。
什么是hibernatemplate?
HibernateTemplate是一个帮助简化数据访问代码的类。此类将HibernateExceptions转换为DataAccessExceptions,后者是未检查的异常。HibernateTemplate用于实现数据访问或者业务逻辑服务。

