📄 querysql.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>第 13 章 原生SQL查询</title><link rel="stylesheet" href="../shared/css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="up" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="previous" href="querycriteria.html" title="第 12 章 条件查询(Criteria Query)"><link rel="next" href="performance.html" title="第 14 章 性能提升(Improving performance)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">第 13 章 原生SQL查询</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="querycriteria.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="performance.html">下一页</a></td></tr></table><hr></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="querysql"></a>第 13 章 原生SQL查询</h2></div></div><div></div></div><p> 你也可以直接使用你的数据库方言表达查询。在你想使用数据库的某些特性的时候,这是非常有用的, 比如Oracle中的CONNECT关键字。这也会扫清你把原来直接使用SQL/JDBC 的程序移植到Hibernate道路上的障碍。 </p><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="querysql-creating"></a>13.1. 创建一个基于SQL的<tt class="literal">Query</tt></h2></div></div><div></div></div><p> 和普通的HQL查询一样,SQL查询同样是从<tt class="literal">Query</tt>接口开始的。惟一的区别是使用<tt class="literal">Session.createSQLQuery()</tt>方法。 </p><pre class="programlisting">Query sqlQuery = sess.createSQLQuery("select {cat.*} from cats {cat}", "cat", Cat.class);sqlQuery.setMaxResults(50);List cats = sqlQuery.list();</pre><p> 传递给<tt class="literal">createSQLQuer()</tt>的三个参数是: </p><div class="itemizedlist"><ul type="disc"><li><p> SQL查询语句 </p></li><li><p> 表的别名 </p></li><li><p> 查询返回的持久化类 </p></li></ul></div><p> 别名是为了在SQL语句中引用对应的类(本例中是<tt class="literal">Cat</tt>)的属性的。你也可以传递一个别名的<tt class="literal">String</tt> 数组和一个对应的<tt class="literal">Class</tt>的数组进去,每行就可以得到多个对象。 </p></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="querysql-aliasreferences"></a>13.2. 别名和属性引用</h2></div></div><div></div></div><p> 上面使用的<tt class="literal">{cat.*}</tt>标记是“所有属性的”的简写。你可以显式的列出需要的属性,但是你必须让Hibernate为每个 属性提供SQL列别名。这些列的的占位表示符是以表别名为前导,再加上属性名。下面的例子中,我们从一个其它的表(<tt class="literal">cat_log</tt>) 中获取<tt class="literal">Cat</tt>对象,而非<tt class="literal">Cat</tt>对象原本在映射元数据中声明的表。注意你在where子句中也可以使用 属性别名。 </p><pre class="programlisting">String sql = "select cat.originalId as {cat.id}, " + " cat.mateid as {cat.mate}, cat.sex as {cat.sex}, " + " cat.weight*10 as {cat.weight}, cat.name as {cat.name}" + " from cat_log cat where {cat.mate} = :catId"List loggedCats = sess.createSQLQuery(sql, "cat", Cat.class) .setLong("catId", catId) .list();</pre><p> <span class="emphasis"><em>注意:</em></span> 如果你明确的列出了每个属性,你必须包含这个类<span class="emphasis"><em>和它的子类</em></span>的属性! //?? </p></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="querysql-namedqueries"></a>13.3. 为SQL查询命名</h2></div></div><div></div></div><p> 可以在映射文档中定义SQL查询的名字,然后就可以像调用一个命名HQL查询一样直接调用命名SQL查询。 </p><pre class="programlisting"><sql-query name="mySqlQuery"> <return alias="person" class="eg.Person"/> SELECT {person}.NAME AS {person.name}, {person}.AGE AS {person.age}, {person}.SEX AS {person.sex} FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%'</sql-query></pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="querycriteria.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="performance.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">第 12 章 条件查询(Criteria Query) </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 14 章 性能提升(Improving performance)</td></tr></table></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -