Spring Data JPA @EnableJpaRepositories配置详解
@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
|
@Beanpublic JpaTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); return transactionManager;} |
Spring Data JPA @EnableJpaRepositories配置详解的更多相关文章
- Spring 入门 web.xml配置详解
Spring 入门 web.xml配置详解 https://www.cnblogs.com/cczz_11/p/4363314.html https://blog.csdn.net/hellolove ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- spring boot application properties配置详解
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- Spring Boot整合Mybatis配置详解
首先,你得有个Spring Boot项目. 平时开发常用的repository包在mybatis里被替换成了mapper. 配置: 1.引入依赖: <dependency> <gro ...
- spring security 3.2 配置详解(结合数据库)
没事就来了解下spring security.网上找了很多资料.有过时的,也有不是很全面的.各种问题也算是让我碰了个遍.这样吧.我先把整个流程写下来,之后在各个易混点分析吧. 1.建立几个必要的页面. ...
- 笔记:Spring Cloud Ribbon 客户端配置详解
自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...
- 电商网站开发记录(三) Spring的引入,以及配置详解
1.web.xml配置注解<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...
- Spring Cloud Eureka 常用配置详解,建议收藏!
前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...
- Spring声明式事务配置详解
Spring支持编程式事务管理和声明式的事务管理. 编程式事务管理 将事务管理代码嵌到业务方法中来控制事务的提交和回滚 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码 声明式事务管理 一般情 ...
随机推荐
- [LeetCode] The Skyline Problem
A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...
- Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能
Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...
- 【Ckediter】
- 关于dll
今日看到一个不带dllmain的dll,忽然觉得有点奇怪,然后查了一下,原来dll还可以不需要dllmain,甚至可以自己定义入口 先mark以下的资料,有空再总结一下...同时dll劫持,有必要亲身 ...
- Android BLE 蓝牙编程(四)
接上篇,我们已经实现了短震,长震的功能了- 现在我们需要实现点击后一直震动的功能 开始我的想法是再循环中不断执行write方法,然而这个办法行不通. 系统会报错. 那要如何实现这个想法呢?其实很简单, ...
- HTTP协议(二):header标头说明
Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成的估算时间(以秒计 ...
- python实现计算器
计算器功能 实现优先级解析,加减乘除四则运算 自定义小数位精度 实现思想: 先找到最里层括号,根据乘除,加减优先级,调用写好的乘除.加减运算函数算出括号内总值,再将原括号式用所得值替换,此过程循环进行 ...
- 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...
- spring-初始化完成后运行指定内容
方案1:继承ApplicationListener public class InstantiationTracingBeanPostProcessor implements ApplicationL ...
- js获取Html元素的实际宽度高度
第一种情况就是宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度. 第 ...