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
|
@Bean public 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支持编程式事务管理和声明式的事务管理. 编程式事务管理 将事务管理代码嵌到业务方法中来控制事务的提交和回滚 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码 声明式事务管理 一般情 ...
随机推荐
- 微软TFS Agile/CMMI/Scrum
二.VS Online 与 Agile/Cmmi/Scrum 介绍了背景,那就言归正传了.VS Online 和文章标题有什么关系呢? 成功注册VS Online之后,我准备创建自己的project时 ...
- java多线程系类:JUC集合:01之框架
概要 之前,在"Java 集合系列目录(Category)"中,讲解了Java集合包中的各个类.接下来,将展开对JUC包中的集合进行学习.在学习之前,先温习一下"Java ...
- javaScript 中的布尔运算符 && 和 ||
布尔运算符 && 和 ||的返回结果不一定是布尔值!由此来展开一定的研究及理解. 1.首先先介绍下常见的数据类型转化为bool后的值. (常用地方)在if表达式中,javascript ...
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...
- 日志文件清理工具V1.1
上次做完日志文件清理工具V1.0 的版本后,确实给自己的工作带来不少的方便.虽然只是一个小工具,代码也比较简单,但有用就是好东西.上次开发比较匆忙,有些细节没来得及完善,今天吃完晚饭,边看亚冠比赛边把 ...
- manachor
在原字符串每个字符间各插入一个未曾出现的字符,在字符串头插入另一个未出现的字符防止越界,求出的p[i]-1既为以i为中心的最长回文串的长度 void manacher(){ ,id; ;i<=n ...
- [转]ExtJs:xtype的含义
原文地址:http://www.cnblogs.com/timy/archive/2010/08/13/1799111.html 根据我在EXT论坛上的观察,xtype用起来的时候疑惑会比较多.甚至有 ...
- JAVA之IO流(字节流)
输入和输出 JAVA的流分为输入流和输出流两部分, 输入流:InputStream或者Reader:从文件中读到程序中: 输出流:OutputStream或者Writer:从程序中输出到文件中: Re ...
- fedora22命令useradd,groupadd等命令不能自动补全
sudo ls -l /sbin/useradd 发现登陆账户没有读权限 修改为其他账户为读权限即可
- python对Mysql操作和使用ORM框架(SQLAlchemy)
python对mysql的操作 Mysql 常见操作 数据库操作 创建数据库 create database fuzjtest 删除数据库 drop database fuzjtest 查询数据库 s ...