使用 JPA 时,可以使用 JPQL 或"本机 SQL"来编写查询:
JPQL 示例:
interface TodoRepository extends Repository<Todo, Long> {
@Query("SELECT t FROM Todo t WHERE t.title = 'title'")
public List<Todo> findByTitle();
}
SQL示例:
interface TodoRepository extends Repository<Todo, Long> {
@Query(value = "SELECT * FROM todos t WHERE t.title = 'title'",
nativeQuery=true)
public List<Todo> findByTitle();
}
JPQL显然独立于底层数据库(Oracle,MySQL等)。我的问题是:SQL是否也独立于底层数据库?也就是说,这个SQL是某种形式的"中性"SQL,然后被翻译成特定的SQL方言(如MySQL方言)?
JPA"本机查询"是SQL。SQL因RDBMS而异。使用"本机查询"时,您完全依赖于数据库。因此,您应该始终尽可能努力使用 JPQL。
没有供应商中立形式。显然,如果所有RDBMS供应商都坚持计划ANSI SQL并支持相同的语法,那么一切都会很简单,但他们没有,事实并非如此。