JPA中的jpql-@Query的查询使用(参数传递的坑,包含对象的参数)

16 篇文章 1 订阅
单参数查询
//    @Query(value="select * from cst_customer where cust_name=?1",nativeQuery = true)
//    @Query(value="from Customer  where cust_name= ?1")
//    @Query(value="select c from Customer  c where c.custName=?1")
//    @Query(value="from Customer c where c.custName=:#{#custName}")
    @Query(value="from Customer c where c.custName=:custName")
    List<Customer> findAllCustomerByName(@Param("custName") String custName);

这几种方式是等价的

  • @Query(value=“select * from cst_customer where cust_name=?1”,nativeQuery = true)
  • @Query(value=“from Customer where cust_name= ?1”)
  • @Query(value=“select c from Customer c where c.custName=?1”)
  • @Query(value=“from Customer c where c.custName=:#{#custName}”)
  • @Query(value=“from Customer c where c.custName=:custName”)



多参数查询

//    @Query(value="from Customer  c where c.custId=?2 and c.custName=?1")
//    @Query(value="from Customer  c where c.custId=:#{#custId} and c.custName=:#{#custName}")
@Query(value="from Customer  c where c.custId=:custId and c.custName=:custName")
List<Customer> findCustomersByNameAndIndus(@Param("custName") String name,@Param("custId") Long id);

这几种方式是等价的(还有一种原生sql的方式)

  • @Query(value=“from Customer c where c.custId=?2 and c.custName=?1”)
  • @Query(value=“from Customer c where c.custId=:#{#custId} and c.custName=:#{#custName}”)
  • @Query(value=“from Customer c where c.custId=:custId and c.custName=:custName”)



参数为对象查询

@Query(value="from Customer  c where c.custId=:#{#customer.custId}")
Customer findCustomerByInfo(@Param("customer") Customer customer);
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JPA2.2.10及以上版本的JPARepository的@Query注解,可以使用JPQL的COALESCE函数和条件表达式(condition expression)来实现条件判断。 COALESCE函数可以接受多个参数,返回第一个非空的参数。我们可以将待判断的参数和一个非空的默认值一起传给COALESCE函数,如果参数为空,则函数返回默认值,否则返回参数值。 条件表达式是一种类似于三目运算符的表达式,它可以在查询语句进行条件判断。它的语法如下: ``` (condition) ? (trueResult) : (falseResult) ``` 其,condition是待判断的条件,trueResult是如果condition为true时的返回结果,falseResult是如果condition为false时的返回结果。多个条件表达式可以嵌套使用。 例如,假设有一个实体类User,其有一个字段name,我们要查询名称等于指定值或者所有用户,可以使用以下JPQL语句: ``` @Query("SELECT u FROM User u WHERE u.name = COALESCE(:name, u.name)") List<User> findUsersByNameOrAll(@Param("name") String name); ``` 这个查询语句,COALESCE函数的第一个参数是待判断的参数name,第二个参数是实体类User的属性name,如果name参数为空,则COALESCE函数返回User的name属性值,否则返回name参数值。然后在查询语句使用COALESCE函数的返回值来判断是否查询指定名称的用户。 另外,如果使用JPA2.2.10版本及以上的JPA,也可以使用条件表达式来实现条件判断。例如: ``` @Query("SELECT u FROM User u WHERE (:age IS NULL) OR (u.age > :age)") List<User> findUsersByAge(@Param("age") Integer age); ``` 这个查询语句使用了条件表达式,如果参数age为空,则查询所有用户;如果参数age不为空,则查询年龄大于指定值的用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值