加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Spring Data JPA @EnableJpaRepositories配置分析

发布时间:2021-11-19 12:25:04 所属栏目:教程 来源:互联网
导读:@EnableJpaRepositories注解用于Srping JPA的代码配置,用于取代xml形式的配置文件,@EnableJpaRepositories支持的配置形式丰富多用,本篇文章详细讲解。 1、简单配置 1 @EnableJpaRepositories(com.spr.repository) 简单配置支持多个package,格式如下: 1

@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;

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读