类型安全查询到底意味着什么?

Man*_*Rai 6 sql hibernate jpa querydsl

在通过JPA,QueryDSL时,他们都包含了类型安全查询的概念.但究竟是什么呢?根据博客/文章,我想JPA/QueryDSL的一个功能是在进行查询时验证它们的参数类型.并且查询的任何错误都会在编译时而不是运行时出现.我对吗?它只是为了这个还是我错过了什么?

mer*_*ike 9

如果API利用编程语言的类型系统来防止类型错误,则API是类型安全的.具体来说,QueryDSL使编译器能够验证

  1. 查询中使用的所有类都存在(没有拼写错误...)并且是持久的(即映射到数据库)
  2. 查询中使用的所有属性都存在于该对象中,并且是持久的
  3. 生成的查询在语法上是有效的(没有遗漏的子句或关键字)
  4. 所有运算符都接收可接受类型的操作数

此外,富有表现力的查询api使您的IDE能够提供代码完成(也适用于域类及其属性),以及重构支持(如果重命名属性,您只需在元模型中重命名它,IDE将在所有查询中重命名) ).

作为附带好处,编写包含SQL注入漏洞的查询非常困难.

简而言之,使用QueryDSL而不是JPQL(或者在没有静态元模型的情况下使用JPA critieria查询)可以更快地编写或更改查询,并且不易出错.


Leo*_*Leo 7

QueryDSLCriteria是在JPA中汇编查询时尝试强制执行数据类型验证的库.

仅仅因为JPQL只是一个只在执行时验证的查询,很容易编写一个编译器未检测到的无效查询.当然,在编码时修复内容比在运行应用程序时更快.

当然,QueryDSL或Criteria都不能保护您的查询免受各种错误(数据类型相关或不相关)的影响,但它比JPQL更安全.

另一方面,在JPQL中编写查询可以更容易,更快捷.总是权衡:-)