Spring ORM简介

时间:2020-02-23 14:29:28  来源:igfitidea点击:

在本教程中,我们将学习什么是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用于实现数据访问或者业务逻辑服务。