Spring Data JPA @EnableJpaRepositories配置详解

转载 2016年08月29日 12:10:53

转载地址:http://blog.csdn.net/catoop/article/details/50575038

@EnableJpaRepositories注解用于Srping JPA的代码配置,用于取代xml形式的配置文件,@EnableJpaRepositories支持的配置形式丰富多用,本篇文章详细讲解。

1、简单配置

1 @EnableJpaRepositories("com.spr.repository")

简单配置支持多个package,格式如下:

1 @EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

 

2、单值和多组值配置方式

大部分注解可以都支持单个注解方式和多个注解,多个注解通常采用"{}"符号包含的一组数据。

比如:字符串形式的  "x.y.z"  =>  {"x.y.z","a.b.c"}

类别: A.class => {A.class, B.class}

 

3、完整的@EnableJpaRepositories注解

复制代码
 1 @EnableJpaRepositories(
 2     basePackages = {},
 3     basePackageClasses = {},
 4     includeFilters = {},
 5     excludeFilters = {},
 6     repositoryImplementationPostfix = "Impl",
 7     namedQueriesLocation = "",//META-INF/jpa-named-queries.properties
 8     queryLookupStrategy=QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND, //QueryLookupStrategy.Key.x
 9     repositoryFactoryBeanClass=JpaRepositoryFactoryBean.class, //class
10     entityManagerFactoryRef="entityManagerFactory",
11     transactionManagerRef="transactionManager",
12     considerNestedRepositories=false, 
13     enableDefaultTransactions=true
14 )
复制代码

下面分别解释各个配置项的作用

1)basePackage

用于配置扫描Repositories所在的package及子package。简单配置中的配置则等同于此项配置值,basePackages可以配置为单个字符串,也可以配置为字符串数组形式。

1 @EnableJpaRepositories(
2         basePackages = "com.cshtong")

多个包路径

1 @EnableJpaRepositories(
2         basePackages = {"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

 

2)basePackageClasses

指定 Repository 类

1 @EnableJpaRepositories(basePackageClasses = BookRepository.class)
1 @EnableJpaRepositories(
2         basePackageClasses = {ShopRepository.class, OrganizationRepository.class})

备注:测试的时候发现,配置包类的一个Repositories类,该包内其他Repositores也会被加载

3)includeFilters

过滤器,该过滤区采用ComponentScan的过滤器类

1 @EnableJpaRepositories(
2         includeFilters={@ComponentScan.Filter(type=FilterType.ANNOTATION, value=Repository.class)})

 

4)excludeFilters

不包含过滤器

1 @EnableJpaRepositories(
2         excludeFilters={
3                 @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Service.class),
4                 @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class)})

 

5)repositoryImplementationPostfix

实现类追加的尾部,比如ShopRepository,对应的为ShopRepositoryImpl

6)namedQueriesLocation

named SQL存放的位置,默认为META-INF/jpa-named-queries.properties

7)queryLookupStrategy

构建条件查询的策略,包含三种方式CREATE,USE_DECLARED_QUERY,CREATE_IF_NOT_FOUND

  • CREATE:按照接口名称自动构建查询
  • USE_DECLARED_QUERY:用户声明查询
  • CREATE_IF_NOT_FOUND:先搜索用户声明的,不存在则自动构建

该策略针对如下通过接口名称自动生成查询的场景

复制代码
  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property
  List<Person> findByLastnameIgnoreCase(String lastname);
  // Enabling ignoring case for all suitable properties
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname)
复制代码

8)repositoryFactoryBeanClass

指定Repository的工厂类

9)entityManagerFactoryRef

实体管理工厂引用名称,对应到@Bean注解对应的方法

复制代码
 1     @Bean
 2     public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
 3         LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
 4         entityManagerFactoryBean.setDataSource(dataSource());
 5         entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
 6         entityManagerFactoryBean
 7                 .setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
 8         entityManagerFactoryBean.setJpaProperties(hibProperties());
 9         return entityManagerFactoryBean;
10     }
复制代码

 

10)transactionManagerRef

事务管理工厂引用名称,对应到@Bean注解对应的方法

1
2
3
4
5
6
@Bean
public JpaTransactionManager transactionManager() {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
    return transactionManager;
}

spring Data Jpa入门

参考资料 1:http://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/ 2:http://docs.spring.i...
  • xiejx618
  • xiejx618
  • 2014年05月08日 13:05
  • 7256

Spring技术内幕之Spring Data JPA-自定义Repository实现

1.自定义Repository方法接口,让接口的实现类来继承这个中间接口而不是Repository接口 package com.data.jpa.dao; import java.io.Serial...
  • u011659172
  • u011659172
  • 2016年05月30日 15:12
  • 16853

【Spring】Spring高级话题-@Enable***注解的工作原理

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 @EnableAspectJAutoProxy @EnableAspect...
  • qq_26525215
  • qq_26525215
  • 2016年12月09日 21:11
  • 15220

基于Spring Boot与Spring Data JPA的多数据源配置

由于项目需要,最近研究了一下基于Spring Boot与Spring Data JPA的多数据源配置问题。以下是传统的单数据源配置代码。这里使用的是Spring的Annotation在代码内部直接配置...
  • gabriel_2
  • gabriel_2
  • 2015年06月02日 15:00
  • 13096

JPA配置详解之jpaProperties

  • LQW_java_home
  • LQW_java_home
  • 2016年11月08日 10:00
  • 9449

一步一步学SpringDataJpa——JpaRepository查询功能

1.JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下。 Keyword Sample J...
  • ming070423
  • ming070423
  • 2014年03月25日 18:47
  • 36035

SPRING-DATA-JPA 全局DAO配置

配置文件:spring-jpa.xml
  • z69183787
  • z69183787
  • 2015年01月08日 19:20
  • 10614

spring boot 整合spring data jpa

本文结构: - 什么是springdata jpa - springboot 整合spring data jpaSpring Data Repository的核心接口是Repository(好像也...
  • u012373815
  • u012373815
  • 2016年11月20日 16:38
  • 14356

Spring Boot JPA 连接数据库

本文将介绍如何在Spring Boot 工程中添加JPA作为持久化方式。修改 pom.xml 依赖与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 修改为 spri...
  • catoop
  • catoop
  • 2016年01月13日 09:41
  • 33425

Spring Boot集成Spring Data

1.pom.xml配置 org.springframework.boot spring-boot-starter-parent 1.3.1.RELEASE ...
  • u011659172
  • u011659172
  • 2016年01月28日 10:43
  • 1195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Data JPA @EnableJpaRepositories配置详解
举报原因:
原因补充:

(最多只允许输入30个字)