扩展 Spring Data JPA

Spring Data JPA实战(二)-扩展开发 Spring Data JPA实战(二)-扩展开发 在编写 Spring Data JPA 的 DAO 时, 只需在接口中按规约提供方法的声明即可。 而有些业务实现无法通过声明方法或编写简单 SQL 实现, 这就需要扩展Spring Data JPA。 本文主要探讨 2 个问题: 1. 如何为某一个特定 Repository 添加自定义方法。 2. 如何为所有的 Repository 添加......... 阅读详情

在编写 Spring Data JPA 的 DAO 时,只需在接口中按规约提供方法的声明即
可。而有些业务实现无法通过声明方法或编写简单 SQL 实现,这就需要扩展
Spring Data JPA。

**本文主要探讨 2 个问题:

1. 如何为某一个特定 Repository 添加自定义方法。
2. 如何为所有的 Repository 添加自定义的方法。**

问题 1 : 为某一个特定 Repository 添加自定义方法 。具体步骤:

  1. 定义一个接口: 声明要添加的方法

  2. 提供该接口的实现类: 类名需符合 EntityNameRepositoryImpl 格式, 并
    提供方法的实现

  3. 声明一个 Repository 接口, 并继承 1) 声明的接口

  4. 使用

  5. 注意:默认情况下, Spring Data 会在 base-package 中查找 “接口名 Impl”
    作为实现类. 也可以通过 repository-impl-postfix 声明后缀
    示例代码 :

  6. 定义一个接口: 声明要添加的方法

    package com.atguigu.jpa.repository;
    public interface EmployeeDao {
    void method();
    }

  7. 提供该接口的实现类: 类名需符合 EntityNameRepositoryImpl 格式, 并
    提供方法的实现

    package com.atguigu.jpa.repository;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    public class EmployeeRepositoryImpl implements EmployeeDao{
    // 获取当前线程的 EntityManager 实例
    @PersistenceContext
    private EntityManager entityManager;
    @Override
    public void method() {
    System.out.println(“method…” + entityManager);
    }
    }

  8. 声明一个 Repository 接口, 并继承 1) 声明的接口

    package com.atguigu.jpa.repository;
    import org.springframework.data.jpa.repository.JpaRepository;
    import com.atguigu.jpa.beans.Employee;
    public interface EmployeeRepository
    extends JpaRepository<Employee, Integer>, EmployeeDao{
    }

  9. 使用

    EmployeeRepository employeeRepository =
    ctx.getBean(EmployeeRepository.class);
    employeeRepository.method();

问题 2 : 为所有的 Repository 添加自定义的方法。具体步骤:

  1. 声明一个接口, 在该接口中声明需要自定义的方法, 该接口需要继承
    Spring Data 的 Repository 接口或其子接口.

  2. 提供 1) 所声明的接口的实现类. 且继承 SimpleJpaRepository, 并提供方
    法的实现。注意: 全局的扩展实现类不要用 RepositoryImp 作为后缀名,
    或为全局扩展接口添加 @NoRepositoryBean 注解告知 Spring Data: 该
    实现类不是一个Repository

  3. 定义 RepositoryFactoryBean 的实现类, 使其生成 1) 定义的接口实现类
    的对象

  4. 修改 <jpa:repositories /> 节点的 factory-class 属性指向 3) 的全类名

  5. 使用
    示例代码 :

  6. 声明一个接口, 在该接口中声明需要自定义的方法, 该接口需要继承
    Spring Data 的 Repository 接口或其子接口.

    package com.atguigu.jpa.repository;
    import java.io.Serializable;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.repository.NoRepositoryBean;
    @NoRepositoryBean
    public interface BaseDao<T, ID extends Serializable>
    extends JpaRepository<T, ID>{
    void method2();
    }

  7. 提供 1) 所声明的接口的实现类. 且继承 SimpleJpaRepository, 并提供方
    法的实现。注意: 全局的扩展实现类不要用 RepositoryImp 作为后缀名,
    或为全局扩展接口添加 @NoRepositoryBean 注解告知 Spring Data: 该
    实现类不是一个 Repository

    package com.atguigu.jpa.repository;
    import java.io.Serializable;
    import javax.persistence.EntityManager;
    import
    org.springframework.data.jpa.repository.support.SimpleJpaRepository;
    public class BaseDaoImpl<T, ID extends Serializable>
    extends SimpleJpaRepository<T, ID> implements BaseDao<T, ID> {
    private EntityManager entityManager;
    public BaseDaoImpl(Class domainClass, EntityManager em) {
    super(domainClass, em);
    this.entityManager = em;
    }
    @Override
    public void method2() {
    System.out.println(">>>method2…" + entityManager);
    }
    }
    3) 定义 RepositoryFactoryBean 的实现类, 使其生成 1) 定义的接口实现类
    的对象
    package com.atguigu.jpa.repository;
    import java.io.Serializable;
    import javax.persistence.EntityManager;
    import org.springframework.data.jpa.repository.JpaRepository;
    import
    org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
    import
    org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
    import org.springframework.data.repository.core.RepositoryMetadata;
    import
    org.springframework.data.repository.core.support.RepositoryFactorySupport;
    public class BaseDaoRepositoryFactoryBean<R extends JpaRepository<S, ID>,
    S, ID extends Serializable>
    extends JpaRepositoryFactoryBean<R, S, ID> {
    @Override
    protected RepositoryFactorySupport createRepositoryFactory(
    EntityManager entityManager) {
    return new BaseDaoFactory(entityManager);
    }
    private static class BaseDaoFactory<S, ID extends Serializable>
    extends JpaRepositoryFactory{
    public BaseDaoFactory(EntityManager entityManager) {
    super(entityManager);
    }
    @Override
    protected <T, ID extends Serializable> JpaRepository<?, ?>
    getTargetRepository(RepositoryMetadata metadata,
    EntityManager entityManager) {
    return new
    BaseDaoImpl<>(metadata.getDomainType(), entityManager);
    }
    @Override
    protected Class<?> getRepositoryBaseClass(
    RepositoryMetadata metadata) {
    return BaseDao.class;
    }
    }
    }

  8. 修改 <jpa:repositories /> 节点的 factory-class 属性指向 3) 的全类名

    <jpa:repositories base-package=“com.atguigu.jpa.repository”
    entity-manager-factory-ref=“entityManagerFactory”
    transaction-manager-ref=“transactionManager”
    factory-class=“com.atguigu.jpa.repository.BaseDaoRepositoryFactoryBean”/>

  9. 使用

    DepartmentRepository departmentRepository =
    (DepartmentRepository) ctx.getBean(“departmentRepository”);
    departmentRepository.method2();

10 Spring Data JPA扩展 Spring Data JPA扩展 Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时间创建的,谁什么时间修改的,并且能让我们方便的记录操作日志。Spring Data JPA 为我们提供了审计功能的架构实现,提供了四个注解专门解决这件事情: @... 阅读详情

相关推荐

SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository

这一讲主要介绍Spring Data JPA的封装。和设计相关的东西都是仁者见仁,智者见智的事情,如果你有更好的封装方案可以和我交流,互相学习。这一讲会讲如下一些内容 - 扩展Spring Data JPA实现自己的一些特殊方法 - 创建一个自己的BaseRepository - 封装Specification来快速完成一些简单的查询操作 - 封装分页和排序操作。在一些特殊时候,我们会设计到

ynkonghao的博客 6449

扩展spring data jpa的repository

在我们编写代码的过程中,spring data jpa为我们的持久层提供的极大的方便,但有时spring data jpa提供的repository并不能完全满足我们开发的需求,因此就需要进行扩展。spring data jpa的repository的扩展可以对对单个repository的扩展,也可以对全局的扩展,本博客考虑的是对全局的扩展。 对单个repository的扩展可以考虑看这...

huan的学习记录 992

MOS管关断时尖峰电压的5种实用抑制方案(附实测数据对比)

本文针对MOS管关断时产生的尖峰电压问题,提供了五种经过实验室实测验证的实用抑制方案。文章从尖峰电压的成因分析入手,详细阐述了优化PCB布局、设计RC缓冲电路、选用TVS二极管钳位、调节驱动电路以及使用磁珠吸收高频振荡等方法的原理、实施步骤与实测数据对比,为硬件工程师解决开关电源和电机驱动中的过压应力与EMI问题提供了系统性的实战指南。

1238

Spring Boot整理——Spring Data JPA

一、基本介绍         JPA诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,百度百科说是JDK为了实现ORM的天下归一,目前也是在按照这个方向发展,但是还没能完全实现。在ORM框架中,Hibernate是一支很大的部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整合的比较良好,我们可以认为JPA...

蜡笔小浪的博客 309

从赛题到实战:一份面向高职“区块链技术应用”赛项的食品溯源系统全栈部署与运维指南

本文为高职院校学生备战“区块链技术应用”技能大赛提供了一份详实的食品溯源系统全栈部署与运维指南。内容涵盖从理解赛题业务逻辑、绘制技术蓝图,到搭建4节点FISCO BCOS联盟链、部署管理平台与智能合约,再到核心运维技能与前后端联调测试的完整流程,旨在帮助参赛者将赛题转化为可运行的实战项目,全面提升区块链全栈开发与运维能力。

weixin_29172201的博客 669

PAM4信号测试实战:从眼图分析到误码率测量的技术演进

在高速数字系统设计中,信号完整性测试是确保数据传输可靠性的核心环节。其基本原理在于通过时域和频域分析,精确评估信号在传输过程中的质量衰减与失真。随着数据速率向56Gbps及以上演进,传统的NRZ编码面临带宽瓶颈,而PAM4调制技术通过在每个符号周期内承载更多比特信息,成为提升信道效率的关键路径。这项技术的工程价值在于,它允许在相同带宽下实现翻倍的数据吞吐量,这对于数据中心互联、PCIe 6.0及800G以太网等高速接口至关重要。然而,PAM4信号电平间距更小,对噪声和抖动极为敏感,导致其原始误码率显著升高,

weixin_42522817的博客 657

Spring Data JPA 实现自动化的JPA Repository

Spring Data JPA 可以终结样版式的愚蠢行为——仅仅因为要处理的领域类型不同,而要一遍遍写相同持久化的方法。 详细的代码,在github上。 Spring Data JPA 仅限于单个JPA查询。当需要做的事情无法通过Spring Data JPA来实现,可以使用传统的方式。 当Spring Data JPA 为Repository生成实现的时候,它还会查找名字与接口相...

hefrankeleyn的博客 3357

27、目标识别的最新进展

本文综述了目标识别(OID)领域的最新进展,重点介绍了质量评估、预处理和搜索空间缩减等关键技术。文章分析了多种质量指标,如缩减率、对完整性、召回率和精确率等,并探讨了它们的适用场景。同时,详细介绍了预处理中自动学习转换规则的方法,以及传统阻塞、排序邻域索引等搜索空间缩减技术。此外,文章还讨论了动态选择缩减技术的方法,并展望了未来研究方向,如更智能的预处理、自适应的缩减技术和与人工智能的结合。希望这些技术和方法能够为目标识别领域的研究和实践提供参考和帮助。

q5r6s7的博客 91

SpringDataJpa扩展

一.SpringDataJpa扩展 对SpringDataJpa的原来功能进行了相应的增加(代码是拷备) 1.BaseRepository 接口 @NoRepositoryBean:让SpringdataJpa不要自动为它生成子类 @NoRepositoryBean public interface BaseRepository<T, ID extends Serializable&...

蔡茂的博客 1179

Moviepy自动化剪辑视频中的广告

本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。

Mr数据杨 3411

VisionPro 机器视觉案例 之 彩色保险丝个数统计

CogColorSegmenterTool CogColorMatchTool

机器视觉李小白的博客 2352

springdatajpa扩展

factorybean 1.当目标对象没有公共无参构造器时,使用factorybean向spring注册,它主要是用于在集成一些框架的时候。框架中的核心类我们并没有提供公共无参的构造器。 2.在spring配置文件中配置factorybean,通过factorybean向spring注册new TestFactoryBean() 3.当使用 @autowired private TestFacto...

qq_40108680的博客 435

Buck电源设计常见的一些问题(五)MOS管振荡抑制方法(三)

关于开关节点振荡的产生机制和抑制问题,总结了三种抑制方法。第一种方法是利用输入端的高频去耦电容;第二种方法是设计 RC 缓冲电路;第三种方法是优化自举电路的串联电阻。以上三种方法均通过实验加以验证,对开关节点振荡具有很好的抑制作用。应该综合同步 Buck 变换器的各项指标权衡设计。

小幽余生不加糖 1633

推荐一款高效Spring Data JPA扩展:Spring Data JPA Entity Graph

在Java世界中,Spring Data JPA是开发数据库应用的强大工具,它简化了JPA(Java Persistence API)的使用,使得数据操作更加便捷。然而,对于复杂的查询和性能优化,我们往往需要更精细的控制。这就是项目发挥作用的地方。 ## 项目简介 `spring-data-jpa-entity-graph`是一个针对Spring Data JPA的扩展,它引入了Entity

gitblog_00099的博客 623

【DRAM存储器七】SDRAM介绍-芯片引脚与功能框图详解

详解初代SDRAM芯片引脚定义与芯片功能框图中的各个模块

highman110的博客 2205

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

随笔:Spring-data-jpa扩展查询 QueryDSL

Spring Data JPA 应用

Coder_fang的专栏 922

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

spring之spring data jpa(入门三) 扩展spring data jpa

在编写spring data jpa的dao时,只需在接口中按规约提供方法的声明即可.而有些业务实现无法通过声明方法或编写简单的SQL实现,这就需要扩展Spring Data JPA.  1.为某一个特定的Repositrory添加自定义方法.      注意:默认情况下,Spring Data 会在base-package中查找"接口名Impl"做为实现类,也可以通过 repositor...

H.Z 567

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Data JPA 全局DAO的扩展

转自http://blog.youkuaiyun.com/yyzhq/article/details/8006923 前几天看了springside4的mini-web代码发现确实有不少新的东东,咱这次单说说Spring Data JPA吧。 引用springside4的 wiki关于对Spring Data JPA的简介 Spring Data JPA在JPA上又做了一层封装,只要编写...

nonobabaya的博客 196

spring-data-jpa-extra: 弹性扩展您的Spring Data JPA体验

spring-data-jpa-extra: 弹性扩展您的Spring Data JPA体验 项目介绍 spring-data-jpa-extra 是一个开源项目,旨在增强Spring Data JPA的功能,特别是针对动态查询的需求。它引入了类似MyBatis模板(如FreeMarker或Velocity)的动态SQL查询能力,使得在Spring Data之上构建更灵活的数据库交互成为可能。对...

gitblog_00965的博客 1177

spring data jpa继承扩展实体类问题

扩展实体类时遇到的问题记录下 spring data jap 中不想修改原有实体类,选择继承原实体类,并添加了几个字段扩展功能 例:部分原实体类 @Entity public class PartyOrganizationPerson { @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) @Column( name = "id" ) private Long id

qq_42314022的博客 1054

AgileFramework系列组件——agile-jpa spring-data-jpa扩展

agile-jpa : spring-data-jpa扩展 源码地址:https://gitee.com/agile-framework/agile-jpa 它有什么作用 持久层工具合并 使用该组件后,全局仅需要注入唯一的Dao工具,无需再声明其他Dao/Repository,一个工具搞定所有Dao,极大简化持久层代码量。 原生动态sql解析支持 依靠agile-sql(动态sql解析器)实现jpa中对sql语法段的动态解析,弥补其在动态sql解析方面的短板。面对复杂查询语句将不再是难点。 内

萌教授的博客 232

spring data jpa 扩展实现编写SQL, 类似mybatis

spring-data-jpa-template主要解决的问题:动态的拼接SQL,类似mybaits, 通过freemarker 来实现的能够返回任何对象,List,Page....在spring data jpa之上扩展,不影响jpa原有功能How to use ?1. pom.xml中导入如下包:&lt;dependency&gt; &lt;groupId&gt;com.rabbit&...

samHuangLiang的博客 5514

Spring Boot学习笔记(三)——Spring-data-jpa扩展封装

上篇文章我们分享了下Spring-data-jpa的基本使用方法,但在实际使用中可能会有更复杂的用法,现在我们来看看他的更高级玩法,并做了完美的封装,使用起来更加智能简单。Spring-data-jpa为我们提供了JpaSpecificationExecutor接口,只要简单实现toPredicate方法就可以实现复杂的查询,下面就来看看具体如何使用。首先我们来看看JpaSpecification...

我叫周伯通 7960

spring-data-jpa通用dao的扩展

虽然使用spring data jpa给开发带来了极大的简化,但对于追求更小更快的我们来说,要为每个实体都写一遍数据访问接口却仍显得过于繁琐。如果可以构建一个baseDao,里面配置好了基本的增删改查接口,其他的实体类来继承它,这样就会使我们的开发得到进一步的简化。创建BaseRepository(baseDao)@NoRepositoryBean //表示该接口不会创建这个接口的实例 public

syf12354321的博客 5156

Spring-data-jpa扩展之JpaSpecificationExecutor

不属于Repository体系,实现一组 JPA Criteria 查询相关的方法 image.png Specification:封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象 Repository public interface CityRepository extends JpaRepository<City,In...

测试 623
上一篇: 性能调优之 Weblogic 调优
下一篇: Java11_JDK11新特性
HelloWorld_AA
博客等级 码龄9年 18粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值