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用于实现数据访问或者业务逻辑服务。