您可以通过简短示例向我解释一下,以下SQL查询之间的区别:
的getSession()createSQLQuery(查询);
的getSession()。的createQuery
jdbcTemplate.queryForList(查询);
如果您也解释一下,我将不胜感激,在哪种情况下我们必须使用这三个中的哪个查询。
答案 0 :(得分:0)
每个人的简短回答:
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持久性管理是不同的事情(尽管两者都可以互补)。
如果您的应用程序依赖于Hibernate之类的ORM,那么您的选择就是2)。如果您的选择是ORM,您可能也想考虑Criteria(您可以在代码的不同部分选择Criteria或HQL,因为两者都依赖于您的实体配置并带来不同的优势)。关于Criteria查询的一些信息:http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch17.html
如果您打算通过您的应用程序使用本机SQL,我会选择3)并依靠Spring模板功能来提高舒适度。