@Query注解的原生用法和native用法解析

目录
  • @Query注解的原生用法和native用法
    • 1. @Query原生用法
    • 2. @Query的native查询用法
  • 有nativeQuery = true和没有的区别
    • 有nativeQuery = true时
    • 没有nativeQuery = true时

@Query注解的原生用法和native用法

1. @Query原生用法

@Query(value = "select u.id, u.name from User u, town t where u.id = t.id and t.place =:name")
User findUserByPlace(@Param("place") String place);

@Query(value = "select new User(u.id, u.name) from User u, town t where u.id = t.id and t.place = ?1")
User UsergetUserByPlace(String place);

上面两个方法的效果是一样的,这是原生方法。

2. @Query的native查询用法

@Query(value="select * from user u, town t where u.id = t.id and t.place = ?1", nativeQuery = true)
User UsergetUserByPlace(String place);

@Query的native的查询方法要增加nativeQuery = true,默认是false,这样查询的时候就是使用原生的sql语句进行查询数据库的操作。

有nativeQuery = true和没有的区别

有nativeQuery = true时

是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了,比如:

@Query(value = "select * from product_rel where audit_id=?1 and process_object=0 ",nativeQuery = true)
List<ProductRel> findAllByProductAuditId(Integer id);

这个时候,把select * from product_rel where audit_id=?1 and process_object=0拷贝到数据库中,并给audit_id赋一个值,那么这段sql就可以运行。其中数据库表在数据库中的表名就是product_rel,字段audit_id在数据库中也是真实存在的字段名。

没有nativeQuery = true时

就不是原生sql,而其中的select * from xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名。例如:

@Query("select ratio from MdmRatio ratio  where enabledNum=1 ")
List<MdmUtilThreeProjection> findByMdmUtilThreeProjection();

此中,select ratio from MdmRatio ratio 中的MdmRatio为实体名,不是真正的数据库表名,真正的数据库表名是mdm_ratio(如上图@Table里面写的那样,MdmRatio实体对应的数据库表名是mdm_ratio。

但不一定都是这样的,可能你的MdmRatio实体对应的数据库表是mdm_ratio_abc,但whatever,随便是什么,只要它真实存在就Ok),而查询条件中的enabledNum在数据库中真正的名字是enabled_num。

这两个的作用是一样的,只是写法不同而已。涉及到HQL的知识。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用JPA中@Query 注解实现update 操作方法(必看)

    使用JPA中@Query 注解实现update 操作,代码如下: @Transactional @Modifying(clearAutomatically = true) @Query(value = "update info p set p.status =?1 where p.id = ?2",nativeQuery = true)  int updateStatusById( String status,  String id); 备注: 1.更新info表下指定id的statu

  • SpringData @Query和@Modifying注解原理解析

    @Query注解查询适用于所查询的数据无法通过关键字查询得到结果的查询.这种查询可以摆脱像关键字查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring Data的特有实现. 索引参数与命名参数 1.索引参数如下所示,索引值从1开始,查询中"?X"个数需要与方法定义的参数个数相一致,并且顺序也要一致. @Query("SELECT p FROM Person p WHERE p.lastName = ?1 AND p.email = ?2")

  • 使用jpa原生sql@Query操作增删改查

    jpa原生sql@Query操作增删改查 1.jpa 原生update的sql语句: 1.命名参数(推荐使用此方式):可以定义好参数名,赋值时使用@Param("参数 名"), 而不用管顺序. 为@Query注解传递参数的方式1:命名参数 /*@Query("delete from product where p.id=:id") List<Person> testQueryAnnotationParams2(@Param("status&qu

  • spring boot中nativeQuery的用法

    Springboot入门介绍 spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请求的一个模块. 因此他们的关系大概就是这样: spring mvc < spring <springboot. Spring框架概述 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其

  • 详解Spring Data JPA使用@Query注解(Using @Query)

    经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@Query注解,使用注解有两种方式,一种是JPQL的SQL语言方式,一种是原生SQL的语言,略有区别,后者我们更熟悉一些.话不多说,看代码. 1.在CustomerRepository里添加 /** * 模糊匹配 * @param bauer * @return */ @Query("select c from Customer c where c.firstName=?1") Customer findByFirstName2

  • @Query注解的原生用法和native用法解析

    目录 @Query注解的原生用法和native用法 1. @Query原生用法 2. @Query的native查询用法 有nativeQuery = true和没有的区别 有nativeQuery = true时 没有nativeQuery = true时 @Query注解的原生用法和native用法 1. @Query原生用法 @Query(value = "select u.id, u.name from User u, town t where u.id = t.id and t.pla

  • SpringDataJpa的@Query注解报错的解决

    目录 SpringDataJpa @Query注解报错 SpringDataJpa @query注解使用原生代码报错 SpringDataJpa @Query注解报错 public interface TimeContentRepository extends JpaRepository<TimeContent,String> { @Query(value = "select id,user_id as userId,create_time as createTime "

  • SpringData如何通过@Query注解支持JPA语句和原生SQL语句

    目录 通过@Query注解支持JPA语句和原生SQL语句 @Query注解的用法(Spring Data JPA) 1.一个使用@Query注解的简单例子 2.Like表达式 3.使用Native SQL Query 4.使用@Param注解注入参数 5.SPEL表达式(使用时请参考最后的补充说明) 6.一个较完整的例子 7.解释例6中错误的原因 通过@Query注解支持JPA语句和原生SQL语句 在SpringData中们可是使用继承接口直接按照规则写方法名即可完成查询的方法,不需要写具体的实

  • 关于@Query注解的用法(Spring Data JPA)

    目录 @Query注解的用法 1.一个使用@Query注解的简单例子 2.Like表达式 3.使用NativeSQLQuery 4.使用@Param注解注入参数 5.SPEL表达式(使用时请参考最后的补充说明) 6.一个较完整的例子 7.解释例6中错误的原因 @Query注解使用详情 常用属性 取值方式 CRUD @Query注解的用法 1.一个使用@Query注解的简单例子 @Query(value = "select name,author,price from Book b where b

  • spring data jpa @Query注解中delete语句报错的解决

    目录 spring data jpa @Query注解中delete语句报错 项目中需要删除掉表中的一些数据 JPA使用@Query注解实例 1. 一个使用@Query注解的简单例子 2. Like表达式 3. 使用Native SQL Query 4. 使用@Param注解注入参数 5. SPEL表达式(使用时请参考最后的补充说明) 6. 一个较完整的例子 7. S模糊查询注意问题 8. 解释例6中错误的原因 spring data jpa @Query注解中delete语句报错 项目中需要删

  • c++中map的基本用法和嵌套用法实例分析

    本文实例讲述了c++中map的基本用法和嵌套用法.分享给大家供大家参考.具体分析如下: C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值.本文主要总结一下map基本用法和嵌套用法示例. 一.map基本用法 1. 头文件 复制代码 代码如下: #include <map> 2. 定义 复制代码 代码如下: map<int,int> my_Map; //注意这里的int和int可以是其他类型 或者是 复制代码 代码如下: t

  • 在JPA的@Query注解中使用limit条件(详解)

    在@Query注解注释的JPQL语句中写limit语句是会报错的 unexpected token :limit near line .... 解决方法是讲@Query注解中的limit语句去掉,然后传一个Pageable pageable=new PageRequest(offset,limit)进去 示例代码: controller import java.util.List; import org.springframework.beans.factory.annotation.Autow

  • nodejs中方法和模块用法示例

    本文实例讲述了nodejs中方法和模块用法.分享给大家供大家参考,具体如下: 在nodejs中方法的调用是怎样的呢? 一起来愉快的写代码吧 . var express = require("express"); var app = express(); var hostName = "127.0.0.1"; var port = 8080; app.all("*",function(req,res,next){ res.header("

随机推荐