﻿<?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/run2u/category/26922.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 29 Oct 2007 12:54:19 GMT</lastBuildDate><pubDate>Mon, 29 Oct 2007 12:54:19 GMT</pubDate><ttl>60</ttl><item><title>Hibernate的检索方式</title><link>http://www.blogjava.net/run2u/archive/2007/10/29/156708.html</link><dc:creator>空杯</dc:creator><author>空杯</author><pubDate>Mon, 29 Oct 2007 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/run2u/archive/2007/10/29/156708.html</guid><wfw:comment>http://www.blogjava.net/run2u/comments/156708.html</wfw:comment><comments>http://www.blogjava.net/run2u/archive/2007/10/29/156708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/run2u/comments/commentRss/156708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/run2u/services/trackbacks/156708.html</trackback:ping><description><![CDATA[<span id="diary_group_textDIV" style="line-height: 150%">&nbsp;
<p>Hibernate的检索方式Hibernate的检索方式:<br />
&nbsp;1.导航对象图检索方式<br />
&nbsp;&nbsp;&nbsp; 根据已经加载的对象,导航到其他对象.<br />
&nbsp;2.OID检索方式<br />
&nbsp;&nbsp;&nbsp; 按照对象的OID来检索对象<br />
&nbsp;3.HQL检索方式<br />
&nbsp;&nbsp;&nbsp; 使用面向对象的HQL查询语言.<br />
&nbsp;4.QBC检索方式<br />
&nbsp;&nbsp;&nbsp; 使用QBC API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的接口.<br />
&nbsp;&nbsp;&nbsp; 它主要由Criteria接口,Criterion接口和Expression类组合,它支持在运行时动态生成的查询语句:<br />
&nbsp;&nbsp;&nbsp; 以下程序代码用于检索姓名以字符"T"开头,并且年龄为21的Customer对象:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///调用Session的createCriteria()方法创建一个Criteria对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Creteria criteria=session.createCriteria(Customer.class);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置查询条件,Expression类提供了一系列用于设定查询条件的静态方法,这些静态方法都<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回Criterion实例,每个Criterion实例代表一个查询条件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criterion criterion1=Expression.like("name","T%");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criterion criterion2=Expression.eq("age",new Integer(21));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ////Criteria的add()方法用于加入查询条件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria=criteria.add(criterion1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria=criteria.add(criterion2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /////调用Criteria的list()方法执行查询语句,该方法返回List类型的查询结果,在List集合中存放<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 了符合查询条件的持久化对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List result=criteria.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于以上代码执行的SQL语句为:select * from CUSTOMERS where NAME like"T%" and AGE=21;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criteria接口支持方法链编程风格,它的add()方法返回自身实例,而不是返回void类型<br />
&nbsp;5.本地SQL检索方式:<br />
&nbsp;6.QBE检索方式:<br />
&nbsp;&nbsp; 它是QBC的子功能,QBE允许先创建一个对象样板,然后检索出所有和这个样板相同的对象.如下:<br />
&nbsp;&nbsp;&nbsp; //创建一个CUstomer样板对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Customer exampleCustomer=new Customer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exampleCustoemr.setAge(21);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List result=session.createCriteria(Custoemr.class).add(Example.create(exampleCustomer)).list();<br />
&nbsp;&nbsp;&nbsp; 因为QBE只支持"="和"like"比较运算符,所以一般采用HQL检索方式或者QBC检索方式.</p>
<p>分页查询:<br />
&nbsp; Query和Criteria接口都提供了用于分页显示查询结果的方法:<br />
&nbsp;&nbsp; setFirstResult(int firstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,索引位置的起始值为0,<br />
&nbsp;&nbsp; 在默认情况下,Query和Criteria接口从查询结果中的第一个对象,也就是索引位置为0的对象开始检索.<br />
&nbsp; setMaxResult(int maxResults):设定一次最多检索出的对象数目,在默认情况下,Query和Criteria接口检索出查询接口中所有的对象</p>
<p>检查单个对象:<br />
&nbsp;Query和Criteria接口都提供了以下用于执行查询语句并返回查询结果的方法:<br />
list()方法:返回一个List类型的查询结果,在List集合中存放了所有满足查询条件的持久化对象<br />
&nbsp;uniqueResult()方法:返回单个对象.<br />
&nbsp;在某些情况下,如果只希望检索出一个对象,可以先调用Query或Criteria接口的setMaxResult(1)方法,把最大检索数目设为1,然后调用uniqueResult()方法,<br />
&nbsp;该方法返回一个Object类型的对象.<br />
&nbsp;// 采用HQL检索方式<br />
&nbsp;Customer customer=(Customer)session.createQuery("from Customer c order by c.name asc").setMaxResults(1).uniqueResult();<br />
&nbsp;//采用QBC检索方式<br />
&nbsp;Customer customer=(Customer)session.createCriteria(Customer.class).add(Order.asc("name")).setMaxResults(1).uniqueResult();<br />
</p>
</span>
<img src ="http://www.blogjava.net/run2u/aggbug/156708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/run2u/" target="_blank">空杯</a> 2007-10-29 16:04 <a href="http://www.blogjava.net/run2u/archive/2007/10/29/156708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MiddlegenIDE的使用</title><link>http://www.blogjava.net/run2u/archive/2007/10/29/156707.html</link><dc:creator>空杯</dc:creator><author>空杯</author><pubDate>Mon, 29 Oct 2007 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/run2u/archive/2007/10/29/156707.html</guid><wfw:comment>http://www.blogjava.net/run2u/comments/156707.html</wfw:comment><comments>http://www.blogjava.net/run2u/archive/2007/10/29/156707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/run2u/comments/commentRss/156707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/run2u/services/trackbacks/156707.html</trackback:ping><description><![CDATA[<div class="postText"><span class="javascript" id="text161171">最近有朋友发信，说MiddlegenIDE的主页出了点状况，登陆上去显示的内容莫名其妙，给新手使用MiddlegenIDE带来了困难。本座去看了一下，果然是莫名其妙得厉害。下面总结一个MiddlegenIDE的使用教程吧。 <br />
<br />
MiddleGen for Hibernate加上Hibernate_Extension工具包，其实就是用来方便我们从先有的数据库导出表结构，生成对应的hbm、cfg文件与POJO类代码。MiddleGenIDE则是MiddleGen的Eclipse插件。整套东西已经有很久没有更新过了。所以虽然本座现在用的eclipse版本3.1.x也能与这个插件正常配合，但是它没有提供在线update的功能。需要你先下载<a class="ilink" href="http://prdownloads.sourceforge.net/middlegen/middlegenide_1.3.3.zip?use_mirror=jaist" target="_blank">middlegenide</a>，安装插件之后重启Eclipse。如果新开启的eclipse没有变化，估计你得用"- clean"参数再重启一下，或者去删除configuration文件夹下面对应的文件。 <br />
<br />
OK，下面讲讲怎么去用。首先当然要<a class="ilink" href="http:///" target="_blank" com=""  lenciel.yculblog.>搭建一个环境</a>（我现在把MySQL更新到了5.0，Hibernate和当时一样是2.1），然后我们建一个表，装一点数据。MySQL下面建表的脚本如下： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>DROP TABLE IF EXISTS `test`.`t_user`;</pre>
            <pre>          CREATE TABLE  `test`.`t_user` (</pre>
            <pre>          `id` <font class="java-reserved_word"><strong>int</strong></font>(11) NOT NULL auto_increment,</pre>
            <pre>          `name` varchar(255) <font class="java-reserved_word"><strong>default</strong></font> NULL,</pre>
            <pre>          PRIMARY KEY  (`id`)</pre>
            <pre>         ) ENGINE=InnoDB DEFAULT CHARSET=gbk;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
有了表之后，建立一个Java工程。然后在Src文件夹上面右键，选择&#8220;New-Other&#8221; <br />
<br />
<img alt="" src="http://foto.yculblog.com/photo/l/lenciel/Snap2.jpg" border="0" /> <br />
<br />
然后会弹出Middelgen Biuld File的选项。因为MiddleGen是一个使用Ant编译文件来调出IDE的包，所以这个插件实际上就是方便我们用完型填空的方式来编写这个Biuld File而已。 <br />
<br />
<img alt="" src="http://foto.yculblog.com/photo/l/lenciel/Snap3.jpg" border="0" /> <br />
<br />
点击后出现下面的界面，对应的内容一目了然，按照自己的需要填写即可。 <br />
<br />
<img alt="" src="http://foto.yculblog.com/photo/l/lenciel/Snap4.jpg" border="0" /> <br />
<br />
下面这张图是填好后的样子。和本座一样没有使用Hibernate 3的朋友，注意在画了红圈的Option选项中把hibernate的版本调低。不然生产的配置文件，会有一个非常诡异的"xml parser无法解析dtd"的错误。 <br />
<br />
<img alt="" src="http://foto.yculblog.com/photo/l/lenciel/Snap6.jpg" border="0" /> <br />
<br />
填好所有的东西就点击Next进入MiddleGen界面，几乎不用改任何东西直接点击Generate就能得到配置文件和POJO类了。 <br />
<br />
<img alt="" src="http://foto.yculblog.com/photo/l/lenciel/Snap8.jpg" border="0" /> <br />
<br />
另外，如果你需要在MiddleGen中生成的POJO直接带Xdoclet的标记的话，需要在找到它自带的模板文件： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>eclipse\plugins\org.ultimania.middlegenide_1.3.2\resource\template\build-hibernate.xml.vm</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
然后把下面这行生成xdoclet tag的值改成true: <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;property name=<font class="java-string">"gen.xdoclet-tag"</font>      value=<font class="java-string">"true"</font>&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
</span></div>
<img src ="http://www.blogjava.net/run2u/aggbug/156707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/run2u/" target="_blank">空杯</a> 2007-10-29 16:03 <a href="http://www.blogjava.net/run2u/archive/2007/10/29/156707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>