嗨,任何人都可以用简短的例子来解释我,以下SQL查询之间的区别:
-
getSession().createSQLQuery(query);
-
getSession().createQuery
-
jdbcTemplate.queryForList(query);
如果您还解释一下,在哪种情况下我们必须使用这三个查询中的哪个查询,我将不胜感激。
每个问题的简短回答:
-
getSession().createSQLQuery(query)
在这里,您将本机 SQL 查询字符串传递给该方法,该方法将按原样执行它。 请注意,这需要对基础数据库进行有效的本机 SQL 查询(请注意数据库的特定功能) -
getSession().createQuery
在这里传递一个 HQL 查询。 这是特定于 Hibernate 的查询格式,您可以在其文档中找到:http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch16.html -
jdbcTemplate.queryForList(query)
这与第一个类似,因为它接受本机 SQL 查询。
请记住,Hibernate会话和模板的Spring持久性管理是不同的东西(尽管两者都可以互补)。
如果您的应用程序依赖于 ORM(如 Hibernate),则您的选择是 2)。 如果您的选择是ORM,您可能也想考虑条件(您可以在代码的不同部分选择标准或HQL,因为两者都依赖于您的实体配置并带来不同的优势)。 有关条件查询的一些信息:http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch17.html
如果您打算通过您的应用程序使用本机 SQL,我会选择 3) 并依靠 Spring 模板功能来获得舒适感。