文章目录

  • @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 {@Idprivate Integer id;private String name;private Integer upId;
}
@Entity
@Table(name = "T_USER")
@Data
public class User implements Serializable {@Idprivate 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();
}

JPA的@Query用法相关推荐

  1. Spring Data JPA 之 @Query 语法详解及其应用

    5 Spring Data JPA 之 @Query 语法详解及其应用 5.1 快速体验 @Query 的方法 沿⽤我们之前的例⼦,新增⼀个 @Query 的⽅法: // 通过 query 注解根据 ...

  2. Spring Data JPA REST Query QueryDSL

    案例概述 在本教程中,我们将研究使用Spring Data JPA和Querydsl为REST API构建查询语言. 在本系列的前两篇文章中,我们使用JPA Criteria和Spring Data ...

  3. Spring Data Jpa使用@Query时 报错Validation failed for query for method public abstract

    问题:在使用Spring Data Jpa作为持久化层,在使用@Query注解时出现以下错误: Validation failed for query for method public abstra ...

  4. JPA Native Query(本地查询)及查询结果转换

    Native Query ,本地查询, 是直接使用SQL语句进行查询,使用本地查询可以不需要查询整张表的字段, 而根据需要进行查询, 那么如何将查询的结果转换成需要的对象类型呢? 且看本篇说来. 本篇 ...

  5. pg.Pool 的 query 用法

    pg.Pool | node-postgreshttps://node-postgres.com/api/pool用法1: const { Pool } = require('pg');class D ...

  6. oracle中$的用法,关于expdp 中query用法小结

    今天看到群里有人问到关于在使用expdp导出数据中使用query参数报错的解决方法,自己也出于好奇心瞎折腾了一把,现记录如下 1.第一次尝试的时候[oracle@DB ~]$ expdp scott/ ...

  7. java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...

    常见JAVA类概念介绍 PO:持久对象 (persistent object). 是ORM(Objevt Relational Mapping)框架中Entity,PO属性和数据库中表的字段形成一一对 ...

  8. MongoDB官方C#驱动中查询条件Query用法

    MongoDB条件查询的基本语法. 1 Query.All("name", "a", "b");//通过多个元素来匹配数组 2 3 Quer ...

  9. java 注解 jpa_详解Spring Data JPA使用@Query注解(Using @Query)

    经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@query注解,使用注解有两种方式,一种是jpql的sql语言方式,一种是原生sql的语言,略有区别,后者我们更熟悉一些.话不多说,看代码. ...

最新文章

  1. 改变,从跨出第一步開始——记海大ITAEM团队首次IT讲座掠影
  2. ubuntu导出数据库
  3. What is an Operating System?
  4. 遇见未来 | 基于软件定义存储的数据加速解决方案:让你的系统加速跑
  5. Java递归一个四十万的树结构_java递归展示树形图代码实现以及遇到的问题
  6. 随想录(redis的学习和使用)
  7. 无限级分销系统数据库表设计
  8. YOLOv3的环境配置
  9. cint、int、fix的区别
  10. 连平县新视界-连平2018年公开招聘教职员66人
  11. 智慧停车服务器及存储系统设计,浅谈:停车场管理系统系统组成
  12. vue-cli 项目启动输出 INFO Starting development server... 69o/o after emitting CopyPlugin
  13. 怎么获取淘宝商品详情
  14. matlab相机标定工具箱下载,matlab相机标定工具箱
  15. MFC中UpdateData(FALSE)与UpdateData(TRUE)的区别
  16. Mybatis(1)——Mybatis Generator自动生成代码
  17. 抓取淘宝购物车数据以及足迹数据
  18. win10升级工具_Win7倒计时34天!微软最后一次免费升级至win10,你敢来吗?
  19. PS通过模板批量替换数据转换为PDF
  20. 英文数字汇总,KMGT,毫微纳

热门文章

  1. discuz 服务器维护,求助:重启论坛服务器后出现的问题
  2. oracle 层次查询 connect by
  3. 《More Effective C++》读后感
  4. 第九章SpringBoot整合Spring Data JPA
  5. 16.体测成绩判定(c函数调用)
  6. 阿里研究院发布《2020中国区块链发展报告》,毛球科技助力数字经济加速发展
  7. python抢火车票 短信通知
  8. 互联网公司无线覆盖解决方案
  9. 币圈最全java入门教程+实战项目!
  10. 互联网黑话最全收录|还在说大白话?看完这篇包你成为职场“社牛”