ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Spring ORM 简介 > 原文: [https://javatutorial.net/introduction-to-spring-orm](https://javatutorial.net/introduction-to-spring-orm) 在本教程中,您将学习什么是 Spring ORM 以及如何使用它。 ![java-featured-image](https://img.kancloud.cn/05/3e/053ee0bb59842d92359246c98f815e0c_780x330.jpg) ## 什么是 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,[可以单击此处](https://javatutorial.net/introduction-to-spring-bean)。 ```java <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 方法实现的示例。 ```java <beans> <bean id="myProductDao" class="product.ProductDaoImpl"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> </beans> ``` ```java 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); } } ``` 以上代码段摘自[原始文档](https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/orm.html)。 我们在这里所做的是,创建了一个实现`ProductDao`接口的`ProductDaoImpl cla`,并在其中包含`HibernateTemplate`实例变量以及`setSessionFactory()`和`loadProductsByCategory()`方法。 如您所见,在`setSessionFactory()`方法中,我们将`hibernateTemplate`设置为指定的`sessionFactory`。 ### 什么是`HibernateTemplate`? `HibernateTemplate`是一个类,可帮助简化数据访问代码。 此类将`HibernateExceptions`转换为`DataAccessExceptions`,这是未经检查的异常。`HibernateTemplate`用于实现数据访问或业务逻辑服务。 如果您对 ORM API 支持的所有方法感兴趣,则可以查看 [Oracle javadoc](https://static.javadoc.io/org.springframework/spring-orm/5.0.8.RELEASE/index.html?overview-summary.html) 。