扩展+spring+data+jpa

上传人:第*** 文档编号:31420956 上传时间:2018-02-07 格式:DOC 页数:5 大小:68.50KB
返回 下载 相关 举报
扩展+spring+data+jpa_第1页
第1页 / 共5页
扩展+spring+data+jpa_第2页
第2页 / 共5页
扩展+spring+data+jpa_第3页
第3页 / 共5页
扩展+spring+data+jpa_第4页
第4页 / 共5页
扩展+spring+data+jpa_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《扩展+spring+data+jpa》由会员分享,可在线阅读,更多相关《扩展+spring+data+jpa(5页珍藏版)》请在金锄头文库上搜索。

1、 重庆达渝仁科技官网:扩展 Spring Data JPA在编写 Spring Data JPA 的 DAO 时, 只需在接口中按规约提供方法的声明即可。 而有些业务实现无法通过声明方法或编写简单 SQL 实现, 这就需要扩展 Spring Data JPA。本文主要探讨 2 个问题:1. 如何为某一个特定 Repository 添加自定义方法。2. 如何为所有的 Repository 添加自定义的方法。问题 1: 为某一个特定 Repository 添加自定义方法。 具体步骤:1) 定义一个接口 : 声明要添加的方法2) 提供该接口的实现类: 类名需符合 EntityNameReposito

2、ryImpl 格式, 并提供方法的实现3) 声明一个 Repository 接口 , 并继承 1) 声明的接口4) 使用5) 注意: 默认情况下, Spring Data 会在 base-package 中查找 接口名 Impl作为实现类. 也可以通过 repository-impl-postfix 声明后缀示例代码:1) 定义一个接口 : 声明要添加的方法package com.atguigu.jpa.repository;public interface EmployeeDao void method();2) 提供该接口的实现类: 类名需符合 EntityNameRepositoryIm

3、pl 格式, 并提供方法的实现package com.atguigu.jpa.repository;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;public class EmployeeRepositoryImpl implements EmployeeDao/获取当前线程的 EntityManager 实例PersistenceContextprivate EntityManager entityManager; 重庆达渝仁科技官网:Overridepublic void

4、 method() System.out.println(method. + entityManager);3) 声明一个 Repository 接口 , 并继承 1) 声明的接口package com.atguigu.jpa.repository;import org.springframework.data.jpa.repository.JpaRepository;import com.atguigu.jpa.beans.Employee;public interface EmployeeRepositoryextends JpaRepository, EmployeeDao4) 使用Em

5、ployeeRepository employeeRepository =ctx.getBean(EmployeeRepository.class);employeeRepository.method();问题 2: 为所有的 Repository 添加自定义的方法。 具体步骤:1) 声明一个接口 , 在该接口中声明需要自定义的方法, 该接口需要继承 Spring Data 的 Repository 接口或其子接口 .2) 提供 1) 所声明的接口的实现类. 且继承 SimpleJpaRepository, 并提供方法的实现。 注意: 全局的扩展实现类不要用 RepositoryImp 作为后

6、缀名,或为全局扩展接口添加NoRepositoryBean 注解告知 Spring Data: 该实现类不是一个 Repository3) 定义 RepositoryFactoryBean 的实现类, 使其生成 1) 定义的接口实现类的对象4) 修改 节点的 factory-class 属性指向 3) 的全类名5) 使用示例代码:1) 声明一个接口 , 在该接口中声明需要自定义的方法 , 该接口需要继承 Spring Data 的 Repository 接口或其子接口.package com.atguigu.jpa.repository; 重庆达渝仁科技官网:import java.io.Se

7、rializable;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.repository.NoRepositoryBean;NoRepositoryBeanpublic interface BaseDaoextends JpaRepositoryvoid method2();2) 提供 1) 所声明的接口的实现类. 且继承 SimpleJpaRepository, 并提供方法的实现。 注意: 全局的扩展实现类不要用 RepositoryImp 作为后缀名

8、,或为全局扩展接口添加 NoRepositoryBean 注解告知 Spring Data: 该实现类不是一个 Repositorypackage com.atguigu.jpa.repository;import java.io.Serializable;import javax.persistence.EntityManager;importorg.springframework.data.jpa.repository.support.SimpleJpaRepository;public class BaseDaoImplextends SimpleJpaRepository implem

9、ents BaseDao private EntityManager entityManager;public BaseDaoImpl(Class domainClass, EntityManager em) super(domainClass, em);this.entityManager = em;Overridepublic void method2() System.out.println(method2. + entityManager);3) 定义 RepositoryFactoryBean 的实现类, 使其生成 1) 定义的接口实现类 重庆达渝仁科技官网:的对象package c

10、om.atguigu.jpa.repository;import java.io.Serializable;import javax.persistence.EntityManager;import org.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.support.JpaRepositoryFactory;importorg.springframework.data.jpa.repository.support.JpaRepositoryFact

11、oryBean;import org.springframework.data.repository.core.RepositoryMetadata;importorg.springframework.data.repository.core.support.RepositoryFactorySupport;public class BaseDaoRepositoryFactoryBean,S, ID extends Serializableextends JpaRepositoryFactoryBean Overrideprotected RepositoryFactorySupport c

12、reateRepositoryFactory(EntityManager entityManager) return new BaseDaoFactory(entityManager);private static class BaseDaoFactoryextends JpaRepositoryFactorypublic BaseDaoFactory(EntityManager entityManager) super(entityManager);Overrideprotected JpaRepositorygetTargetRepository(RepositoryMetadata me

13、tadata,EntityManager entityManager) 重庆达渝仁科技官网:return newBaseDaoImpl(metadata.getDomainType(), entityManager);Overrideprotected Class getRepositoryBaseClass(RepositoryMetadata metadata) return BaseDao.class;4) 修改 节点的 factory-class 属性指向 3) 的全类名5) 使用DepartmentRepository departmentRepository =(DepartmentRepository) ctx.getBean(departmentRepository); departmentRepository.method2();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号