Spring Data JPA(三)——SpringBoot对Spring Data JPA的支持

半世苍凉 提交于 2020-04-29 14:33:54

一、JDBC的自动配置

    spring-boot-starter-data-jpa依赖于spring-boot-starter-jdbc,而SpringBoot对JDBC做了一些自动配置。源码放置在org.springframework.boot.autoconfigure.jdbc下,如图所示:
    
    大概看一下源码,就能看到是通过“spring.datasource”为前缀的属性自动配置dataSource;
    SpringBoot自动开启了注解事务的支持(@EnableTransactionManagement);还配置了一个jdbcTemplate。
    SpringBoot还提供了一个初始化数据的功能:放置在类路劲下的schema.sql文件会自动用来初始化表结构;放置在类路径下的data.sql文件会自动用来填充表数据。

二、对JPA的自动配置

    SpringBoot对JPA的自动配置放在org.springframework.boot.autoconfigure.orm.jpa下,Spring Boot 1.x和2.x有所差别,但大致逻辑是一样的。
    1.x版本
    
    2.x版本
    
 
     2.x与1.x版本有以下区别:
  • @Configuration注解增加了属性:proxyBeanMethods = false
  • @ConditionalOnClass注解增加了一个元素:SessionImplementor.class
  • 取消了注解@Conditional({HibernateEntityManagerCondition.class})
  • 取消继承JpaBaseConfiguration
  • 增加注解@EnableConfigurationProperties(JpaProperties.class)
  • 抽离内部逻辑到HibernateJpaConfiguration,并通过@Import注解导入。
      SpringBoot默认JPA的实现者是Hibernate;HibernateJpaAutoConfiguration依赖于DataSourceAutoConfiguration。
    从JpaProperties源码中看出,配置JPA可以使用spring.jpa为前缀的属性在application.properties中配置。
    HibernateJpaAutoConfiguration引入HibernateJpaConfiguration, HibernateJpaConfiguration继承JPABaseConfiguration。从JpaBaseConfiguration源码中看出,SpringBoot为我们配置了transactionManager、JpaVendorAdapter、entityManagerFactory等Bean。JpaBaseConfiguration还有一个getPackagesToScan方法,可以自动扫描注解有@Entity的实体类。

三、对Spring Data JPA的自动配置

    Spring Boot对Spring Data JPA的自动配置放在org.springframework.boot.autoconfigure.data.jpa下。 (1.x和2.x有区别,不再关注1.x)
    
    从JPARepositoriesAutoConfiguration和JpaRepositoriesRegistrar源码看出, JPARepositoriesAutoConfiguration依赖于HibernateJpaAutoConfiguration配置的,且SpringBoot自动开启了对Spring Data JPA的支持,即我们无需在配置类显示声明@EnableJpaRepositories。

四、SpringBoot下的Spring Data JPA

    我们在Spring Boot下使用Spring Data JPA,在项目的Maven依赖里添加spring-boot-starter-data-jpa,然后只需定义DataSource、实体类和数据访问层,并在需要使用数据访问的地方注入数据访问层的Bean即可,无须任何额外配置。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!