﻿<?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-城市猎人-文章分类-Hibernate</title><link>http://www.blogjava.net/sailor/category/37247.html</link><description>在一网情深的日子里，谁能说得清是苦是甜，只知道确定了就义无反顾</description><language>zh-cn</language><lastBuildDate>Mon, 12 Jan 2009 22:53:47 GMT</lastBuildDate><pubDate>Mon, 12 Jan 2009 22:53:47 GMT</pubDate><ttl>60</ttl><item><title>Hibernate三种查询方式</title><link>http://www.blogjava.net/sailor/articles/250997.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Mon, 12 Jan 2009 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/250997.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/250997.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/250997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/250997.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/250997.html</trackback:ping><description><![CDATA[<div id="articlebody">&nbsp;&nbsp;&nbsp; 大家知道，在Hibernate Framework中，提供了三种查询数据的方式：
<p><strong>&nbsp;&nbsp;&nbsp; 1.Hibernate Query Language （HQL）：</strong></p>
<p>&nbsp;&nbsp;&nbsp; 它是ANSI SQL的最小OO Dialect，例：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">session.createQuery("from&nbsp;Category&nbsp;c&nbsp;where&nbsp;c.name&nbsp;like&nbsp;'Laptop%'");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entityManager.createQuery("select&nbsp;c&nbsp;from&nbsp;Category&nbsp;c&nbsp;where&nbsp;c.name&nbsp;like&nbsp;'Laptop%'");</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>&nbsp;&nbsp;&nbsp; 2.Criteria query ：</strong></p>
<p>&nbsp;&nbsp;&nbsp; 它是HQL查询的延伸，提供了一些高级查询功能例：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">session.createCriteria(Category.class)<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.add(&nbsp;Restrictions.like("name",&nbsp;"Laptop%")&nbsp;);</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>&nbsp;&nbsp;&nbsp; 3.Native&nbsp;SQL&nbsp;query&nbsp;:</strong></p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">session.createSQLQuery(<br />
            "select&nbsp;{c.*}&nbsp;from&nbsp;CATEGORY&nbsp;{c}&nbsp;where&nbsp;NAME&nbsp;like&nbsp;'Laptop%'"<br />
            ).addEntity("c",&nbsp;Category.class);</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 最近，我在项目中经常遇到Hibernate数据查询的任务，我对一些我遇到的较难的课题举例进行说明：</p>
<p>&nbsp;&nbsp;&nbsp; 《表述SELECT》</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(User.class)<br />
            .setProjection(&nbsp;Projections.projectionList()<br />
            .add(&nbsp;Projections.property("lastname"))<br />
            .add(&nbsp;Projections.property("firstname"))<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《表述WHERE》</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(User.class)<br />
            .add(Restrictions.eq("email",&nbsp;"foo@hibernate.org"))<br />
            .uniqueResult();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《表述GROUP》</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(User.class)<br />
            .setProjection(&nbsp;Projections.projectionList()<br />
            .add(&nbsp;Projections.groupProperty("lastname"))<br />
            .add(&nbsp;Projections.groupProperty("firstname"))<br />
            .list()</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《表述ORDER》</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(User.class)<br />
            .addOrder(&nbsp;Order.asc("lastname")&nbsp;)<br />
            .addOrder(&nbsp;Order.asc("firstname")&nbsp;)<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《取TOP 5结果》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(Cat.class);<br />
            .setMaxResults(5)<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《分页》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(Cat.class)<br />
            .setFirstResult(1)<br />
            .setMaxResults(50)<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《取查询结果》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">如果使用select或group,必须使用object[]来获得查询结果List值;<br />
            如果未使用select或group,必须使用java&nbsp;object[]来获得查询结果List值;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《涉及组合primary key属性》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(activitylog.class)<br />
            .add(&nbsp;Restricts.eq(&#8220;comp_id.custId&#8221;,customerid0)&nbsp;)<br />
            .add(&nbsp;Restricts.ge(&#8220;createdTs&#8221;,&nbsp;starttime)&nbsp;)<br />
            .add(&nbsp;Restricts.le(&#8220;createdTs&#8221;,&nbsp;endtime&nbsp;)&nbsp;)<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《Foreign Key联合查询》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">Criteria&nbsp;crit&nbsp;=&nbsp;session.createCriteria(activitylog.class)<br />
            .createAlias(&nbsp;&#8220;taskCodeRf&#8221;,&nbsp;&#8220;tc&#8221;&nbsp;)<br />
            .setProjection(&nbsp;Projections.projectionList()<br />
            .add(&nbsp;Projections.property("UserId"))<br />
            .add(&nbsp;Projections.property("tc.taskdescription"))<br />
            .list();</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp; 《Native Query》：</p>
<p>
<table style="border-bottom: #cccccc 1px dotted; border-left: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-right: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">SQLQuery&nbsp;query&nbsp;=&nbsp;session.createSQLQuery(&#8220;select&nbsp;&nbsp;activitylog_seq.nextval&nbsp;as&nbsp;sessid&nbsp;from&nbsp;dual&#8221;);<br />
            Query.addScalar(&#8220;sessid&#8221;,Hibernate.LONG);<br />
            Long&nbsp;long0&nbsp;=&nbsp;query.uniqueResult();</td>
        </tr>
    </tbody>
</table>
</p>
<br />
<br />
来源：http://www.99java.com/article/34/200812/200812171145.html</div>
 <img src ="http://www.blogjava.net/sailor/aggbug/250997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2009-01-12 17:54 <a href="http://www.blogjava.net/sailor/articles/250997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>