69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询)

news2025/1/6 19:46:39

1、方法名关键字查询(全自动,既不需要提供sql语句,也不需要提供方法体)
2、@Query查询(半自动:提供 SQL 或 JPQL 查询)
3、自定义查询(全手动)

@Query查询 和 命名查询的区别:
命名查询与直接用@Query来定义查询的本质是一样,只不过它们定义SQL或JPQL语句的位置不同。
直接用 @Query来定义查询 ,写SQL或JPQL语句的位置在 DAO 组件
命名查询,写SQL或JPQL语句的位置在 实体类 上面

★ @Query查询(半自动:提供SQL或JPQL)

让开发者指定JPQL或SQL查询,剩下的事情由Spring Data来负责完成:帮你生成查询方法、实现查询功能。

▲ @Query注解

通过使用@Query注解修饰查询方法,可以让查询方法使用自定义的JPQL或SQL执行查询,
该注解可以指定如下常用属性:

- name:指定使用哪个命名查询。
        命名查询的本质就是为JPQL或SQL语句起个名字,
        因此指定使用哪个命名查询也就是指定了JPQL或SQL语句。

- nativeQuery:指定是否为SQL查询,如果该属性为true,表明是原生SQL查询,否则就是JPQL查询。

- value:指定自定义的JPQL或SQL语句。

@Query(nativeQuery = true , value=" ") 这个指定为 SQL 语句查询,也叫命名查询,也就是指定使用 SQL 命名查询

代码演示:

jpa 的 @Query 的 JPQL 不能用 select * from  ,就是不能用 * ,但可以用表的别名代替:
比如:select * from table  ------->  select t from Table t

需求:根据学生的姓名和教室的名字查询学生,使用 @Query 指定 JPQL 语句查询
( JPQL 是 @Query 默认原生方法)
在这里插入图片描述
测试结果:
在这里插入图片描述

需求:根据班级名称name模糊查询Clazz对象
使用 @Query 指定 SQL 语句,nativeQuery = true 说明是使用 SQL 查询
在这里插入图片描述

测试结果:
在这里插入图片描述

▲ Modifying注解

如果@Query注解指定的查询语句要对底层数据进行修改,还需要使用@Modifying注解修饰该方法,

该注解修饰的方法可以修改底层的数据。


【提示:】 Spring Boot有一个很优秀的设计,当你在测试DAO组件的方法时,
          测试完成后方法的测试结果会自动回滚。

如果你确实想在测试DAO组件时,测试结束后提交事务,而不是回滚事务(默认设置)。
—— 只要将测试方法添加@Rollback(false)

代码演示

需求:修改指定年龄的指定name值,把年龄大于500的学生的name改成"张三"
如果使用 JPQL语句 或 SQL语句 要修改数据库数据,该方法需要添加 @Modifying 注解

在这里插入图片描述
测试结果:
在这里插入图片描述

如果想在测试DAO组件时,测试结束后提交事务,而不是回滚事务(默认设置)。
—— 只要在测试方法上添加@Rollback(false)

在这里插入图片描述

★ 命名查询

@Query(nativeQuery = true , value=" ") 这个指定为 SQL 语句查询,也叫命名查询,也就是指定使用 SQL 命名查询

甚至不再需要使用@Query注解
——只要让@NamedQuery或@NamedNativeQuery所定义的命名查询的查询名等于实体类的类名+DAO组件的查询方法的方法名
    中间以点号(.)隔开。
    
@NamedQuery或@NamedNativeQuery一般用在实体类上定义查询语句。

不难发现,命名查询与直接用@Query来定义查询的本质是一样,
只不过它们定义SQL或JPQL语句的位置不同。

直接用 @Query来定义查询 ,写SQL或JPQL语句的位置在 DAO 组件
命名查询,写SQL或JPQL语句的位置在 实体类 上面

在这里插入图片描述

代码演示

演示不用 @Query 的命名查询
在DAO组件写上查询方法,然后再实体类上通过注解,再写对应的sql语句

@NamedQuery或@NamedNativeQuery一般用在 实体类上定义查询语句。
在这里插入图片描述

@NamedQuery 或 @NamedNativeQuery 所定义的 命名查询 的 查询名 等于
实体类的类名+DAO组件的查询方法的方法名,中间以点号(.)隔开

在这里插入图片描述

测试结果:
结果一致,没啥问题,都是查相同的数据,只是一个用 JPQL 原生的查询方法,一个是SQL查询方法
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么样的护眼灯适合学生用?盘点性价比高的护眼台灯

现在我们很多家长对自己孩子的视力十分关心,生怕自己的孩子是近视、远视、弱视等等。对于父母而言,在孩子读书压力大课业重的关键时期,为孩子选择合适的桌椅,保护灯具从而保护孩子的眼睛是非常重要的事情!那么买给孩子读书做功课的…

AI创作免费软件,免费AI写作工具

AI创作免费软件。在这个数字时代,AI技术已经渗透到我们生活的方方面面,其中之一就是创作领域。许多人可能会想知道,这些AI创作工具是否真的可以提高我们的创作效率? 147GPT批量文章生成工具​www.147seo.com/post/2801.html​编辑…

机器学习第八课--决策树

举个例子,“明天如果下雨我就不出门了。” 在这里我们用了一个决策条件:是否下雨,然后基于这个条件会有不同的结果:出门和不出门。 这就是一个经典的决策树! 决策树的核心组成部分---节点 边 最后的结论就是第一个决策树要优于第二个决策树&#xff0c…

nvm 版本管理详解

掌握 Node Version Manager (nvm):优化 Node.js 版本管理 Node.js 是一种强大的服务器端 JavaScript 运行环境,它经常需要根据项目的要求使用不同的 Node.js 版本。为了更轻松地管理不同版本的 Node.js,Node Version Manager(nvm&…

这些PLC项目调试常见错误类型,你都了解吗?

各种品牌PLC都具有自我诊断功能,但PLC修理的技巧在于,充分运用该功能进行分析,然后精确寻找问题所在。整理了当PLC呈现反常报警时,PLC修理人员需要了解的8种常见错误类型。 CPU反常 CPU反常报警时,应查看CPU单元衔接于…

计算机视觉与深度学习-经典网络解析-AlexNet-[北邮鲁鹏]

这里写目录标题 AlexNet参考文章AlexNet模型结构AlexNet共8层:AlexNet运作流程 简单代码实现重要说明重要技巧主要贡献 AlexNet AlexNet 是一种卷积神经网络(Convolutional Neural Network,CNN)的架构。它是由Alex Krizhevsky、Il…

工作应当有挑战

有挑战 才能有所成长 正所谓人到山前必有路 是挑战 一般就会有未知 未知往往伴随着困难 有困难 并不可怕,也不必自我抱怨,自我抱怨只会陷入无尽的精神内耗 我们只要做好自己 困难就会迎刃而解 如果自己的获得 没有达到自己的期望 其实那也不必气馁 再…

【深度学习】实验12 使用PyTorch训练模型

文章目录 使用PyTorch训练模型1. 线性回归类2. 创建数据集3. 训练模型4. 测试模型 附:系列文章 使用PyTorch训练模型 PyTorch是一个基于Python的科学计算库,它是一个开源的机器学习框架,由Facebook公司于2016年开源。它提供了构建动态计算图…

【Spatial-Temporal Action Localization(七)】论文阅读2022年

文章目录 1. TubeR: Tubelet Transformer for Video Action Detection摘要和结论引言:针对痛点和贡献模型框架TubeR Encoder:TubeR Decoder:Task-Specific Heads: 2. Holistic Interaction Transformer Network for Action Detect…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年5月scratch编程等级考试三级真题 判断题(共10题,每题2分,共20分) 26、运行下列程序后,变量c的值是6 答案:错 考点分析:考查积木综合使用,重点考查变量积木的使用 最后一步c设为a+b,所以c=1+2=3,答案错误 27、变量a与变量b的初始值都是1,a+b等于2。运行下列…

【2023华为杯B题】DFT类矩阵的整数分解逼近(思路及代码下载)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ETHERNET IP站转CCLKIE协议网关

产品介绍 JM-EIP-CCLKIE是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是实现 CCLINK IEFB 总线和 ETHERNET/IP 网络的数据互通。 本网关连接到 ETHERNET/IP 总线中做为从站使用,连接到 CCLINK IEFB 总线中做为从站使用。 产品参数 技术参数 …

A : DS顺序表--类实现

Description 实现顺序表的用C语言和类实现顺序表 属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为1000&#xff09; 操作包括&#xff1a;创建、插入、删除、查找 类定义参考 #include<iostream> using namespace std; #define ok 0 #define error…

Unity实现角色受到攻击后屏幕抖动的效果

文章目录 实现效果摄像机抖动脚本 玩家受伤其他文章 实现效果 首先看一下实现效果。 摄像机 我们要使用屏幕抖动&#xff0c;使用的是CinemachineVirtualCamera这个组件&#xff0c;这个组件需要在包管理器中进行导入。 导入这个组件之后&#xff0c;创建一个Chinemachine-…

学习记忆——宫殿篇——记忆宫殿——记忆桩——单间+客厅+厨房+厕所+书房+院子

文章目录 单间客厅厨房厕所书房院子 单间 水壶 水龙头 香皂 果汁机 电视 门空间 花 红酒 葡萄 不锈钢 白毛沙发 彩色垫子 吉他 皮椅 挂画 风扇 糖抱枕 盒子 花土 水晶腿 衣柜 笔 三环相框 水壶 壁挂 台灯 被 网球拍 足球 抽屉 闹钟 蝴蝶 心 斑马 三轮车 音响 椅子 碗 玩偶 烟灰…

Android 12 源码分析 —— 应用层 六(StatusBar的UI创建和初始化)

Android 12 源码分析 —— 应用层 六&#xff08;StatusBar的UI创建和初始化) 在前面的文章中,我们分别介绍了Layout整体布局,以及StatusBar类的初始化.前者介绍了整体上面的布局,后者介绍了三大窗口的创建的入口处,以及需要做的准备工作.现在我们分别来细化三大窗口的UI创建和…

苹果手机怎么录屏?1分钟轻松搞定

虽然一直使用苹果手机&#xff0c;但是对它的录屏功能还不是很会使用。苹果手机怎么录屏&#xff1f;录屏可以录制声音吗&#xff1f;麻烦大家教教我&#xff01; 苹果手机为用户提供了十分便捷的内置录屏功能&#xff0c;可以让您随时随地录制手机上的内容。但是很多小伙伴在第…

六角形锌饼的尺寸及其允许偏差

声明 本文是学习GB-T 3610-2010 电池锌饼. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了电池锌饼的产品分类、要求、试验方法、检验规则及标志、包装、运输、贮存、质量证明 书和合同(或订货单)等内容。 本标准适用于制造锌-…

如何把.mhd和.raw文件转换为DICOM文件

之前拿到体渲染的人头数据Manix&#xff0c;格式为mhd和raw格式的需要转换为DICOM ResearchGate上的一个帖子帮了大忙&#xff08;链接如下&#xff09;&#xff0c;有人说用ImageJ&#xff0c;有的说用XMedCon。我试了半天也没用ImageJ弄成功&#xff0c;但是XMedCon一下就好…

【有关mysql的实操记录】

一. 导入导出数据 1. 导出mysql的数据库作为备份文件 mysqldump -u 用户名 -p 数据库名 >导出文件路径.sql 回车之后&#xff0c;提示输入密码. 2. 导入mysql之前备份的数据库文件 mysql -u 用户名 -p 数据库名 <导入文件路径.sql 回车之后&#xff0c;提示输入密码 …