JPA的@Query用法

2023-05-16

文章目录

  • @Query作用
  • 使用例子
    • 简单使用
    • like表达式
    • 原生sql
  • 传参方式
  • SPEL表达式
  • nativeQuery 作用
  • 更新操作
  • 删除操作
  • @query返回自定义字段
  • @query返回自定义对象

@Query作用

@Query标记在继承了Repository的自定义接口方法上,就不需要遵循查询方法命名规则

public @interface Query {

	/** 定义被执行的sql或者hql */
	String value() default "";

	/** 分页时用于查询中数量的sql或者hql */
	String countQuery() default "";

	/** 用原生的分页 */
	String countProjection() default "";

	/** 使用原生sql,为false时使用hql */
	boolean nativeQuery() default false;

	/** 定义该查询的名字 */
	String name() default "";

	/** 数量查询返回的别名 */
	String countName() default "";
}

使用例子

@Entity
@Table(name = "T_DEPT")
@Data
public class Dept implements Serializable {
    @Id
    private Integer id;
    private String name;
    private Integer upId;
}
@Entity
@Table(name = "T_USER")
@Data
public class User implements Serializable {
    @Id
    private Integer id;
    private String name;
    private Integer deptId;
}

简单使用

占位符?序号对应传入参数,从1开始

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    @Query("select u.id, u.name from User u where u.id=?1")
    List<User> getUserById(Integer id);
}

like表达式

命名参数

@Query("select u.id, u.name from User u where u.name like %:name%")
List<User> getUserByName(@Param("name") String name);

原生sql

只能用占位符?

@Query(value="select u.id, u.name from t_user u where u.id=?1", nativeQuery = true)
List<User> getUserById(Integer id);

传参方式

  1. 占位符,序号对应参数声明顺序,从1开始
  2. 命名参数,@Param中声明传入参数名称

SPEL表达式

使用@Entity注解后,#{#entityName}会取@Entity()的值,默认是类名小写,可以申请如@Entity(name = “t_user”),取出的值就是t_user

@Query(value="select u.id, u.name from  #{#entityName} u where u.id=?1", nativeQuery = true)
List<User> getUserById(Integer id);

nativeQuery 作用

nativeQuery 默认值为false,默认是使用hql语法, from对象
设置为true时,则使用原生sql, from表名

更新操作

添加@Modifying 注解代表允许修改

@Modifying
@Query("update User u set u.name = :name where u.id = :id")
void update(@Param("id") Integer id, @Param("name") String name);

删除操作

添加@Modifying 注解代表允许删除

@Modifying
@Query("delete from  User where u.id = :id")
void update(@Param("id") Integer id);

@query返回自定义字段

hql和原生sql都可以实现
原生sql返回的是List<Object[]>

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    @Query("select u.id, u.name, d.id, d.name " +
            "from User u, Dept d " +
            "where u.deptId=d.id", nativeQuery = true)
    List<Object[]> findAllForUserDept();

@query返回自定义对象

使用的时hql语法,不支持sql原生

@Data
public class UserDept implements Serializable {

    @JsonProperty("user_id")
    private Integer userId;

    @JsonProperty("user_name")
    private String userName;

    @JsonProperty("dept_id")
    private Integer deptId;

    @JsonProperty("dept_name")
    private String deptName;

    public UserDept(Integer userId, String userName, Integer deptId, String deptName) {
        this.userId = userId;
        this.userName = userName;
        this.deptId = deptId;
        this.deptName = deptName;
    }
}

from 后面都是用的对象(hql)

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    @Query("select new com.ljw.test.pojo.domain.UserDept(" +
            "u.id, u.name, d.id, d.name ) " +
            "from User u, Dept d " +
            "where u.deptId=d.id")
    List<UserDept> findAllForUserDept();

    @Query("select new map(" +
            "u.id as user_id, u.name as user_name, d.id as dept_id, d.name as dept_name) " +
            "from User u, Dept d " +
            "where u.deptId=d.id")
    List<Map<String, Object>> findAllForMap();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA的@Query用法 的相关文章

随机推荐

  • ubuntu 20.0.4 qt 程序打包发布及解决 xcb 加载错误的解决方法

    ubuntu 中如何通过 批处理命令进行 qt 程序的打包发布 xff0c 参见 博文 xff1a https blog csdn net qq21497936 article details 85396652 ops request mi
  • mamp pro apache 中文目录浏览乱码

    解决办法 xff1a 打开mamp pro apache配置文件httpd conf xff0c 在任意一行后加入 xff1a span class hljs attribute IndexOptions Charset span 61 s
  • PyTorch入门二:LSTM实现MNIST手写数字识别

    参考博客 xff1a https blog csdn net winycg article details 88937583 LSTM Long Short Term Memory xff0c 长短时记忆网络 xff0c 主要用于传统RNN
  • Python之Networkx详解

    文章目录 1 安装Networkx2 Networkx的基本使用2 1 导入networkx2 2 创建Graph2 3 给Graph添加边2 3 Graph基本信息获取2 4 Graph的绘制2 5 Graph的其他内置算法 3 其他3
  • 基于gunicorn部署flask项目

    文章目录 1 WSGI协议2 gunicorn介绍3 gunicorn安装4 gunicorn使用4 1 基于Flask创建python服务4 2 配置参数 启动应用服务4 2 1 命令行配置gunicorn参数4 2 2 文件配置guni
  • Python日志记录库——loguru

    loguru简单且强大的日志记录库 https zhuanlan zhihu com p 446232870
  • 批量删除word中的换行符号

    在Word中 xff0c 回车符有两种 xff0c 即 硬回车 和 软回车 硬回车是直接敲键盘上的Enter键 xff0c 软回车是按键盘上的 Shift 43 Enter 硬回车 输入快捷键 xff1a Enter xff0c 作用 xf
  • 把字符串中的字符进行排序

    把字符串中的字符进行排序 xff1a 把字符串中的字符进行排序 toCharArray xff1a 把字符串转换为字符数组 valueOf xff1a 把字符数组转换为字符串 1 把字符串中的字符进行排序 举例 xff1a 34 dacge
  • 【Ubuntu切换内核版本】NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.

    文章目录 一 有图形界面二 无图形界面2 1 查看当前内核版本2 2 查看内核启动顺序2 3 切换内核 服务器信息 xff1a Ubuntu 18 04 服务器重新启动后 xff0c 内核可能被自动更新 xff0c 这就会造成开机后服务器有
  • 深入解析最短路径算法

    转载自 xff1a http blog csdn net fengchaokobe article details 7478774 第一节 问题的提出及解决方法 所谓最短路径问题 xff0c 可以说有两种情况来描述 描述一 xff1a 在图
  • 图像特征提取(颜色,纹理,形状)

    本文主要内容转载自博客 xff1a http blog csdn net abcjennifer article details 7424971 http blog csdn net abcjennifer article details
  • latex中公式过长问题的解决

    latex中公式过长通常有以下几个解决方案 xff1a xff08 1 xff09 使用amsmath package的split环境 begin equation begin split F 61 F x in F c amp S gt
  • LATEX使用 图文混排,文字环绕插图

    插入图片时 xff0c 使用如下命令 xff1a begin wrapfigure 行数 位置 超出长度 宽度 lt 图形 gt end wrapfigure 这里行数是指图形高度所占的文本行的数目 如果不给出此选项 xff0c wrapf
  • Linux解压文件到指定目录

    tar是Linux中常用的打包 压缩 加压缩工具 xff0c tar的参数很多 xff0c 这里仅仅列举常用的压缩与解压缩参数 tar的参数 xff1a c xff1a create 建立压缩档案的参数 x xff1a 解压缩压缩档案的参数
  • SpringBoot 项目在 kubernetes 集群中启动速度过慢

    问题描述 在实际开发过程中 将 springboot 项目打成 Docker 镜像部署在 kubernetes 集群中 并启动容器实例 打开日志 发现很久才能刷一条日志 并且项目启动超过 10 分钟 如下为服务 yaml span clas
  • 结构体和文件操作

    include lt stdio h gt define NUM 3 int main struct stu char name NUM int age int score int number stu Stu NUM stu p for
  • IOS:表视图

    表视图是在iOS应用中最常见到的用户接口对象 表视图将数据以多行可滑动列表的形式展现 xff0c 并且可以以章节的形式展示 表示图有很多目的 xff1a 让用户通过分等级的结构浏览数据 呈现一个带索引的列表 通过在视觉上清晰的分组来展示详细
  • iOS UIBezierPath贝塞尔曲线常用方法

    关于 UIBezierPath UIBezierPath这个类在UIKit中 xff0c 是Core Graphics框架关于path的一个封装 xff0c 使用此类可以定义简单的形状 xff0c 比如我们常用到 xff0c 矩形 xff0
  • c++ (优化)百钱买百鸡

    问题 百钱买百鸡问题 xff1a 公鸡五文钱一只 xff0c 母鸡三文钱一只 xff0c 小鸡三只一文钱 xff0c 用100文钱买100只鸡 xff0c 公鸡 母鸡 小鸡各买多少只 第一种方法 三层循环 xff08 穷举法 xff09 s
  • JPA的@Query用法

    文章目录 64 Query作用使用例子简单使用like表达式原生sql 传参方式SPEL表达式nativeQuery 作用更新操作删除操作 64 query返回自定义字段 64 query返回自定义对象 64 Query作用 64 Quer