69、Spring Data JPA 的 @Query查询 和 命名查询

news2024/11/13 18:06:44

@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/1013685.html

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

相关文章

面试题五:computed的使用

题记 大部分的工作中使用computed的频次很低的,所以今天拿出来一文对于computed进行详细的介绍,因为Vue的灵魂之一就是computed。 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护…

javascript检测网页缩放演示代码

一、为什么会提示浏览器显示比例不正常? 在网上冲浪,有时在打某个网站时,会提示你的浏览器显示比例不是100%,建议你将浏览器显示比例恢复为100%,以便获得最佳显示效果。 二、检测网页缩放比例的方法 那么这些网站是如…

【MATLAB第75期】#源码分享 | 基于MATLAB的不规则间隔数据插值实现时间序列数据扩充(更新中)

【MATLAB第75期】#源码分享 | 基于MATLAB的不规则间隔数据插值实现时间序列数据扩充 代码 %% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行%%…

《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组三对角矩阵

《数据结构、算法与应用C语言描述》使用C语言实现二维数组三对角矩阵 三对角矩阵定义 如下图所示: 代码实现 _10tridiagonalMatrix.h 模板类 /* Project name : allAlgorithmsTest Last modified Date: 2022年8月13日17点38分 Last Version: V1.0 Descr…

栈与队列经典题目——用队列实现栈

本篇文章讲解栈和队列这一部分知识点的经典题目:用栈实现队列、用队列实现栈。对应的题号分别为:Leetcode.225——用队列实现栈,。 在对两个题目进行解释之前,先回顾以下栈和队列的特点与不同: 栈是一种特殊的线性表…

Linux四种I/O模型

一.四种模型 阻塞式IO,非阻塞式IO,信号驱动IO,IO多路复用 二.阻塞式IO 特点:最简单,最常用,效率低 阻塞I/O 模式是最普遍使用的I/O 模式 系统默认状态,套接字建立后所处于的模式就是阻塞I/O 模式…

C语言 模拟计算器 版本更迭

简单版 ​ //模拟计算器: void menu() {printf("*****************************************\n");printf("************ 1.add 2.sub ***********\n");printf("************ 3.mul 4.div ***********\n");printf("**…

vscode 当中vue 全局自定义组件没有提示以及一些技巧

阅读技术文章可以查漏补缺,借鉴别人编码方式提高代码水平 阅读优秀项目 可以扩展业务处理能力 坚持每天阅读,每天学习新东西 积少成多,水到渠成 在写项目时候,我全局注册了组件,YhSwitch,但是在使用时候&am…

dart包的创建

浅讲dart包(Packages)的创建 创建 package 在 Dart 生态系统中使用 packages 实现共享软件,比如一些库和工具。本章将通过最常见的 Package 来介绍如何创建一个 Package。 若要为 package 创建一个初始化的目录和结构,使用 dart create 命令&#xff…

MySQL数据库技术笔记(2)

对于数据库表中列的增加的命令 : alter table 表名 add 列名 数据类型 [first|after 指定的列名 ] ; 例如 : 在 student 表中增加一列家庭地址,排列在手机号这一列的后面。 alter table student add address varchar(100) after phone; 调整数据库表中列的顺序…

王道数据结构C语言循环链表基本操作实现

文章目录 一、循环单链表1.1初始化及判空操作1.2判断是否是尾结点 二、循环双链表2.1初始化2.2判空2.3判断尾结点2.4循环双链表的删除 一、循环单链表 1.1初始化及判空操作 其实循环链表就是在单链表(双链表)上做一点小小的优化 它是把尾结点的next指…

广西建筑模板施工中的常见问题及解决方法

广西建筑模板施工中的常见问题及解决方法在广西建筑模板的施工过程中,可能会出现一些常见的质量问题。以下是常见问题及其解决方法,以帮助您更好地处理这些问题。 1. 透胶问题:透胶是指模板中出现胶水渗透的现象。可能的原因包括单板质量差、…

设备树的理解与运用

设备树: 本质是一个文件,包含很多节点,每个节点里边是对设备属性的描述(包括GPIO,时钟,中断等等),其中节点(node)和属性(property)就是设备树最重…

mysql数据库数据如何迁移目录

目录 1.关闭正在运行mysql2.找到本机my.ini 文件3.观察目录结构4.复制注意是复制Data文件夹到目的地5.找到my.ini初始位置修改数据路径并保存6.启动mysql7.关注my.ini 常用配置 1.关闭正在运行mysql 2.找到本机my.ini 文件 默认位置 C:\ProgramData\MySQL\MySQL Server 8.0 …

如果你是独立开发者,你是先写前端还是先写后端?

当我们站在独立开发的路口时,一个重要的抉择就摆在了我们面前:是先着手前端开发还是后端开发?这看似简单的问题,却蕴含着许多深刻的考虑和决策。无论你是准备构建一个复杂的分布式系统还是一个引人入胜的用户界面,接下…

LeetCode每日一题:1462. 课程表 IV(2023.9.12 C++)

目录 1462. 课程表 IV 题目描述: 实现代码与解析: 拓扑排序 原理思路: 1462. 课程表 IV 题目描述: 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff…

分布式文件系统对比与选型参考

目录 一、分布式文件系统 1、 数据的存储方式: 2、 数据的读取速率 3、 数据的安全机制 二、主流分布式文件系统介绍 1. GFS(Google File System) 2. HDFS(Hadoop Distributed File System) 3. Ceph …

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求,需要返回字段为file_id,file_url,并且放入实体类中,实体…

对话大模型中的情感支持及商业化落地

在1982年经典科幻电影《银翼杀手》中,仿生人瑞秋因为被植入记忆而以为自己是真人,当被告知自己是仿生人时,她拒绝相信,流下了眼泪。如今,随着AI领域对话大模型技术的发展,“比人更像真人”的人工智能正从梦…

vue实现左右伸缩(el-drawer自定义位置展开收缩)

内容左右收缩展开 实现需求实现效果自定义抽屉(el-drawer)展开位置实现原理 js方法,点击的时候抽屉伸缩展开,并且给左侧右侧内容对应的宽度第二种方法 实现需求 页面内容是左右布局,需求想让左侧内容可收缩,然后展示完全右侧内容。…