不同类型的SQL查询之间的清晰度1)createSQLQuery(查询); 2)createQuery 3)jdbcTemplate.queryForList(query);

时间:2014-04-04 14:35:51

标签: java sql spring hibernate jdbc

您可以通过简短示例向我解释一下,以下SQL查询之间的区别:

  1. 的getSession()createSQLQuery(查询);

  2. 的getSession()。的createQuery

  3. jdbcTemplate.queryForList(查询);

  4. 如果您也解释一下,我将不胜感激,在哪种情况下我们必须使用这三个中的哪个查询。

1 个答案:

答案 0 :(得分:0)

每个人的简短回答:

  1. getSession().createSQLQuery(query) 在这里,您将本机SQL查询字符串传递给方法,该方法将按原样执行。请注意,这个需要对底层数据库进行有效的本机SQL查询(注意数据库的特定功能)
  2. getSession().createQuery 在这里传递一个HQL查询。这是一种特定于Hibernate的查询格式,您可以在其文档中找到它:http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch16.html
  3. jdbcTemplate.queryForList(query) 这类似于第一个,因为它接受本机SQL查询。
  4. 请记住,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模板功能来提高舒适度。