1、使用JPQL语句进行查询

JPQL语言(Java Persistence Query Language)是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL语言,从而屏蔽不同数据库的差异。

JPQL语言通过Query接口封装执行,Query 接口封装了执行数据库查询的相关方法。调用 EntityManager 的 Query、NamedQuery 及 NativeQuery 方法可以获得查询对象,进而可调用Query接口的相关方法来执行查询操作。

JPQL是面向对象进行查询的语言,可以通过自定义的JPQL完成UPDATE和DELETE操作。JPQL不支持使用INSERT。对于UPDATE或DELETE操作,必须使用注解 @Modifying 进行修饰。

【示例】使用JPQL语言进行查询。

package com.pjb.jpauserdemo.dao;import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;import java.util.List;/*** 用户信息数据库访问接口* 使用JPQL语言* @author pan_junbiao**/
@Repository
public interface UserJpqlDao extends JpaRepository<UserInfo,Integer>
{/*** 根据用户姓名,查询用户信息*/@Query("SELECT u FROM UserInfo u WHERE u.userName = ?1")public UserInfo getUserInfoByName(String name);/*** 根据用户姓名,模糊查询用户列表*/@Query("SELECT u FROM UserInfo u WHERE u.userName like %:name%")public List<UserInfo> getUserListByName(String name);/*** 修改用户姓名*/@Modifying@Query("UPDATE UserInfo u SET u.userName = :name WHERE u.userId = :id")public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}

2、使用原生SQL语句进行查询

在使用原生SQL查询时,也使用@Query注解。此时,nativeQuery参数需要设置为true。

【示例】使用原生SQL语句进行查询。

package com.pjb.jpauserdemo.dao;import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;import java.util.List;/*** 用户信息数据库访问接口测试类* 使用原生SQL语言* @author pan_junbiao**/
@Repository
public interface UserSqlDao extends JpaRepository<UserInfo,Integer>
{/*** 根据用户ID,获取用户信息*/@Query(value = "SELECT * FROM tb_user WHERE user_id = :id",nativeQuery = true)public UserInfo getUserById(@Param("id")int userId);/*** 根据用户姓名,模糊查询用户列表*/@Query(value = "SELECT * FROM tb_user WHERE user_name LIKE %:userName%",nativeQuery = true)public List<UserInfo> getUserListByName(@Param("userName")String userName);/*** 修改用户姓名*/@Modifying@Query(value = "UPDATE tb_user SET user_name = :name WHERE user_id = :id",nativeQuery = true)public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}

可以看到,@Query与@Modifying这两个注解一起声明,可以定义个性化更新操作。

Spring Data JPA使用JPQL与原生SQL进行查询相关推荐

  1. Spring Data JPA使用必备(二):Spring Data JPA方法命名规则实现SQL自动生成

    Spring data JPA是一个好东西,但是对于很多习惯于写SQL,直接怼数据库的人来说,这个真的用不习惯,还被一致认为是一个不易于程序员发展的技术.因为JPA提供了标准的封装,在操作数据库的时候 ...

  2. Spring Data JPA Specification(规范)实现复杂查询

    目录 持久化 API 接口概述 JpaSpecificationExecutor 常用 API JPA Specification 编码示例 持久化 API 接口概述 1.JPA 持久化 API 接口 ...

  3. Spring Data JPA 从入门到精通~方法的查询策略的属性表达式

    方法的查询策略的属性表达式(Property Expressions) 属性表达式只能引用托管(泛化)实体的直接属性,如前一个示例所示.在查询创建时,已经确保解析的属性是托管实体的属性,但是,还可以通 ...

  4. spring data jpa框架学习之十 注解式查询方法详解(转载网上电子书,我注解)

    @Query注解接口的定义  @Query注解的作用就是指定其下面定义的方法及传参是针对@Query后面指定的SQL语句所对应使用的(方法与SQL对照匹配的传参,使得对应的SQL得以执行) ----- ...

  5. Spring Data JPA 从入门到精通~方法的查询策略设置

    方法的查询策略设置 通过下面的命令来配置方法的查询策略: @EnableJpaRepositories(queryLookupStrategy= QueryLookupStrategy.Key.CRE ...

  6. Spring Data JPA 从入门到精通~@Modifying修改查询

    学习思路一样,我们先看源码: public @interface Modifying { //如果配置了一级缓存,这个时候用clearAutomatically=true,就会刷新hibernate的 ...

  7. Spring Data JPA 写SQL语句也可以如此简单

    在使用 Spring Data JPA 的时候,通常我们只需要继承 JpaRepository 就能获得大部分常用的增删改查的方法.有时候我们需要自定义一些查询方法,可以写自定义 HQL 语句 像这样 ...

  8. ORM框架之Spring Data JPA(二)spring data jpa方式的基础增删改查

    上一篇主要在介绍hibernate实现jpa规范,如何实现数据增删改查,这一篇将会着重spring data jpa 一.Spring Data JPA 1.1 Spring Data JPA介绍: ...

  9. Spring Data JPA问题汇总

    刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...

最新文章

  1. linux history 看更多历史记录_Linux历史记录history常用技巧
  2. Knative 化繁为简之道:应用部署与访问
  3. 第八十四节,css布局小技巧及font-awesome图标使用
  4. java内存泄露 垃圾回收_Java面试中底层垃圾回收、代码安全、内存泄露
  5. linux下内存调试工具——valgrind
  6. IBM Systems Director VMControl资源生命周期管理,第2部分
  7. CAN FD的波特率到底能跑多快?
  8. 多源信息融合技术研究综述
  9. 参考文献标引方式_论文参考文献标注格式
  10. 计算机视觉轮廓检测,轮廓检测
  11. java-获取上个月的第一天和最后一天
  12. 线段树合并学习笔记(P4556)
  13. 五线谱音名和组别对照表_五线谱最全知识及符号!
  14. Python爬虫:无账号无限制获取企查查信息
  15. mysql免安装版,遇到msvcr120dll文件丢失错误的解决方案
  16. MATLAB 写入数据为科学计数法形式/ e03/ 形式
  17. 树莓派实验室python人脸识别_使用树莓派进行简易人脸识别
  18. 2022新旅游消费趋势报告出炉,8K慢直播或成后疫情时代下文旅发展的一大卖点
  19. git基础配置/SSH
  20. 使用python生成随机中奖姓名和电话号码并存入excel

热门文章

  1. C语言函数指针调用函数
  2. java中如何进行强制转换?
  3. HTML5 drag和drop的亲手实践
  4. 进程和线程的主要区别及进程与程序的主要区别
  5. ORACLE 角色授权
  6. 如何判断两个日期在一周内
  7. 前沿人物(零)——伯特霍尔德霍恩
  8. bigdecimal转换为long_BigDecimal与Long、int之间的相互转换
  9. java 中long型数据的对比
  10. V-token的技术革新,引领数字化支付热潮