Spring 中集成Hibernate
发布日期:2021-05-07 20:54:57 浏览次数:23 分类:精选文章

本文共 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 {
@Autowired
private 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 JpaRepository
{ void eliteSweep(); }

public class SpitterRepositoryImpl implements SpitterSweeper { private EntityManager entityManager;

@Autowired
public SpitterRepositoryImpl(EntityManager entityManager) {
this.entityManager = entityManager;
}
public void eliteSweep() {
entityManager.createNamedQuery("eliteSweep")
.setParameter("status", "ELITE")
.executeUpdate();
}

}

 
上一篇:C 语言拼接字符串
下一篇:Spring 与使用STOMP消息

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月18日 11时22分44秒