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

这篇具有很好参考价值的文章主要介绍了69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 默认原生方法)
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA
测试结果:
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA

需求:根据班级名称name模糊查询Clazz对象
使用 @Query 指定 SQL 语句,nativeQuery = true 说明是使用 SQL 查询
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA

测试结果:
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA

▲ Modifying注解

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

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


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

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

代码演示

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

69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA
测试结果:
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA

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

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

★ 命名查询

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

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

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

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

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

代码演示

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

@NamedQuery或@NamedNativeQuery一般用在 实体类上定义查询语句。
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA

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

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

测试结果:
结果一致,没啥问题,都是查相同的数据,只是一个用 JPQL 原生的查询方法,一个是SQL查询方法
69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询),Spring Boot,sql,Spring Data JPA文章来源地址https://www.toymoban.com/news/detail-732839.html

到了这里,关于69、Spring Data JPA 的 @Query查询 和 命名查询(半自动:提供 SQL 或 JPQL 查询)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于vcs+uvm+xilinx ip的仿真平台的半自动化搭建

    系 统:ubuntu 18.04 仿真平台:vcs_2018.09-SP2 开发平台:vivado 2019.2 本文的主要目的是自动化搭建基于vcs+uvm+xilinx ip的仿真平台,节省平台搭建的时间与精力。 拿到一个项目,一般的平台搭建的步骤:去网上找一个makefile脚本(或者使用原项目脚本),修改相应的软件路径,添加

    2024年01月18日
    浏览(47)
  • (Windows)半自动化标注-Label-Studio的安装和简单使用

    Label Studio 是一款优秀的标注软件,覆盖图像分类、目标检测、分割等领域数据集标注的功能。 SAM (Segment Anything) 是 Meta AI 推出的分割一切的模型。 报错的py文件里内容改为 import ruamel_yaml as yaml

    2024年02月15日
    浏览(45)
  • 【自我提升】Spring Data JPA之Specification动态查询详解

    写在前面:刷完Spring Data JPA的课后,发现Specification动态查询还挺有意思的,还应用到了规约设计模式,在此记录下学习过程和见解。 目录 一、应用场景 二、源码解析 三、规约模式 四、实际应用 1. 简介         有时我们在查询某个实体的时候,给定的条件是不固定的,

    2024年02月07日
    浏览(50)
  • 解决Spring Data JPA查询存在缓存问题及解决方案

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(43)
  • Spring Data JPA之自动创建数据库表

    由于在项目中使用到了Spring Data JPA(Java Persistent API)进行项目开发,并且自己对JPA比较感兴趣想进行学习和了解。首先学习和了解的是JPA自动创建数据库表,通过JPA能够让软件工程师们不用再去手动创建数据表,能够减轻软件工程师们的工作量。 通过本篇博客可以实现使用

    2024年02月05日
    浏览(55)
  • Spring Data JPA 快速上手

    JPA的全称是Java Persisitence API,即JAVA持久化API,是sum公司退出的一套基于ORM的规范,内部是由一些列的接口和抽象类构成。JPA通过JDK5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Spring Data的优势:可以操作多种数据库,关系型数据库,非关系

    2024年04月23日
    浏览(42)
  • Spring Data JPA 学习笔记

    Spring Data JPA: Spring Data JPA 的技术特点: @Entity 标注是一个实体类,实体类中的每一个属性都对应表中的一列。 @Table(name = “User”) 这个注解用于指定实体类对应的数据库表名。(但首字母会小写) @Data:这个注解是Lombok库提供的,用于自动生成实体类的getter和setter方法、构造函

    2024年04月09日
    浏览(53)
  • Spring data JPA常用命令

    Spring Data JPA是Spring框架的一部分,它提供了一个简化的方式来与关系型数据库进行交互。JPA代表Java持久化API,它是Java EE规范中定义的一种对象关系映射(ORM)标准。Spring Data JPA在JPA的基础上提供了更高级的抽象,使得开发人员能够更轻松地进行数据库操作。 使用Spring Data

    2024年02月15日
    浏览(55)
  • Spring Boot整合Spring Data Jpa + QueryDSL

    Spring Data JPA是一个Spring项目中常用的持久化框架,它简化了与数据库进行交互的过程。而QueryDSL是一个查询构建框架,可以让我们以面向对象的方式来编写数据库查询。 在本文中,我们将讨论如何使用Spring Boot整合Spring Data JPA和QueryDSL,并提供一个使用案例来演示它们的用法。

    2024年02月09日
    浏览(64)
  • Spring Data JPA的@Entity注解

     rulesCouponTypeConverter.java  entity/CouponTemplate.java Spring JPA 包的标准注解,对数据库字段进行了映射,我挑几个关键注解说道一下。 1、Entity:声明了“数据库实体”对象,它是数据库 Table 在程序中的映射对象; 2、Table:指定了 CouponTemplate 对应的数据库表的名称; 3、ID/Generat

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包