﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-有才华的人，别忘记给滋润你的那块土壤施肥-文章分类-web</title><link>http://www.blogjava.net/kissjava/category/29899.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 05 Mar 2008 03:53:56 GMT</lastBuildDate><pubDate>Wed, 05 Mar 2008 03:53:56 GMT</pubDate><ttl>60</ttl><item><title>Query接口学习笔记</title><link>http://www.blogjava.net/kissjava/articles/183901.html</link><dc:creator>枯宽</dc:creator><author>枯宽</author><pubDate>Wed, 05 Mar 2008 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/kissjava/articles/183901.html</guid><wfw:comment>http://www.blogjava.net/kissjava/comments/183901.html</wfw:comment><comments>http://www.blogjava.net/kissjava/articles/183901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kissjava/comments/commentRss/183901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kissjava/services/trackbacks/183901.html</trackback:ping><description><![CDATA[<p>在Hibernate3.0中废除了find()方法，取而代之的是Query接口<br />
一、绑定参数<br />
1、使用&#8220;？&#8221;指定参数<br />
通过Query接口可以先设定查询参数，然后通过setXXX()等方法，将指定的参数值填入，而不用每次编写完整的HQL。<br />
&nbsp;Query query = session.createQuery(&#8220;from Student s where s.age&gt;? and s.name like ？&#8221;)<br />
&nbsp;query.setInteger(0,25);<br />
&nbsp;query.setString(1,&#8221;%clus%&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
2、使用&#8220;：&#8220;后跟变量的方法设置参数<br />
可以使用命名参数来取代&#8220;？&#8220;设置参数的方法，这可以不用来依照特定的顺序来设定参数值，比如上面的示例代码也可以写为：<br />
Query query = session.createQuery(&#8220;from Student s where s.age&gt;:minAge and s.name like :likeName&#8221;)<br />
&nbsp;query.setInteger(minAge,25);<br />
&nbsp;query.setString(likeName,&#8221;%clus%&#8221;);<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
4、setEntity()方法<br />
setEntity()方法把参数与持久化类的示例绑定<br />
Team team = (Team)session.get(Team.class,&#8221;aaa565efc767&#8221;);<br />
Query query = session.createQuery(&#8220;from Student s where s.team&gt;:team&#8221;)<br />
query. setEntity(&#8220;team&#8221;,team);<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
5、setParameter()方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setParameter()方法全称是setParameter(String paraName,实例,实例类型)，这个方法可以绑定任意类型的参数。如可把上面的改写为：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setParameter(&#8220;team&#8221;,team,Hibernate.entity(Team.class))，其中,Hibernate.entity()指定映射的Hibernate 类型，也可以不要，如：<br />
&nbsp;query.setParameter(&#8220;team&#8221;,team)<br />
&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
6、setPropertyies()方法<br />
&nbsp;&nbsp;&nbsp;&nbsp; setPropertyies()的全称是setPropertyies(类实例)。它将类实例的属性名与参数值相对应，如：<br />
Student&nbsp;&nbsp; stu = new Student();<br />
Stu.setAge(99);<br />
Query query = session.createQuery(&#8220;from Student s where s.age=:age&#8221;);<br />
&nbsp;query.setProperties(stu);<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
二、使用命名查询<br />
&nbsp;&nbsp;&nbsp;&nbsp; 可以将HQL语句写在程序之外，以避免硬编码在程序之中，需要的时候可以随时更改，在*.hbm.xml中使用&lt;query/&gt;标签，并在&lt;![CDATA[与]]&gt;之间编写HQL，编写的位置是在&lt;/class&gt;节点之后&lt;/hibername-mapping&gt;节点之间。如：<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />
&lt;hibernate-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;class name="com.kissjava.Student" table="student" lazy="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id" unsaved-value="null"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="uuid.hex"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" type="string"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="age" type="int"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- 设置命名查询 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;query name="namedQueryAgeName"&gt;&lt;!-- 此查询被调用的名字 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from Student s where s.age&gt;:minAge and s.name like:likeName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]]&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/query&gt;<br />
&lt;/hibernate-mapping&gt;<br />
&lt;query&gt;的name属性用来设定查询外部HQL时的名称依据，使用命名查询的源码如下：<br />
Query query = session.getNamedQuery(&#8220;namedQueryAgeName&#8221;)<br />
&nbsp;query.setInteger(minAge,25);<br />
&nbsp;query.setString(likeName,&#8221;%clus%&#8221;);<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
&nbsp;</p>
  <img src ="http://www.blogjava.net/kissjava/aggbug/183901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kissjava/" target="_blank">枯宽</a> 2008-03-05 11:26 <a href="http://www.blogjava.net/kissjava/articles/183901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>