Spring实战之使用对象-关系映射持久化数据

Spring实战读书笔记

第十一章:使用对象-关系映射持久化数据

 

在Spring中集成Hibernate

  • 使用Hibernate所需的主要接口是org.hibernate.Session,Session接口提供了基本的数据访问功能。而Session对象获取的标准方式是借助Hibernate SessionFactory接口的实现类。

  • Spring提供了多个Session工厂bean,如果你使用的是XML定义映射则需要使用LocalSessionFactory。一般来说,使用原生Hibernate都是使用XML定义映射,使用注解则使用Hibernate JPA。

  • 注入Factory bean的时候还有设置诸多属性,如dataSource、PackageToScan。还有Hibernate的诸多设置。

Spring集成JPA

  • 在Spring中使用JPA的第一步是通过EntityManagerFactory的实现类获得EntityManager实例。

  • JPA定义了两种类型的实体管理类:应用程序管理类型、容器管理类型。分别由Spring中的LocalEntityMangerFactoryBean和LocalContainerEntityMangerFactoryBean两个工厂bean创建。

  • 配置应用程序管理类型JPA:

    • 我们需要在META-INF目录下创建persistence.xml,在xml文件内通过<persistence-unit>元素配置持久化单元。

    • 然后我们在装配LocalEntityMangerFactoryBean的时候,要为它注入持久化单元的名称,这样JPA就能在persistence.xml文件内到持久化信息。

  • 配置容器管理类型JPA:

    • LocalContainerEntityMangerFactoryBean可以直接装配,它需要属性分别是:dataSource、packageToScan和jpaVendorAdapter。

    • jpaVendorAdapter用来指明所有的是哪个厂商的JPA实现,Spring提供了多个JPA厂商适配器,在此我们使用HibernateJpaVendorAdapter。在注入HibernateJpaVendorAdapter的时候,需要设置的就是一些Hibernate的属性。如,setDataBase、setShowSql。

    • packageToScan设置的就是LocalContainerEntityMangerFactoryBean要扫描的包,它会自动扫描我们所配置的包,查找@Entity注解修饰的类。

  • 配置好EntityManagerFactory的实现类之后,下一步就是将它注入到Repository类中。

    • 我们可以通过@PersistenceUnit注解注入EntityManagerFactory,但是这样我们每次都需要调用createEntityManager方法来获取EntityManager对象,比较麻烦。

    • 我们还可以通过@PersistenceContext注解直接注入EntityManager对象,其实它并没有将真正的EntityManager注入,而是给了一个EntityManager的代理。

    • 还有就是@PersistenceUnit和@PersistenceContext并不是Spring的注解,而是JPA规范提供的。所以我们要想使用它们必须先配置PersistenceAnnotationBeanPostProcessor,不过如果我们已经配置了<context:annotation-config>或<context:component-scan>就不必在关心了,因为它们会帮我们自动注册这个bean。否则,我们就需要显示的注册这个bean。

借助Spring Data实现自动化的JPA Repository

  • 我们首先要配置Spring Data JPA,在XML中可以通过<jpa:repositories base-package=" ">元素,Java配置则要使用@EnableJpaRepositories(basePackage=" ")注解。Spring Data会扫描基础包,查找扩展了Repository接口的所有接口。如果接口扩展了Repository接口,Spring Data会在应用启动的时候自动生成这个接口的实现。

  • Spring Data提供了几种方式添加自定义方法:

    • 通过DSL语言特定的命名规则,实现自定义查询。

    • 通过@Query注解写入SQL语句,实现自定义方法的查询。

    • 自定义接口扩展Respository接口,然后自己再添加接口的实现类(实现类的命名默认是“接口名+Impl”),Spring Data会通过名称将实现类与接口关联起来。这样也能实现自定义查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值