Spring Data JPA简介

一 什么是Spring Data JPA

先介绍一下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(对象关系映射)技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,程序通过操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关技术。

随着Hibernate的盛行,Hibernate主导了EJB(Enterprise Java Bean)3.0 的JPA(Jave Persistence API)规范。JPA是一个基于O/R映射的标准规范。所谓规范即只定义了标准规则(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不和软件提供商的实现打交道。JPA的主要实现有Hibernate、EclipseLink和OpenJPA等,这也意味着我们只要使用JPA来开发,无论是哪一个开发方式都是一样的。

Spring Data JPA是Spring Data的一个子项目,它通过提供基于JPA的Repsitory极大地减少了JPA作为数据访问方案的代码量。

二 定义数据访问层

使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可,样例定义如下:

public interface PersonRepository extends JpaRepository{
    Long countByAge(Integer age);
    Long deleteByName(String name);
    List findByName(String name);
    List findByNameAndAddress(String name,String address);
}

继承了JpaRepository接口意味着默认已经有了下面的数据访问操作方法:

@NoRepositoryBean
public interface JpaRepository extends PagingAndSortingRepository {
    List findAll();
    List findAll(Sort sort);
    List findAll(Iterable ids);
     List save(Iterable entities);
    void flush();
     S saveAndFlush(S entity);
    void deleteInBatch(Iterable entities);
    void deleteAllInBatch();
    T getOne(ID id);
}

三 配置使用Spring Data JPA

在Spring环境下,使用Spring Data JPA可以通过@EnableJpaRepositories注解来开启Spring Data JPA的支持。

先看看@EnableJpaRepositories的定义

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(JpaRepositoriesRegistrar.class)
public @interface EnableJpaRepositories {

    String[] value() default {};   //用来扫描数据访问层所在包下的数据访问的接口定义
    String[] basePackages() default {};
    Class[] basePackageClasses() default {};
    Filter[] includeFilters() default {};
    Filter[] excludeFilters() default {};
    String repositoryImplementationPostfix() default "Impl";
    String namedQueriesLocation() default "";
    Key queryLookupStrategy() default Key.CREATE_IF_NOT_FOUND;
    Class repositoryFactoryBeanClass() default JpaRepositoryFactoryBean.class;  //指定Repository的工厂类
    Class repositoryBaseClass() default DefaultRepositoryBaseClass.class;
    String entityManagerFactoryRef() default "entityManagerFactory";
    String transactionManagerRef() default "transactionManager";
    boolean considerNestedRepositories() default false;
    boolean enableDefaultTransactions() default true;
}

参考https://blog.csdn.net/tengxvincent/article/details/79259828

使用样例1:

@SpringBootApplication
@EnableJpaRepositories(repositoryFactoryBeanClass = CustomRepositoryFactoryBean.class)
public class Ch82Application {
    @Autowired
    PersonRepository personRepository;
        
    public static void main(String[] args) {
        SpringApplication.run(Ch82Application.class, args);

    }
}

使用样例2:

@Configuration
@EnableJpaRepositories("com.wisely.repos")
public class JpaConfiguration {
    @Bean
    public EntityManagerFactory entityManagerFactory() {
        //......
    }
}

 

你可能感兴趣的:(Spring,Boot)