JPA的@Query用法
文章目录
- @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开始
- 命名参数,@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用法相关推荐
- Spring Data JPA 之 @Query 语法详解及其应用
5 Spring Data JPA 之 @Query 语法详解及其应用 5.1 快速体验 @Query 的方法 沿⽤我们之前的例⼦,新增⼀个 @Query 的⽅法: // 通过 query 注解根据 ...
- Spring Data JPA REST Query QueryDSL
案例概述 在本教程中,我们将研究使用Spring Data JPA和Querydsl为REST API构建查询语言. 在本系列的前两篇文章中,我们使用JPA Criteria和Spring Data ...
- Spring Data Jpa使用@Query时 报错Validation failed for query for method public abstract
问题:在使用Spring Data Jpa作为持久化层,在使用@Query注解时出现以下错误: Validation failed for query for method public abstra ...
- JPA Native Query(本地查询)及查询结果转换
Native Query ,本地查询, 是直接使用SQL语句进行查询,使用本地查询可以不需要查询整张表的字段, 而根据需要进行查询, 那么如何将查询的结果转换成需要的对象类型呢? 且看本篇说来. 本篇 ...
- pg.Pool 的 query 用法
pg.Pool | node-postgreshttps://node-postgres.com/api/pool用法1: const { Pool } = require('pg');class D ...
- oracle中$的用法,关于expdp 中query用法小结
今天看到群里有人问到关于在使用expdp导出数据中使用query参数报错的解决方法,自己也出于好奇心瞎折腾了一把,现记录如下 1.第一次尝试的时候[oracle@DB ~]$ expdp scott/ ...
- java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...
常见JAVA类概念介绍 PO:持久对象 (persistent object). 是ORM(Objevt Relational Mapping)框架中Entity,PO属性和数据库中表的字段形成一一对 ...
- MongoDB官方C#驱动中查询条件Query用法
MongoDB条件查询的基本语法. 1 Query.All("name", "a", "b");//通过多个元素来匹配数组 2 3 Quer ...
- java 注解 jpa_详解Spring Data JPA使用@Query注解(Using @Query)
经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@query注解,使用注解有两种方式,一种是jpql的sql语言方式,一种是原生sql的语言,略有区别,后者我们更熟悉一些.话不多说,看代码. ...
最新文章
- 改变,从跨出第一步開始——记海大ITAEM团队首次IT讲座掠影
- ubuntu导出数据库
- What is an Operating System?
- 遇见未来 | 基于软件定义存储的数据加速解决方案:让你的系统加速跑
- Java递归一个四十万的树结构_java递归展示树形图代码实现以及遇到的问题
- 随想录(redis的学习和使用)
- 无限级分销系统数据库表设计
- YOLOv3的环境配置
- cint、int、fix的区别
- 连平县新视界-连平2018年公开招聘教职员66人
- 智慧停车服务器及存储系统设计,浅谈:停车场管理系统系统组成
- vue-cli 项目启动输出 INFO Starting development server... 69o/o after emitting CopyPlugin
- 怎么获取淘宝商品详情
- matlab相机标定工具箱下载,matlab相机标定工具箱
- MFC中UpdateData(FALSE)与UpdateData(TRUE)的区别
- Mybatis(1)——Mybatis Generator自动生成代码
- 抓取淘宝购物车数据以及足迹数据
- win10升级工具_Win7倒计时34天!微软最后一次免费升级至win10,你敢来吗?
- PS通过模板批量替换数据转换为PDF
- 英文数字汇总,KMGT,毫微纳