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支持编程式事务管理和声明式的事务管理. 编程式事务管理 将事务管理代码嵌到业务方法中来控制事务的提交和回滚 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码 声明式事务管理 一般情 ...
随机推荐
- asp.net页面关闭的时候如何触发事件?
<script type="text/javascript"> var pb_strConfirmCloseMessage; var pb_blnCloseWind ...
- VSS每次打开都需要服务器账号和密码的解决方法
最近在做的一个项目还在使用非常非常古老的VSS(Microsoft Visual SourceSafe)2005,是的,没有看错,是VSS2005,而不是Git或是SVN.然后我的VSS在安装过后遇到 ...
- canvas弹动2
在上一次的例子上加深一点点,这次我们选择动态的绑定目标点,三个目标相互转化,实现的思路是以拖拽点为目标计算出除了拖拽点以外的两个圆球的位置 以上个案例的公式,设点分别为A,B,C,当我拖拽点A时其余两 ...
- mysql的基本命令行操作
mysql>CREATE DATABASE imooc; //创建数据库 mysql> USE imooc ;//选择数据库 mysql> SELECT DATABASE();//查 ...
- IE下a标签后面的span元素向右浮动后错位
错误原因span放在了a标签之后 正确写法是放在之前 如下: <li><span>2016-07-29</span><a href="#" ...
- Spinner
资源的方式添加 安卓中的下拉框 Spinner可以通过xml string中配置 <string-array name="spingarr"> <item> ...
- java高新技术-操作javaBean
1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...
- winform刷新UI界面
this.Invoke(new Action(() => { // 更新使用次数 this.labCount.Text = count; }));
- <<< Java生成Md5
package cn.sevennight.test; import java.security.MessageDigest; public class md5{ public static Stri ...
- easyUi datagrid 返回时间格式化操作
1.格式化返回的时间 { field : 'endTime', title : '轮播图片循环的结束时间', width : 50, align : 'center' //格式化时间操作 format ...