
本文共 2343 字,大约阅读时间需要 7 分钟。
一、Spring中集成Hibernate
Hibernate是开发者社区中广泛使用的开源持久化框架,它不仅提供基本的对象关系映射功能,还支持复杂的ORM操作如缓存、延迟加载、预先抓取以及分布式缓存等。
1.1 声明Hibernate的Session工厂
Hibernate的Session工厂是通过SessionFactory接口定义的,Spring可以通过自定义的工厂Bean来配置。在Spring应用上下文中添加以下Bean即可创建SessionFactory:
```java @Bean public LocalSessionFactoryBean hibernateSessionFactory() { return new LocalSessionFactoryBean(); } ```1.2 配置Hibernate Repository
为了支持Hibernate的Repository功能,我们需要在Spring应用上下文中添加PersistenceExceptionTranslationPostProcessor bean。这样可以将Hibernate平台相关的异常转换为Spring的非检查型数据访问异常:
```java @Bean public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslator() { return new PersistenceExceptionTranslationPostProcessor(); } ```1.3 注入Hibernate的Session
通过@Autowired注解可以注入Hibernate的Session。在实际应用中,通常会通过SessionFactory获取Session:
```java @Autowired private SessionFactory sessionFactory;public Session getSession() { return sessionFactory.getSession(); }
二、Spring与Java持久化API(JPA)
2.1 配置实体管理器工厂
在Spring中配置JPA实体管理器工厂有两种选择:一种是使用应用程序管理的LocalEntityManagerFactoryBean,另一种是使用容器管理的LocalContainerEntityManagerFactoryBean。两种工厂的主要区别在于实体管理器的生命周期管理:
- **应用程序管理型**:由应用程序直接通过工厂获取EntityManager,需要手动管理事务。- **容器管理型**:由容器(如Spring)负责创建和管理EntityManager,通常用于Java EE环境。2.2 配置持久化单元
持久化单元的配置主要通过persistence.xml文件完成。在Spring中配置LocalEntityManagerFactoryBean时,可以通过设置数据源和JPA厂商适配器来扩展默认配置:
```xml
2.3 使用EntityManager进行操作
在Spring应用中,EntityManager可以通过@PersistenceUnit注解注入到Repository中:
```java @Repository public class JpaRepository {@Autowiredprivate EntityManager entityManager;
}
三、借助Spring Data实现自动化的JPARepository
3.1 注解驱动开发
Spring Data JPA通过@ EnableJpaRepositories注解可以自动发现扩展自Repository接口的类。例如,可以在Java配置类上添加以下注解:
```java@EnableJpaRepositories(basePackage = "com.example.repository")public class SpringDataJpaConfig {}
3.2 定义自定义查询
当Spring Data JPA无法通过命名约定或@Query注解满足需求时,可以通过自定义实现来完成复杂操作。例如,可以创建一个自定义的SpitterRepositoryImpl类:
```java public interface SpitterRepository extends JpaRepositorypublic class SpitterRepositoryImpl implements SpitterSweeper { private EntityManager entityManager;
@Autowiredpublic SpitterRepositoryImpl(EntityManager entityManager) { this.entityManager = entityManager;}public void eliteSweep() { entityManager.createNamedQuery("eliteSweep") .setParameter("status", "ELITE") .executeUpdate();}
}
发表评论
最新留言
关于作者
