spring data jpa 自定义接口实现

2023-11-06

没错,spring data jpa很优秀,但有一些东西,我们就想自己来,我除了想用你的,还想用我自己的

首先,我要spring data jpa的接口,为什么,因为很方便啊

public interface TaskDao extends JpaRepository<Task,Long>{

}

然后我想自己定义一些接口,咋办呢,那我就再定义个接口bean吧,然后再定义一些接口方法

public interface TaskDaoCustom<T,ID>{

    void method();
}

那这里,我想要spring data jpa的,也想要我自己的,那我就继承吧

public interface TaskDao extends JpaRepository<Task,Long>,TaskDaoCustom<Task,Long>{

}

这时候,你在service应该就可以用method()方法了,但是这时候,method是空的,我们得自己来实现它,那实现吧

public class TaskDaoImpl implements TaskDaoCustom{

    @Override
    public void method() {
        // TODO Auto-generated method stub
        System.out.println("who are you !!");
    }

}

有心的朋友应该有注意到,为什么我实现TaskDaoCustom的bean不应该是TaskDaoCustomImpl吗?如果你这样子做的话,编译器就报错了

 No property method found for type Task!

那为什么呢,因为任何继承了Repository(JpaRepository最终也是继承于Repository)spring都会为他生成一个实现类,因为TaskDao 继承于TaskDaoCustom,而TaskDaoCustom中的method不是spring data jpa规范查询方法的规则,如果就报找不到找不到属性了。

或许你会问,TaskDaoCustom不会有TaskDaoCustomImpl的实现类吗,按照spring文档说的,只要配置好实现的后缀名,就会用他来实现方法么,是的,我们是这样子配置后缀的,确实也有Impl。

    <jpa:repositories base-package="com.liuxg.**.dao"
        repository-impl-postfix="Impl" 
        query-lookup-strategy = "create-if-not-found"
        entity-manager-factory-ref="entityManagerFactory"
        transaction-manager-ref="transactionManager" >
    </jpa:repositories>

这里要纠正一下,这里的实现spring data jpa规定命名方法是继承于spring data jpa Repository的那个命名 + Impl,例如我们是TaskDao继承于JpaRepository,如果实现类应该是TaskDaoImpl,而不是TaskDaoCustomImpl。

spring data jpa 秉承约定大于实现,只要按照规定和约定来,就能省很多麻烦事。

到这里,你应该就能自己自定义接口了,但这个对于模块是起到了作用,如果我在搭建项目,我想直接,定义 一个BaseDao,然后自定义一些常用的公共方法,然后再利用spring data jpa的优点,只要子模块,继承于BaseDao,就能同时拥有自定义的公用方法和spring data jpa的优点,该怎么做??下一篇再看看??

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring data jpa 自定义接口实现 的相关文章

随机推荐

  • 记一次jvm项目调优

    问题描述 运维一直说 fy core 项目这个项目每天都会发生多次full gc full gc 会停顿600ms左右 理论上生产环境不允许发生full gc 所以决定把full gc都优化掉 以下是该grafana对应的资源表现 可以看出
  • react生命周期componentDidMount中设置setState在esIint报错

    react生命周期componentDidMount中设置setState在esIint报错 项目背景 由于需要在页面渲染出来的时 对state中的数据进行初始化并需要出发render重绘 componentDidMount let sel
  • 5G“邂逅”云计算,运营商云网融合大势所趋

    近几年 国内运营商纷纷发力布局云计算市场 力求在云领域打造出自己的地盘 近期 中国电信天翼云与中科曙光战略合作 双方将共同探索在 5G 云 领域的建设 去年8月中国移动在苏州成立中国移动云能力中心 中国联动也于去年年底发布沃云云计算战略 而
  • navicat使用触发器在插入记录修改某个字段的值

    最近项目遇到了一个问题 查用户的某些字段有NULL会报错 所以想在注册的时候用的触发器提前设置一个默认值 避免空指针 先在本地建一个测试表t 1 就给三个基本字段 然后右击表选择设计表找到 触发器 开始编辑 现在的写法是正确的 我之前是这样
  • B站马士兵python入门基础版详细笔记(4)

    前言 这篇文章是B站学习python入门基础班的视频的第四章内容 主要讲述的是if else语句 但是不包括循环结构 循环结构在下一章笔记中有记叙 一 顺序结构 什么是顺序结构呢 比如说 把大象装冰箱需要分几步 print 程序开始 pri
  • 数模比赛提分tips

    1 对于模型的建立和求解 这一部分是文章的重点 要特别突出你的创造性的工作 在这部分写作需要注意的事项有 一定要有分析 而且分析应在所建立模型的前面 一定要有明确的模型 不要让别人在你的文章中去找你的模型 关系式一定要明确 思路要清晰 易读
  • 指针进阶(三)

    指针进阶 三 指针习题组 01 int main int a 5 1 2 3 4 5 int ptr int a 1 printf d d a 1 ptr 1 return 0 运行结果 原因 这里a是数组名 存放的是数组的首地址 a是整个
  • pip install tensorflow报错ERROR: Could not find a version that satisfies the requirement tensorflow (f

    这里写目录标题 报错内容 解决方法 其他方法 原因分析 报错内容 pip3 install tensorflow 输入上述命令安装tensorflow后出现下面的报错 ERROR Could not find a version that
  • chrome浏览器被hao123劫持如何解决?

    那天上班 打开电脑点开chrome浏览器 首页出现的是我熟悉的谷歌搜索页面 可是很快右边又打开了一个页面 123 hao234 com 这个流氓网站就这个这么不请自来了 而且之后我用尽了网上各种办法都弄不走 各种无效方法 1 绑定自己的主页
  • 背包九讲--混合背包、分组背包、资源分配背包、背包方案总数

    混合背包 混合背包 问题描述 一个旅行者有一个最多能用V公斤的背包 现在有n件物品 它们的重量分别是W1 W2 Wn 它们的价值分别为C1 C2 Cn 有的物品只可以取一次 01背包 有的物品可以取无限次 完全背包 有的物品可以取的次数有一
  • hive基础(二) hive操作大全

    目录 注 只是为了以后忘了 好翻 做个总结 一 hive 操作 1 hive e 2 hive f 3 查看在hive中输入的所有历史命令 4 hive运行日志修改 二 hive参数配置 三 hive数据类型 基本数据类型 集合数据类型 1
  • PHP与MySQL程序设计 学习笔记 第八章 错误和异常处理

    error reporting函数确定报告的敏感级别 共有16个不同级别 这些级别的任何组合都是有效的 error reporting函数使用 字符表示逻辑操作符NOT error reporting E ALL E STRICT 希望报告
  • python两列表对应元素求和

    一种方法是循环 但是有简便方法 用numpy import numpy as np list1 1 2 3 4 list2 1 2 3 4 a array np array list1 b array np array list2 c ar
  • matlab安装好 启动总是闪退_win10系统启动matlab出现闪退的处理技巧

    电脑操作系统在使用的时候经常会被一些问题所困扰 例如很多用户都遇见过win10系统启动matlab出现闪退的问题 大部分用户如果第一次碰到win10系统启动matlab出现闪退的现象 因此大伙都会不知所措 怎么才可以完善的治理win10系统
  • 设计模式之状态模式(思想)

    设置模式之状态模式 上图学过网络的同学应该都比较清楚吧 这是一张TCP状态转换图 只要理解上图 那么对状态模式也就很容易理解啦 状态模式的意图 允许一个对象在其内部状态改变时改变它的行为 简单的说就是 一个人他的外表没有改变 但是他内在的心
  • batch-命令的学习

    batch命令的扩充变量语法 所谓扩充变量语法 是指对已有参数 环境变量或其他变量的引用 的再处理 扩展 对比与java语言 可以理解为 对传入参数的格式化 扩充变量只能针对于传入变量的自身属性 自身的引用 值 变量代表的文件位置信息 进行
  • 深入理解Flutter的GestureDetector组件

    引言 上一篇文章 深入理解Flutter的Listener组件 介绍了触控事件的监听原理 让我们对Flutter中触摸事件的传递过程有了进一步的认识 今天我们学习一下手势识别组件GestureDetector的原理 GestureDetec
  • 苏州大学邮箱注册JetBrain, 永远使用专业版

    今天发现 使用教育邮箱 可以免费使用JetBrain的专业版 作为苏大的学生 尤其是计算机学院的不要错过哦 注意 只是针对苏州大学的学生 毕业之后可以开通校友邮箱 相当于以后可以一直使用专业版 每年激活一次 1 开通邮箱 a 登陆网址 ht
  • PAT打卡--L1-016查验身份证(c++)

    原题链接 这道题其实也是一道简单题 我主要还是用其来学习C 通过这道题 了解到了c 中的字符和int之间的转换 首先贴上代码吧 include
  • spring data jpa 自定义接口实现

    没错 spring data jpa很优秀 但有一些东西 我们就想自己来 我除了想用你的 还想用我自己的 首先 我要spring data jpa的接口 为什么 因为很方便啊 public interface TaskDao extends