ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>韩日精品一区二区,日本一区二区三区www,欧美精品一区二区三区久久久竹菊 http://www.aygfsteel.com/junglesong/世上本无难事åQŒå¿ƒ(j¨©)以䨓(f¨´)难,斯乃真难。苟不存?sh¨´)¸€éš¾ä¹‹è§äºŽå¿?j¨©),则运用之术自出ã€?/description>zh-cnTue, 17 Jun 2025 02:17:25 GMTTue, 17 Jun 2025 02:17:25 GMT60Struts Tiles 使用½CÞZ¾‹http://www.aygfsteel.com/junglesong/archive/2008/11/23/242071.html和风¾l†é›¨å’Œé£Ž¾l†é›¨Sun, 23 Nov 2008 00:14:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/11/23/242071.htmlhttp://www.aygfsteel.com/junglesong/comments/242071.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/11/23/242071.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/242071.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/242071.html http://www.aygfsteel.com/Files/junglesong/StrutsAdvanced20081123075445.rar

½CÞZ¾‹å›„¡‰‡åQ?br />

]]>
几个Swing½E‹åºä¸‹è²http://www.aygfsteel.com/junglesong/archive/2008/08/09/221025.html和风¾l†é›¨å’Œé£Ž¾l†é›¨Sat, 09 Aug 2008 08:05:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/08/09/221025.htmlhttp://www.aygfsteel.com/junglesong/comments/221025.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/08/09/221025.html#Feedback3http://www.aygfsteel.com/junglesong/comments/commentRss/221025.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/221025.htmlSwing的事件响åº?br /> http://www.aygfsteel.com/Files/junglesong/EventActionListener20080809155942.zip

日记本程�br /> http://www.aygfsteel.com/Files/junglesong/MyDiary20080809155951.zip
 
个äh通讯å½?br /> http://www.aygfsteel.com/Files/junglesong/MyMemo20080809160003.zip

公共资源½Ž¡ç†¾pȝ»Ÿ
http://www.aygfsteel.com/Files/junglesong/PublicResMngSys20080809160011.rar

以上˜q™äº›½E‹åºéƒ½æ˜¯ä½¿ç”¨XMLä½œäØ“(f¨´)存储介质åQŒæ— éœ€æ•°æ®åº“支持ã€?br />
成员½Ž¡ç†½E‹åºSpring版,使用MySql数据åº?br /> http://www.aygfsteel.com/Files/junglesong/MemberSpring20080811091508.zip


Eclispe3.2以上åQŒå°†å·¥ç¨‹è½½å…¥åŒ™ƒ½˜qè¡Œã€?

]]>
JS中子½H—体的å€ég¼ é€’到父窗体示ä¾?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/05/20/201646.html</link><dc:creator>和风¾l†é›¨</dc:creator><author>和风¾l†é›¨</author><pubDate>Tue, 20 May 2008 06:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/05/20/201646.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/201646.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/05/20/201646.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/201646.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/201646.html</trackback:ping><description><![CDATA[<p><img height="90" alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/20080519ai.gif" width="728" border="0" /></p> <p><br /> 其实ž®±æ˜¯å…³é”®ä¸€å¥è¯åQ?br /> window.<strong>opener</strong>.document.getElementById("XXX").value=“123456”;<br /> <br /> 例程如下åQ?br /> <a href="http://www.aygfsteel.com/Files/junglesong/ParentChildWnd20080520140659.rar">http://www.aygfsteel.com/Files/junglesong/ParentChildWnd20080520140659.rar</a> <br /> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/201646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">和风¾l†é›¨</a> 2008-05-20 14:14 <a href="http://www.aygfsteel.com/junglesong/archive/2008/05/20/201646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>持久化对象çñ”联关¾p?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197595.html</link><dc:creator>和风¾l†é›¨</dc:creator><author>和风¾l†é›¨</author><pubDate>Wed, 30 Apr 2008 12:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197595.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/197595.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/197595.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/197595.html</trackback:ping><description><![CDATA[<p><strong>¾cÖM¹‹é—´å…³è”çš„Hibernate表现</strong></p> <p>在Java½E‹åºä¸?¾cÖM¹‹é—´å­˜åœ¨å¤š¿UåŒ…含关¾p?典型的三¿Uå…³è”å…³¾pÀLœ‰:一个类拥有另一个类的成å‘?一个类拥有另一个类的集合的成员;两个¾cȝ›¸äº’拥有对象的集合的成å‘?在Hibernateä¸?我们可以使用映射文äšg中的many-to-one, one-to-many, many-to-many来实现它ä»?˜q™æ ·çš„å…³¾pÕdœ¨Hibernate中简¿UîCØ“(f¨´)多对一,一对多和多对多.</p> <p><strong>多对一的类代码</strong></p> <p>事äšg与地ç‚ÒŽ(gu¨©)˜¯å…¸åž‹çš„多对一关系,多个事äšg可以在一个地点发ç”?æ—‰™—´ä¸åŒ),一个地点可发生多个事äšg.它们的对应关¾pÀL˜¯(å¤?事äšgå¯?一)地点.<br /> 两个¾cȝš„代码如右:<br /> public class Event{<br />   private String id;<br />   private String name;  <br />   private Location location;<br /> }</p> <p>public class Location{<br />   private String id;<br />   private String name;<br /> }</p> <p><strong>多对一的映ž®„æ–‡ä»?/strong></p> <p><?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.Event"<br />     table="Event_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name" column="name" /><br />     <many-to-one name="location" column="locationId" class="com.sitinspring.domain.Location"/><br />   </class><br /> </hibernate-mapping></p> <p><br /> <?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.Location"<br />     table="Location_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name" column="name" /><br />   </class><br /> </hibernate-mapping></p> <p><strong>多对一的表数据<br /> <img height="304" alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/Hibmanytoone.jpg" width="576" border="0" /><br /> <br /> </strong></p> <p><strong>一对多的类代码</strong></p> <p>如果一个用æˆähœ‰å¤šä¸ªæƒé™,那么User¾cÕd’ŒPrivilege¾cÕd°±æž„成äº?ji¨£n)一对多的关¾p?User¾cÕd°†åŒ…含一个Privilege¾cȝš„集合.</p> <p>public class User{<br />   private String id;<br />   private String name;<br />   private Set<Privilege> privileges=new LinkedHashSet<Privilege>();<br /> }</p> <p>public class Privilege{<br />   private String id;<br />   private String userId;<br />   private int privilegeLevel;<br /> }</p> <p><br /> <strong>一对多的映ž®„æ–‡ä»?/strong></p> <p><?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.User"<br />     table="User_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name" column="name" /><br />     <set name="privileges"><br />       <key column="userId"/><br />       <one-to-many class="com.sitinspring.domain.Privilege"/><br />     </set><br />   </class><br /> </hibernate-mapping></p> <p><br /> <?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.Privilege"<br />     table="Privilege_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="userId" column="userId" /><br />     <property name="privilegeLevel" column="privilegeLevel" /><br />   </class><br /> </hibernate-mapping></p> <p><br /> <strong>一对多的表数据<br /> </strong></p> <p><img alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/Hibonetomany.jpg" border="0" /><br /> <br /> <strong>多对å¤?/strong></p> <p>多对多关¾p?是指两个¾cȝ›¸äº’拥有对方的集合,如文章和标签两个¾c?一½‹‡æ–‡ç« å¯èƒ½æœ‰å¤šä¸ªæ ‡ç­¾,一个标½{‘֏¯èƒ½å¯¹åº”多½‹‡æ–‡ç«?要实现这¿Uå…³¾p»éœ€è¦ä¸€ä¸ªä¸­é—´è¡¨çš„è¾…åŠ?</p> <p>¾cÖM»£ç å¦‚å?</p> <p>public class Article{<br />     private String id;<br />     private String name;<br />     <br />     private Set<Tag> tags = new HashSet<Tag>();<br /> }</p> <p>public class Tag{<br />     private String id;<br />     private String name;<br />     <br />     private Set<Article> articles = new HashSet<Article>();<br /> }</p> <p><strong>多对多的映射文äšg</strong></p> <p><?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.Article" table="ARTICLE_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name" column="NAME" /></p> <p>    <set name="tags" table="ARTICLETAG_TB"  cascade="all" lazy="false"><br />       <key column="ARTICLEID" /><br />       <many-to-many column="TAGID" class="com.sitinspring.domain.Tag" /><br />     </set><br />   </class><br /> </hibernate-mapping></p> <p><br /> <?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br />   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.Tag" table="TAG_TB"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name"  column="NAME" /><br />     <br />     <set name="articles" table="ARTICLETAG_TB" cascade="all" lazy="false"><br />       <key column="TAGID" /><br />       <many-to-many column="ARTICLEID" class="com.sitinspring.domain.Article" /><br />     </set><br />   </class><br /> </hibernate-mapping></p> <p><br /> <strong>多对多的表数æ?/strong></p> <p> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/Hibmanytomany.jpg" border="0" /><br /> <br /> 源码下蝲åQ?br /> <a href="http://www.aygfsteel.com/Files/junglesong/HibernateMapping20080430203526.rar">http://www.aygfsteel.com/Files/junglesong/HibernateMapping20080430203526.rar</a> <br /> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/197595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">和风¾l†é›¨</a> 2008-04-30 20:33 <a href="http://www.aygfsteel.com/junglesong/archive/2008/04/30/197595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernateä¹?Criteria查询http://www.aygfsteel.com/junglesong/archive/2008/04/30/197566.html和风¾l†é›¨å’Œé£Ž¾l†é›¨Wed, 30 Apr 2008 09:21:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197566.htmlhttp://www.aygfsteel.com/junglesong/comments/197566.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197566.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/197566.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/197566.htmlCriteria查询

Hibernate中的Criteria API提供äº?ji¨£n)另一¿UæŸ¥è¯¢æŒä¹…化的方法。它让你能够使用½Ž€å•çš„API动态的构徏查询åQŒå®ƒç‰|´»çš„特性通常用于搜烦(ch¨³)条äšg的数量可变的情况ã€?br /> Criteria查询之所以灵‹zÀL˜¯å› äØ“(f¨´)它可以借助Java语言,在Java的帮助下它拥有超­‘ŠHQL的功能。Criteria查询也是Hibernate竭力推荐的一¿Ué¢å‘对象的查询方式ã€?br /> Criteria查询的缺点在于只能检索完整的对象åQŒä¸æ”¯æŒ¾lŸè®¡å‡½æ•°åQŒå®ƒæœ¬èínçš„API也抬高ä(sh¨´)º†(ji¨£n)一定的学习(f¨¤n)坡度ã€?/p>

Criteria查询½CÞZ¾‹ä»£ç 

Session session=HibernateUtil.getSession();

Criteria criteria=session.createCriteria(User.class);
  // 条äšg一åQšå¿UîC»¥å…›_¼€å¤?br /> criteria.add(Restrictions.like("name", "å…?"));
// 条äšg二:(x¨¬)email出现在数¾l„中
String[] arr={"1@2.3","2@2.3","3@2.3"};
criteria.add(Restrictions.in("email", arr));
// 条äšg三:(x¨¬)password½{‰äºŽä¸€
criteria.add(Restrictions.eq("password", "1"));
// 排序条äšgåQšæŒ‰ç™Õd½•æ—‰™—´å‡åº
criteria.addOrder(Order.asc("lastLoginTime"));

List<User> users=(List<User>)criteria.list();
System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
for(User user:users){
System.out.println(user);
}

  HibernateUtil.closeSession(session);

Criteria查询实际产生的SQL语句

select
    this_.ID as ID0_0_,
    this_.name as name0_0_,
    this_.pswd as pswd0_0_,
    this_.email as email0_0_,
    this_.lastLoginTime as lastLogi5_0_0_,
    this_.lastLoginIp as lastLogi6_0_0_
from
    USERTABLE_OKB this_
where
    this_.name like 'å…?'
    and this_.email in (
        '1@2.3', '2@2.3', '3@2.3'
    )
    and this_.pswd='1'
order by
    this_.lastLoginTime asc

注:(x¨¬)参数是手工加上的ã€?br />



]]>
Hibernate之HQLhttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197560.html和风¾l†é›¨å’Œé£Ž¾l†é›¨Wed, 30 Apr 2008 08:55:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197560.htmlhttp://www.aygfsteel.com/junglesong/comments/197560.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197560.html#Feedback1http://www.aygfsteel.com/junglesong/comments/commentRss/197560.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/197560.htmlHQL介绍

Hibernate中不使用SQL而是有自å·Þqš„面向对象查询语言,该语­a€åäØ“(f¨´)Hibernate查询语言(Hibernate Query Language).HQL被有意设计成¾cÖM¼¼SQL,˜q™æ ·å¼€å‘äh员可以利用已有的SQL知识,降低学习(f¨¤n)坡度.它支持常用的SQLç‰ÒŽ(gu¨©)€?˜q™äº›ç‰ÒŽ(gu¨©)€§è¢«ž®è£…成面向对象的查询语言,从某¿Uæ„ä¹‰ä¸Šæ¥è¯´,ç”±HQL是面向对象的,因此比SQL更容易编å†?
本文ž®†é€æ¸ä»‹ç»HQL的特æ€?

查询数据库中所有实�/strong>

要得到数据库中所有实ä¾?HQL写䨓(f¨´)”from 对象å?#8221;卛_¯,不需要select子句,当然更不需要Where子句.代码如右.

Query query=session.createQuery("from User");
List<User> users=(List<User>)query.list();

for(User user:users){
     System.out.println(user);
}


限制˜q”回的实例数

讄¡½®æŸ¥è¯¢çš„maxResults属性可限制˜q”回的实ä¾?记录)æ•?代码如右:

Query query=session.createQuery("from User order by name");
query.setMaxResults(5);
List<User> users=(List<User>)query.list();

System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
for(User user:users){
 System.out.println(user);
}

分页查询

分页是Web开发的常见è¯ùN¢˜,每种数据库都有自å·Þq‰¹å®šçš„分页æ–ÒŽ(gu¨©)¡ˆ,从简单到复杂都有.在Hibernate中分™åµé—®é¢˜å¯ä»¥é€šè¿‡è®„¡½®firstResultå’ŒmaxResultè½ÀL¾çš„è§£å†?

代码如右:

Query query=session.createQuery("from User order by name");
query.setFirstResult(3);
query.setMaxResults(5);
List<User> users=(List<User>)query.list();

System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
for(User user:users){
      System.out.println(user);
}

条äšg查询

条äšg查询只要增加Where条äšg卛_¯.
代码如右:

Hibernate中条件查询的实现方式有多¿U?˜q™ç§æ–¹å¼çš„优点在于能昄¡¤ºå®Œæ•´çš„SQL语句(包括参数)如下.

select
    user0_.ID as ID0_,
    user0_.name as name0_,
    user0_.pswd as pswd0_,
    user0_.email as email0_,
    user0_.lastLoginTime as lastLogi5_0_,
    user0_.lastLoginIp as lastLogi6_0_
from
    USERTABLE_OKB user0_
where
    user0_.name like 'ä½?'

public static void fetchByName(String prefix){
  Session session=HibernateUtil.getSession();
 
  Query query=session.createQuery("from User where name like'"+prefix+"%'");
  List<User> users=(List<User>)query.list();
 
  System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
  for(User user:users){
    System.out.println(user);
  }
     
      HibernateUtil.closeSession(session);
}

位置参数条äšg查询

HQL中也可以象jdbc中PreparedStatementä¸€æ ·äØ“(f¨´)SQL讑֮šå‚æ•°,但不同的是下标从0å¼€å§?
代码如右:


public static void fetchByPos(String prefix){
  Session session=HibernateUtil.getSession();
 
  Query query=session.createQuery("from User where name=?");
  // 注意下标是从0å¼€å§?å’Œjdbc中PreparedStatementä»?开始不å?br />   query.setParameter(0, prefix);
  List<User> users=(List<User>)query.list();
 
  System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
  for(User user:users){
    System.out.println(user);
  }
     
      HibernateUtil.closeSession(session);
}

命名参数条äšg查询

使用位置参数条äšg查询最大的不便在于下标ä¸?号位¾|®çš„对应ä¸?如果参数较多å®ÒŽ(gu¨©)˜“坯D‡´é”™è¯¯.˜q™æ—¶é‡‡ç”¨å‘½åå‚数条äšg查询更好.
使用命名参数时无需知道每个参数的烦(ch¨³)引位¾|?˜q™æ ·ž®±å¯ä»¥èŠ‚çœå¡«å……æŸ¥è¯¢å‚æ•°çš„æ—‰™—´.

如果有一个命名参数出现多‹Æ?那在每个地方都会(x¨¬)讄¡½®å®?

public static void fetchByNamedParam(){
  Session session=HibernateUtil.getSession();
 
  Query query=session.createQuery("from User where name=:name");
  query.setParameter("name", "李白");
  List<User> users=(List<User>)query.list();
 
  System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
  for(User user:users){
    System.out.println(user);
  }
     
      HibernateUtil.closeSession(session);
}

命名查询

命名查询是嵌在XML映射文äšg中的查询。通常åQŒå°†¾l™å®šå¯¹è±¡çš„æ‰€æœ‰æŸ¥è¯¢éƒ½æ”‘Öœ¨åŒä¸€æ–‡äšg中,˜q™ç§æ–¹å¼å¯ä‹É¾l´æŠ¤ç›¸å¯¹å®ÒŽ(gu¨©)˜“些。命名查询语句写在映ž®„定义文件的最后面ã€?/p>

执行代码如下åQ?br /> Session session=HibernateUtil.getSession();

Query query=session.getNamedQuery("user.sql");
List<User> users=(List<User>)query.list();

System.out.println("˜q”回的User实例æ•îCØ“(f¨´)"+users.size());
for(User user:users){
  System.out.println(user);
}
   
HibernateUtil.closeSession(session);


映射文äšg节选:(x¨¬)
<hibernate-mapping package="org.hibernate.auction">
  <class name="com.sitinspring.domain.User"
    table="USERTABLE_OKB" lazy="false">
    <id name="id" column="ID" >
      <generator class="uuid.hex"/>
    </id>
    <property name="name" column="name" />
    <property name="password" column="pswd" />
    <property name="email" column="email" />
    <property name="lastLoginTime" column="lastLoginTime" />
    <property name="lastLoginIp" column="lastLoginIp" />
  </class>
 
  <query name="user.sql">
    <![CDATA[from User where email='2@2.3']]>
  </query>
</hibernate-mapping>



]]>
Hibernate的主要组ä»?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197558.html</link><dc:creator>和风¾l†é›¨</dc:creator><author>和风¾l†é›¨</author><pubDate>Wed, 30 Apr 2008 08:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197558.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/197558.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/197558.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/197558.html</trackback:ping><description><![CDATA[<p><strong>主要的Hibernate¾l„äšg<br /> </strong><img alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/HibernateConponents.jpg" border="0" /></p> <p><strong>Configuration¾c?/strong></p> <p>Configuration¾cÕd¯åЍHibernate的运行环境部分,用于加蝲映射文äšg以及(qi¨¢ng)为它们创å»ÞZ¸€ä¸ªSessionFacotry。完成这两项功能后,ž®±å¯ä¸¢å¼ƒConfiguration¾c…R€?/p> <p>// 从hibernate.cfg.xml创徏SessionFactory ½CÞZ¾‹<br /> sessionFactory = new Configuration().configure()<br /> .buildSessionFactory();</p> <p><strong>SessionFactory¾c?/strong></p> <p>Hibernate中Session表示到数据库的连接(不止于此åQ‰ï¼Œè€ŒSessionFactory接口提供Session¾cȝš„实例ã€?br /> SessionFactory实例是线½E‹å®‰å…¨çš„åQŒé€šå¸¸åœ¨æ•´ä¸ªåº”用程序中å…׃ínã€?br /> 从Configuration创徏SessionFacotry的代码如叟ë€?/p> <p>// 从hibernate.cfg.xml创徏SessionFactory ½CÞZ¾‹<br /> SessionFactory  sessionFactory = new Configuration().configure()<br /> .buildSessionFactory();</p> <p><strong>Session¾c?/strong></p> <p>Session表示到数据库的连接,session¾cȝš„实例是到Hibernate框架的主要接口,使你能够持久化对象,查询持久化以å?qi¨¢ng)将持久化对象è{æ¢äØ“(f¨´)临时对象ã€?br /> Session实例不是¾U¿ç¨‹å®‰å…¨çš„,只能ž®†å…¶ç”¨äºŽåº”用中的事务和工作单元ã€?br /> 创徏Session实例的代码如叻I¼š(x¨¬)</p> <p>SessionFactory sessionFactory = new Configuration().configure()<br /> .buildSessionFactory();<br /> Session session=sessionFactory.openSession();</p> <p><strong>保存?sh¨´)¸€ä¸ªå¯¹è±?/strong></p> <p>用Hibernate持久化一个äÍ(f¨´)时对象也ž®±æ˜¯ž®†å®ƒä¿å­˜åœ¨Session实例中:(x¨¬)<br /> 对user实例调用saveæ—Óž¼Œž®†ç»™è¯¥å®žä¾‹åˆ†é…ä¸€ä¸ªç”Ÿæˆçš„IDå€û|¼Œòq¶æŒä¹…化该实例,在此之前实例的id是nullåQŒä¹‹åŽå…·ä½“çš„idç”Þq”Ÿæˆå™¨½{–略军_®šåQŒå¦‚果生成器¾cÕdž‹æ˜¯assigndåQŒHibernatež®†ä¸ä¼?x¨¬)给其设¾|®ID倹{€?br /> FlushåQˆï¼‰(j¨ª)æ–ÒŽ(gu¨©)³•ž®†å†…å­˜ä(sh¨´)¸­çš„æŒä¹…化对象同步到数据库。存储对象时åQŒSession不会(x¨¬)立即ž®†å…¶å†™å…¥æ•°æ®åº“;相反åQŒsessionž®†å¤§é‡æ•°æ®åº“写操作加入队列,以最大限度的提高性能ã€?/p> <p>User user=new User(“Andy”,22);<br /> Session session=sessionFatory.openSession();<br /> session.save(user);<br /> session.flush();<br /> session.close();</p> <p><strong>保存或更æ–îC¸€ä¸ªå¯¹è±?/strong></p> <p>Hibernate提供äº?ji¨£n)一¿Uä¾¿åˆ©çš„æ–ÒŽ(gu¨©)³•用于在你不清楚实例对应的数据在数据库中的状态时保存或更æ–îC¸€ä¸ªå¯¹è±¡ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒä½ ä¸èƒ½¼‹®å®šå…·ä½“是要保存save˜q˜æ˜¯æ›´æ–°updateåQŒåªèƒ½ç¡®å®šéœ€è¦æŠŠå¯¹è±¡åŒæ­¥åˆ°æ•°æ®åº“中。这个方法就是saveOrUpdateã€?br /> Hibernate在持久化时会(x¨¬)查看实例的idå±žæ€§ï¼Œå¦‚æžœå…¶äØ“(f¨´)null则判断此对象是äÍ(f¨´)æ—¶çš„åQŒåœ¨æ•°æ®åº“中找不到对应的实例åQŒå…¶åŽé€‰æ‹©ä¿å­˜˜q™ä¸ªå¯¹è±¡åQ›è€Œä¸ä¸ºç©ºæ—¶åˆ™æ„å‘³ç€å¯¹è±¡å·²ç»æŒä¹…化,应该在数据库中更新该对象åQŒè€Œä¸æ˜¯å°†å…¶æ’å…¥ã€?/p> <p>User user=。。ã€?<br /> Session session=sessionFatory.openSession();<br /> session.saveOrUpdate(user);<br /> Session.flush();<br /> session.close();</p> <p><strong>删除一个对è±?/strong></p> <p>从数据库删除一个对象ä‹É用sessionçš„deleteæ–ÒŽ(gu¨©)³•åQŒæ‰§è¡Œåˆ é™¤æ“ä½œåŽåQŒå¯¹è±¡å®žä¾‹ä¾ç„¶å­˜åœ¨ï¼Œä½†æ•°æ®åº“中对应的记录已经被删除ã€?/p> <p>User user=。。ã€?<br /> Session session=sessionFatory.openSession();<br /> session.delete(user);<br /> session.flush();<br /> session.close();</p> <p><strong>以ID从数据库中取得一个对è±?/strong></p> <p>如果已经知道一个对象的idåQŒéœ€è¦ä»Žæ•°æ®åº“中取得它,可以使用Sessionçš„loadæ–ÒŽ(gu¨©)³•来返回它。代码如å?<br /> 注意此放在id对应的记录不存在时会(x¨¬)抛出一个HibernateException异常åQŒå®ƒæ˜¯ä¸€ä¸ªéž‹‚€(g¨¨)查性异常。对此的正确处理是捕莯‚¿™ä¸ªå¼‚å¸¸åÆˆ˜q”回一个nullã€?br /> 使用此想法如果采用默认的懒惰加蝲ä¼?x¨¬)导致异常,å¯Ò?gu¨©)­¤æœ€½Ž€å•的解决æ–ÒŽ(gu¨©)¡ˆæ˜¯æŠŠé»˜è®¤çš„æ‡’æƒ°åŠ è½½å±žæ€§ä¿®æ”¹äØ“(f¨´)false。如叻I¼š(x¨¬)</p> <p>User user=(User)session.load(User.class,"008");<br /> session.close();</p> <p>-----------------------------------------------</p> <p><?xml version="1.0"?><br /> <!DOCTYPE hibernate-mapping PUBLIC <br /> "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br /> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /> <hibernate-mapping package="org.hibernate.auction"><br /> <class name="com.sitinspring.domain.User"<br /> table="USERTABLE_OKB" lazy="false"><br /> <id name="id" column="ID" ><br /> <generator class="uuid.hex"/><br /> </id><br /> 。。。ã€?br /> </class><br /> </hibernate-mapping></p> <p><strong>‹‚€(g¨¨)索一批对è±?/strong></p> <p>‹‚€(g¨¨)索一批对象需要ä‹É用HQLåQŒsession接口允许你创建Query对象以检索持久化对象åQŒHQL是面向对象的åQŒä½ éœ€è¦é’ˆå¯¹ç±»å’Œå±žæ€§æ¥ä¹¦å†™ä½ çš„HQL而不是表和字ŒDµåã€?br /> 从数据库中查询所有用户对象如下:(x¨¬)<br /> Query query=session.createQuery(“from User”);// 注意˜q™é‡ŒUser是类名,from前没有selectã€?br /> List<User> users=(List<User>)query.list();</p> <p>从数据库中查询名ä¸?#8220;Andy”的用户如下:(x¨¬)<br /> String name=“Andy”;<br /> Query query=session.createQuery(“from User where name=‘”+name+”’”); <br /> List<User> users=(List<User>)query.list();</p> <p>以上æ–ÒŽ(gu¨©)³•¾cÖM¼¼äºŽStatement的写法,你还可以如下书写åQ?br /> Query query=session.createQuery("from User  user where user.name = :name");<br /> query.setString("name", “Andy");<br /> List<User> users=(List<User>)query.list();<br /> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/197558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">和风¾l†é›¨</a> 2008-04-30 16:50 <a href="http://www.aygfsteel.com/junglesong/archive/2008/04/30/197558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的映ž®„æ–‡ä»?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197556.html</link><dc:creator>和风¾l†é›¨</dc:creator><author>和风¾l†é›¨</author><pubDate>Wed, 30 Apr 2008 08:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197556.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/197556.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197556.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/197556.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/197556.html</trackback:ping><description><![CDATA[<p><strong>Hibernate的映ž®„æ–‡ä»?/strong></p> <p>映射文äšg也称映射文æ¡£,用于向Hibernate提供关于ž®†å¯¹è±¡æŒä¹…化到关¾pÀL•°æ®åº“中的信息.<br /> 持久化对象的映射定义可全部存储在同一个映ž®„文件中,也可ž®†æ¯ä¸ªå¯¹è±¡çš„æ˜ å°„定义存储在独立的文äšgä¸?后一¿Uæ–¹æ³•较å¥?因䨓(f¨´)ž®†å¤§é‡æŒä¹…化¾cÈš„æ˜ å°„定义存储在一个文件中比较éºÈƒ¦(ch¨³),廸™®®é‡‡ç”¨æ¯ä¸ª¾cÖM¸€ä¸ªæ–‡ä»¶çš„æ–ÒŽ(gu¨©)³•来组¾l‡æ˜ ž®„æ–‡æ¡?使用多个映射文äšg˜q˜æœ‰ä¸€ä¸ªä¼˜ç‚?如果ž®†æ‰€æœ‰æ˜ ž®„定义都存储åˆîC¸€ä¸ªæ–‡ä»¶ä¸­,ž®†éš¾ä»¥è°ƒè¯•和隔离特定¾cÈš„æ˜ å°„定义错误.<br /> 映射文äšg的命名规则是,使用持久化类的类å?òq¶ä‹É用扩展名hbm.xml.<br /> 映射文äšg需要在hibernate.cfg.xml中注å†?最好与领域对象¾cÀL”¾åœ¨åŒä¸€ç›®å½•ä¸?˜q™æ ·ä¿®æ”¹èµäh¥å¾ˆæ–¹ä¾?</p> <p><strong>领域对象和类</strong></p> <p>public class User{<br />   // ID<br />   private String id;<br />   <br />   // 名称<br />   private String name;<br />   <br />   // 密码<br />   private String password;<br />   <br />   // é‚®äšg<br />   private String email;<br />   <br />   // 上次ç™Õd½•æ—‰™—´<br />   private String lastLoginTime;<br />   <br />   // 上次ç™Õd½•ip<br />   private String lastLoginIp;</p> <p>  public User(String name,String password,String email){<br />     this.name=name;<br />     this.password=password;<br />     this.email=email;<br />   }<br /> }</p> <p><?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hibernate.auction"><br />   <class name="com.sitinspring.domain.User"<br />     table="USERTABLE_OKB" lazy="false"><br />     <id name="id" column="ID" ><br />       <generator class="uuid.hex"/><br />     </id><br />     <property name="name" column="name" /><br />     <property name="password" column="pswd" /><br />     <property name="email" column="email" /><br />     <property name="lastLoginTime" column="lastLoginTime" /><br />     <property name="lastLoginIp" column="lastLoginIp" /><br />   </class></hibernate-mapping></p> <p><strong>hibernate.cfg.xml中的映射文äšg讄¡½®</strong></p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br />     <!-- JNDI数据源设¾|?--><br />     <property name="connection.datasource"><br />       java:comp/env/jdbc/myoracle<br />     </property></p> <p>    <!-- SQL方言åQŒorg.hibernate.dialect.OracleDialect适合所有Oracle数据åº?--><br />     <property name="dialect"><br />       org.hibernate.dialect.OracleDialect<br />     </property></p> <p>    <!-- 昄¡¤ºSQL语句 --><br />     <property name="show_sql">true</property><br />     <br />     <!-- SQL语句整åÅž --><br />     <property name="format_sql">true</property><br />     <br />     <!-- å¯åŠ¨æ—¶åˆ›å»ø™¡¨.˜q™ä¸ªé€‰é¡¹åœ¨ç¬¬ä¸€‹Æ¡å¯åŠ¨ç¨‹åºæ—¶æ”‘Ö¼€,以后切记关闭 --><br />         <!-- <property name="hbm2ddl.auto">create</property>  --><br />             <br />     <!-- 持久化类的映ž®„æ–‡ä»?--><br />     <mapping resource="com/sitinspring/domain/User.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Article.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Record.hbm.xml" /><br />   </session-factory><br /> </hibernate-configuration></p> <p><strong>映射文äšg物理位置½CÞZ¾‹</strong></p> <p><strong>映射文äšg的基本结æž?/strong></p> <p>映射定义以hibernate-mapping元素开å§? package属性设¾|®æ˜ ž®„中非限定类名的默认åŒ?讄¡½®˜q™ä¸ªå±žæ€§åŽ,对于映射文äšg中列出的其它持久化类,只需¾l™å‡º¾cÕdå›_¯.要引用指定包外的持久化类,必须在映ž®„文件中提供全限定类å?<br /> 在hibernate-mapping标签之后是class标签.class标签开始指定持久化¾cÈš„æ˜ å°„定义.table属性指定用于存储对象状态的关系è¡?class元素有很多属æ€?下面ž®†é€ä¸ªä»‹ç».</p> <p><strong>ID</strong></p> <p>Id元素描述äº?ji¨£n)持久化¾cȝš„ä¸È ä»¥åŠ(qi¨¢ng)他们的值如何生æˆ?每个持久化类必须有一个ID元素,它声明了(ji¨£n)关系表的ä¸È .如右:<br /> Name属性指定了(ji¨£n)持久化类中用于保存ä(sh¨´)¸»ç å€¼çš„属æ€?该元素表æ˜?User¾cÖM¸­æœ‰ä¸€ä¸ªåä¸ºid的属æ€?如果ä¸È å­—段与对象属性不å?则可以ä‹É用column属æ€?</p> <p><id name="id" column="ID" ><br />         <generator class="uuid.hex"/><br /> </id></p> <p><br /> <strong>生成å™?/strong></p> <p>生成器创建持久化¾cȝš„ä¸È å€?Hibernate提供äº?ji¨£n)多个生成器实çŽ?它们采用äº?ji¨£n)不同的æ–Ò?gu¨©)³•来创å»ÞZ¸»ç å€?有的是自增长式的,有点创徏十六˜q›åˆ¶å­—符ä¸? ˜q˜å¯ä»¥è®©å¤–界生成òq¶æŒ‡å®šå¯¹è±¡ID,另外˜q˜æœ‰ä¸€¿USelect生成器你那个从数据库触发器trigger‹‚€(g¨¨)索值来获得ä¸È å€?<br /> 双™¾¹ä½¿ç”¨äº?ji¨£n)用一ä¸?28-bitçš„UUID½Ž—法生成字符串类型的标识½W¦ï¼Œ ˜q™åœ¨ä¸€ä¸ªç½‘¾lœä¸­æ˜¯å”¯ä¸€çš„(使用äº?ji¨£n)IP地址åQ‰ã€‚UUIDè¢«ç¼–ç äØ“(f¨´)一ä¸?2ä½?6˜q›åˆ¶æ•°å­—的字½W¦ä¸² .˜q™å¯¹å­—段¾cÕdž‹æ˜¯å­—½W¦ä¸²çš„id字段特别有效.UUIDä½œäØ“(f¨´)ID字段主键是非常合适的åQŒæ¯”自动生成的long¾cÕdž‹id方式要好ã€?/p> <p><strong>UUID½CÞZ¾‹<br /> </strong><id name="id" column="ID" ><br />         <generator class="uuid.hex"/><br /> </id></p> <p> </p> <p><strong>自动增长的id</strong><br /> <id name="id" column="ID" type="long"><br />           <generator class="native"/><br /> </id></p> <p><strong>属æ€?/strong></p> <p>在映ž®„定义中,property元素与持久化对象的一个属性对åº?name表示对象的属性名,column表示对应表中的列(字段),type属性指定了(ji¨£n)属性的对象¾cÕdž‹,如果type被忽略的è¯?Hibernatež®†ä‹É用运行阶ŒDµåž®„机制来判断¾cÕdž‹.</p> <p><property name="name" column="name" /><br /> <property name="password" column="pswd" /><br /> <property name="email" column="email" /><br /> <property name="lastLoginTime" column="lastLoginTime" /><br /> <property name="lastLoginIp" column="lastLoginIp" /></p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/197556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">和风¾l†é›¨</a> 2008-04-30 16:43 <a href="http://www.aygfsteel.com/junglesong/archive/2008/04/30/197556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的配¾|®æ–‡ä»?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197555.html</link><dc:creator>和风¾l†é›¨</dc:creator><author>和风¾l†é›¨</author><pubDate>Wed, 30 Apr 2008 08:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197555.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/197555.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/04/30/197555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/197555.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/197555.html</trackback:ping><description><![CDATA[<p><strong>获取Hibernate</strong></p> <p>在创建Hibernate™å¹ç›®ä¹‹å‰åQŒæˆ‘们需要从¾|‘站获得最新的Hibernate版本。Hibernate主页是www.hibernate.orgåQŒæ‰¾åˆ°å…¶èœå•中的download˜qžæŽ¥åQŒé€‰æ‹©æœ€æ–°çš„Hibernate版本卛_¯ã€‚下载后ž®†å…¶è§£å¼€åˆîC¸€ä¸ªç›®å½•中ã€?br /> 双™¾¹æ˜¯è§£å¼€åŽçš„主要目录。其中最重要的是hibernate.jaråQŒå®ƒåŒ…含全部框架代码åQ›lib目录åQŒåŒ…括Hibernate的所有依赖库åQ›doc目录åQŒåŒ…括JavDocs和参考文档ã€?/p> <p><strong>Hibernate的配¾|®æ–‡ä»?/strong></p> <p>Hibernate能够与从应用服务器(受控环境åQŒå¦‚TomcatåQŒW(xu¨¦)eblogicåQŒJBossåQ‰åˆ°ç‹¬ç«‹çš„应用程序(非受控环境,如独立应用程序)(j¨ª)的各¿UçŽ¯å¢ƒå’Œè°å·¥ä½œï¼Œ˜q™åœ¨ä¸€å®šç¨‹åº¦ä¸Šè¦å½’功于光™…¾|®æ–‡ä»¶hibernate.cfg.xmlåQŒé€šè¿‡ç‰¹å®šçš„设¾|®Hibernatež®Þpƒ½ä¸Žå„¿UçŽ¯å¢ƒé…åˆã€‚å³è¾ÒŽ(gu¨©)˜¯hibernate.cfg.xml的一个示例ã€?br /> 配置Hibernate的所有属性是一™å¹è‰°å·¨çš„ä»ÕdŠ¡åQŒä¸‹é¢å°†ä¾æ­¤ä»‹ç»Hibernate部çÖvž®†ç”¨åˆ°çš„基本配置ã€?/p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br />     <!-- JNDI数据源设¾|?--><br />     <property name="connection.datasource"><br />       java:comp/env/jdbc/myoracle<br />     </property></p> <p>    <!-- SQL方言åQŒorg.hibernate.dialect.OracleDialect适合所有Oracle数据åº?--><br />     <property name="dialect"><br />       org.hibernate.dialect.OracleDialect<br />     </property></p> <p>    <!-- 昄¡¤ºSQL语句 --><br />     <property name="show_sql">true</property><br />     <br />     <!-- SQL语句整åÅž --><br />     <property name="format_sql">true</property><br />     <br />     <!-- å¯åŠ¨æ—¶åˆ›å»ø™¡¨.˜q™ä¸ªé€‰é¡¹åœ¨ç¬¬ä¸€‹Æ¡å¯åŠ¨ç¨‹åºæ—¶æ”‘Ö¼€,以后切记关闭 --><br />         <!-- <property name="hbm2ddl.auto">create</property>  --><br />             <br />     <!-- 持久化类的配¾|®æ–‡ä»?--><br />     <mapping resource="com/sitinspring/domain/User.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Article.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Record.hbm.xml" /><br />   </session-factory><br /> </hibernate-configuration></p> <p><strong>使用Hibernate½Ž¡ç†çš„JDBC˜qžæŽ¥</strong></p> <p>双™¾¹é…ç½®æ–‡äšg中的Database connection settings 部分制定äº?ji¨£n)Hibernate½Ž¡ç†çš„JDBC˜qžæŽ¥åQ?˜q™åœ¨éžå—控环境如桌面应用½E‹åºä¸­å¾ˆå¸¸è§ã€?br /> å…¶ä¸­å„é¡¹å±žæ€§äØ“(f¨´)åQ?br /> connection.driver_classåQšç”¨äºŽç‰¹å®šæ•°æ®åº“çš„JDBC˜qžæŽ¥¾c?br /> connection.urlåQšæ•°æ®åº“çš„å®Œæ•´JDBC URL<br /> connection.usernameåQšç”¨äºŽè¿žæŽ¥åˆ°æ•°æ®åº“的用户å?br /> connection.passwordåQšç”¨æˆ·å¯†ç ?/p> <p>˜q™ç§æ–ÒŽ(gu¨©)¡ˆå¯ç”¨äºŽéžå—控环境和基本测试,但不宜在生äñ”环境中ä‹É用ã€?/p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration></p> <p>    <session-factory></p> <p>        <!-- Database connection settings --><br />         <property name="connection.driver_class">org.hsqldb.jdbcDriver</property><br />         <property name="connection.url">jdbc:hsqldb:hsql://localhost</property><br />         <property name="connection.username">sa</property><br />         <property name="connection.password"></property></p> <p>        <!-- JDBC connection pool (use the built-in) --><br />         <property name="connection.pool_size">1</property></p> <p>        <!-- SQL dialect --><br />         <property name="dialect">org.hibernate.dialect.HSQLDialect</property></p> <p>        <!-- Enable Hibernate's automatic session context management --><br />         <property name="current_session_context_class">thread</property></p> <p>        。。。。。。。ã€?/p> <p>    </session-factory></p> <p></hibernate-configuration></p> <p><strong>使用JNDI 数据æº?/strong></p> <p>在受控环境中åQŒæˆ‘们可以ä‹É用容器提供的数据源,˜q™å°†ä½¿æ•°æ®åº“讉K—®æ›´åŠ å¿«æ·åQŒå³è¾¹å°±æ˜¯ä‹É用Tomcat提供的数据源的配¾|®éƒ¨åˆ†ã€?/p> <p>附:(x¨¬)Server.Xml中的数据源设¾|?/p> <p><Context path="/MyTodoes" reloadable="true" docBase="E:\Program\Programs\MyTodoes" workDir="E:\Program\Programs\MyTodoes\work" ><br />  <Resource name="jdbc/myoracle" auth="Container"<br />           type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"<br />           url="jdbc:oracle:thin:@192.168.104.173:1521:orcl"<br />           username="hy" password="123456" maxActive="20" maxIdle="10"<br />           maxWait="-1"/> <br /> </Context></p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br />     <!-- JNDI数据源设¾|?--><br />     <property name="connection.datasource"><br />       java:comp/env/jdbc/myoracle<br />     </property></p> <p>    <!-- SQL方言åQŒorg.hibernate.dialect.OracleDialect适合所有Oracle数据åº?--><br />     <property name="dialect"><br />       org.hibernate.dialect.OracleDialect<br />     </property></p> <p><br /> </hibernate-configuration></p> <p><strong>数据库方­a€</strong></p> <p>Dialect属性能告知Hibernate执行特定的操作如分页旉™œ€è¦ä‹É用é‚£¿USQL方言åQŒå¦‚MySql的分™å‰|–¹æ¡ˆå’ŒOracle的大相径庭,如设¾|®é”™è¯¯æˆ–没有讄¡½®ä¸€å®šä¼š(x¨¬)坯D‡´é—®é¢˜ã€?/p> <p>附录åQšå¸¸è§çš„æ•°æ®åº“æ–¹­a€<br /> DB2 åQšorg.hibernate.dialect.DB2Dialect <br /> MySQL åQšorg.hibernate.dialect.MySQLDialect <br /> Oracle (any version) åQšorg.hibernate.dialect.OracleDialect <br /> Oracle 9i/10g åQšorg.hibernate.dialect.Oracle9Dialect <br /> Microsoft SQL Server åQšorg.hibernate.dialect.SQLServerDialect <br /> Sybase Anywhere åQšorg.hibernate.dialect.SybaseAnywhereDialect </p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br />     <!-- JNDI数据源设¾|?--><br />     <property name="connection.datasource"><br />       java:comp/env/jdbc/myoracle<br />     </property></p> <p>    <!-- SQL方言åQŒorg.hibernate.dialect.OracleDialect适合所有Oracle数据åº?--><br />     <property name="dialect"><br />       org.hibernate.dialect.OracleDialect<br />     </property></p> <p>    <!-- 昄¡¤ºSQL语句 --><br />     <property name="show_sql">true</property><br />     <br />     <!-- SQL语句整åÅž --><br />     <property name="format_sql">true</property><br />     <br /> </hibernate-configuration></p> <p><strong>其它属æ€?/strong></p> <p>show_sqlåQšå®ƒå¯ä»¥åœ¨ç¨‹åºè¿è¡Œè¿‡½E‹ä¸­æ˜„¡¤ºå‡ºçœŸæ­£æ‰§è¡Œçš„SQLè¯­å¥æ¥ï¼Œå»ø™®®ž®†è¿™ä¸ªå±žæ€§å§‹¾lˆæ‰“å¼€åQŒå®ƒ?y¨­u)®†æœ‰ç›ŠäºŽé”™è¯¯è¯Šæ–­ã€?/p> <p>format_sqlåQšå°†˜q™ä¸ªå±žæ€§è®¾¾|®äØ“(f¨´)true能将输出的SQL语句整理成规范的形状åQŒæ›´æ–¹ä¾¿ç”¨äºŽæŸ¥çœ‹SQL语句ã€?/p> <p>hbm2ddl.autoåQšå°†å…¶è®¾¾|®äØ“(f¨´)create能在½E‹åºå¯åŠ¨æ˜¯æ ¹æ®ç±»æ˜ å°„æ–‡äšgçš„å®šä¹‰åˆ›å»ºå®žä½“å¯¹è±¡å¯¹åº”çš„è¡¨ï¼Œè€Œä¸éœ€è¦æ‰‹åŠ¨åŽ»å»ø™¡¨åQŒè¿™åœ¨ç¨‹åºåˆ‹Æ¡å®‰è£…时很方ä¾Ñ€?br /> 如果表已¾låˆ›å»ºåƈ有数据,切记关闭˜q™ä¸ªå±žæ€§ï¼Œå¦åˆ™åœ¨åˆ›å»ø™¡¨æ—¶ä¹Ÿä¼?x¨¬)清除掉原有的数据,˜q™ä¹Ÿè®æ€¼š(x¨¬)坯D‡´å¾ˆä¸¥é‡çš„后果ã€?br /> 从后果可能带来的影响来考虑åQŒåœ¨ç”¨æˆ·å¤„安装完一‹Æ¡åŽž®±åº”该删除掉˜q™ä¸ªèŠ‚ç‚¹</p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br /> 。。。。。ã€?/p> <p>    <!-- 昄¡¤ºSQL语句 --><br />     <property name="show_sql">true</property><br />     <br />     <!-- SQL语句整åÅž --><br />     <property name="format_sql">true</property><br />     <br />     <!-- å¯åŠ¨æ—¶åˆ›å»ø™¡¨.˜q™ä¸ªé€‰é¡¹åœ¨ç¬¬ä¸€‹Æ¡å¯åŠ¨ç¨‹åºæ—¶æ”‘Ö¼€,以后切记关闭 --><br />         <!-- <property name="hbm2ddl.auto">create</property>  --><br />             <br /> 。。。。。ã€?br /> </hibernate-configuration></p> <p><strong>映射定义</strong></p> <p>在hibernate.cfg.xml中,˜q˜æœ‰ä¸€ä¸ªé‡è¦éƒ¨åˆ†å°±æ˜¯æ˜ ž®„定义,˜q™äº›æ–‡äšg用于向Hibernate提供关于ž®†å¯¹è±¡æŒä¹…化到关¾pÀL•°æ®åº“的信息ã€?br /> 一般来è¯ß_(d¨¢)¼Œé¢†åŸŸå±‚有一个领域对象就有一个映ž®„æ–‡ä»Óž¼Œå»ø™®®ž®†å®ƒä»¬æ”¾åœ¨åŒä¸€ç›®å½•åQˆdomainåQ‰ä¸‹ä»¥ä¾¿æŸ¥é˜…和修改,映射文äšg的命名规则是åQšæŒä¹…åŒ–¾cȝš„¾cÕd+.hbm.xml</p> <p><?xml version='1.0' encoding='utf-8'?><br /> <!DOCTYPE hibernate-configuration PUBLIC<br />         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></p> <p><hibernate-configuration><br />   <session-factory name="java:comp/env/hibernate/SessionFactory"><br />     <!-- JNDI数据源设¾|?--><br />     <property name="connection.datasource"><br />       java:comp/env/jdbc/myoracle<br />     </property></p> <p>。。。。。ã€?br />             <br />     <!-- 持久化类的配¾|®æ–‡ä»?--><br />     <mapping resource="com/sitinspring/domain/User.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Article.hbm.xml" /><br />     <mapping resource="com/sitinspring/domain/Record.hbm.xml" /><br />   </session-factory><br /> </hibernate-configuration><br /> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/197555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">和风¾l†é›¨</a> 2008-04-30 16:40 <a href="http://www.aygfsteel.com/junglesong/archive/2008/04/30/197555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate概述http://www.aygfsteel.com/junglesong/archive/2008/04/30/197552.html和风¾l†é›¨å’Œé£Ž¾l†é›¨Wed, 30 Apr 2008 08:35:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197552.htmlhttp://www.aygfsteel.com/junglesong/comments/197552.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/04/30/197552.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/197552.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/197552.html 

本文假定读者已¾lç†ŸçŸ¥ä»¥ä¸‹çŸ¥è¯?/p>

能够熟练使用JDBC创徏Java应用½E‹åºåQ?br /> 创徏˜q‡ä»¥æ•°æ®åº“䨓(f¨´)中心(j¨©)的应ç”?br /> 理解基本的关¾pȝ†è®ºå’Œ¾l“构化查询语­a€SQL åQˆStrutured Query LanguageåQ?/p>

Hibernate

Hibernate是一个用于开发Java应用的对è±?å…³ç³»æ˜ å°„æ¡†æž¶ã€‚å®ƒé€šè¿‡åœ¨æ•°æ®åº“ä¸­äØ“(f¨´)开发äh员存储应用对象,在数据库和应用之间提供了(ji¨£n)一座桥梁,开发äh员ä(sh¨´)¸å¿…编写大量的代码来存储和‹‚€(g¨¨)索对象,省下来的¾_‘ÖŠ›æ›´å¤šçš„æ”¾åœ¨é—®é¢˜æœ¬íw«ä¸Šã€?/p>

持久化与关系数据�/strong>

持久化的常见定义åQšä‹É数据的存?g¨°u)zÀL—¶é—´è¶…˜q‡åˆ›å»ø™¯¥æ•°æ®çš„è¿›½E‹çš„存活旉™—´ã€‚数据持久化后可以重新获得它åQ›å¦‚果外界进½E‹æ²¡æœ‰ä¿®æ”¹å®ƒåQŒå®ƒ?y¨­u)®†ä¸ŽæŒä¹…化之前相同。对于一般应用来è¯ß_(d¨¢)¼ŒæŒä¹…化指的是ž®†æ•°æ®å­˜å‚¨åœ¨å…³ç³»æ•°æ®åº“中ã€?br /> 关系数据库是为管理数据而设计的åQŒå®ƒåœ¨å­˜å‚¨æ•°æ®æ–¹é¢å¾ˆ‹¹è¡ŒåQŒè¿™ä¸»è¦å½’功于易于ä‹É用SQL来创建和讉K—®ã€?br /> 关系数据库ä‹É用的模型被称为关¾pÀL¨¡åž‹ï¼Œå®ƒä‹É用二¾l´è¡¨æ¥è¡¨½Cºæ•°æ®ã€‚è¿™¿Uæ•°æ®é€»è¾‘视图表示äº?ji¨£n)用户如何看待包含的数据。表可以通过ä¸È å’Œå¤–码相互关联。主码唯一的标识了(ji¨£n)表中的一行,而外码是另一个表中的ä¸È ã€?/p>

对象/关系é˜ÀLŠ—ä¸åŒ¹é…?/strong>

关系数据库是为管理数据设计的åQŒå®ƒé€‚合于管理数据。然而,在面向对象的应用中,ž®†å¯¹è±¡æŒä¹…化为关¾pÀL¨¡åž‹å¯èƒ½ä¼š(x¨¬)遇到问题。这个问题的æ ÒŽ(gu¨©)ºæ˜¯å› ä¸ºå…³¾pÀL•°æ®åº“½Ž¡ç†æ•°æ®åQŒè€Œé¢å‘å¯¹è±¡çš„åº”ç”¨æ˜¯äØ“(f¨´)业务问题建模而设计的。由于这两种目的不同åQŒè¦ä½¿è¿™ä¸¤ä¸ªæ¨¡åž‹ååŒå·¥ä½œå¯èƒ½å…ähœ‰æŒ?xi¨§)战性。这个问题被¿UîCØ“(f¨´) 对象/关系é˜ÀLŠ—ä¸åŒ¹é…ï¼ˆObject/relational impedance mismatchåQ‰æˆ–½Ž€¿UîCØ“(f¨´)é˜ÀLŠ—ä¸åŒ¹é…?/p>

é˜ÀLŠ—ä¸åŒ¹é…çš„å‡ ä¸ªå…¸åž‹æ–šw¢

在应用中è½ÀL˜“实现的对象相同或相等åQŒè¿™æ ïL(f¨¥ng)š„关系在关¾pÀL•°æ®åº“中不存在ã€?br /> 在面向对象语­a€çš„一™åÒŽ(gu¨©) ¸å¿?j¨©)特性是¾l§æ‰¿åQŒç‘ô承很重要åQŒå› ä¸ºå®ƒå…è®¸åˆ›å¾é—®é¢˜çš„ç²¾¼‹®æ¨¡åž‹ï¼ŒåŒæ—¶å¯ä»¥åœ¨å±‚‹Æ¡ç»“æž„ä¸­è‡ªä¸Šè€Œä¸‹çš„å…±äº«å±žæ€§å’Œè¡ŒäØ“(f¨´)。而关¾pÀL•°æ®åº“不支持ç‘ô承的概念ã€?br /> 对象之间可以è½ÀL˜“的实çŽîC¸€å¯¹ä¸€åQŒä¸€å¯¹å¤šå’Œå¤šå¯¹å¤šçš„关联关¾p»ï¼Œè€Œæ•°æ®åº“òq¶ä¸ç†è§£˜q™äº›åQŒå®ƒåªçŸ¥é“外码指向主码ã€?/p>

对象/关系映射

前页列ä‹Däº?ji¨£n)一些阻抗不匚w…çš„问题,当然开发äh员是可以解决˜q™äº›é—®é¢˜åQŒä½†˜q™ä¸€˜q‡ç¨‹òq¶ä¸å®ÒŽ(gu¨©)˜“。对è±?关系映射åQˆObject/Relational MappingåQ‰å°±æ˜¯äØ“(f¨´)解决˜q™äº›é—®é¢˜è€Œå¼€å‘çš„ã€?br /> ORM在对象模型和关系模型之间架è“väº?ji¨£n)一座桥梁,让应用能够直接持久化对象åQŒè€Œä¸è¦æ±‚在对象和关系之间˜q›è¡Œè½¬æ¢ã€‚Hibernatež®±æ˜¯ORM工具中最成功的一¿Uã€‚它的主要优ç‚ÒŽ(gu¨©)˜¯½Ž€å•,灉|´»åQŒåŠŸèƒ½å®Œå¤‡å’Œé«˜æ•ˆã€?/p>

Hibernate的优点之一åQšç®€å?/strong>

Hibernate不像有些持久化方案那样需要很多的¾cÕd’Œé…ç½®å±žæ€§ï¼Œå®ƒåªéœ€è¦ä¸€ä¸ªè¿è¡Œé˜¶ŒDµé…¾|®æ–‡ä»¶å·²¾läØ“(f¨´)每个要持久化的应用对象指定一个XML格式的映ž®„文件ã€?br /> 映射文äšg可以很短åQŒè®©æ¡†æž¶å†›_®šæ˜ å°„的其它内容,也可以通过制定额外的属性,如属性的可选列名,向框架提供更多信息。如叛_°±æ˜¯ä¸€ä¸ªæ˜ ž®„文档的½CÞZ¾‹ã€?/p>

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.auction">
  <class name="com.sitinspring.domain.User"
    table="USERTABLE_OKB" lazy="false">
    <id name="id" column="ID" >
      <generator class="uuid.hex"/>
    </id>
    <property name="name" column="name" />
    <property name="password" column="pswd" />
    <property name="email" column="email" />
    <property name="lastLoginTime" column="lastLoginTime" />
    <property name="lastLoginIp" column="lastLoginIp" />
  </class>
</hibernate-mapping>

Hibernate的优点之二:(x¨¬)功能完备

Hibernate支持所有的面向对象ç‰ÒŽ(gu¨©)€§ï¼ŒåŒ…括¾l§æ‰¿åQŒè‡ªå®šä¹‰å¯¹è±¡¾cÕdž‹å’Œé›†åˆã€‚它可以让你创徏模型时不必考虑持久层的局限性ã€?br /> Hibernate提供äº?ji¨£n)一个名为HQL的查询语­a€åQŒå®ƒä¸ŽSQLéžå¸¸ç›æ€¼¼åQŒåªæ˜¯ç”¨å¯¹è±¡å±žæ€§åä»£æ›¿äº?ji¨£n)表的列。很多通过SQL实现的常用功能都能用HQL实现ã€?/p>

Hibernate的优点之三:(x¨¬)高效

Hibernate使用懒惰加蝲提高?sh¨´)º†(ji¨£n)性能åQŒåœ¨Hibernateòq¶ä¸åœ¨åŠ è½½çˆ¶å¯¹è±¡æ—¶å°±åŠ è²å¯¹è±¡é›†åˆåQŒè€Œåªåœ¨åº”用需要访问时才生成。这ž®±é¿å…äº†(ji¨£n)‹‚€(g¨¨)索不必要的对象而媄(ji¨£ng)响性能ã€?br /> Hibernate允许‹‚€(g¨¨)索主对象旉™€‰æ‹©æ€§çš„¼›æ­¢‹‚€(g¨¨)索关联的对象åQŒè¿™ä¹Ÿæ˜¯ä¸€™åÒŽ(gu¨©)”¹å–„性能的特性ã€?br /> 对象¾~“存在提高应用性能斚w¢ä¹Ÿå‘挥了(ji¨£n)很大的作用。Hibernate支持各种开源和¾~“å­˜?sh¨´)º§å“åQŒå¯ä¸ºæŒä¹…化¾cÀLˆ–持久化对象集合启用缓存ã€?/p>

æ€È»“

在同一性,¾l§æ‰¿å’Œå…³è”三斚w¢åQŒå¯¹è±¡æ¨¡åž‹å’Œå…³ç³»æ¨¡åž‹å­˜åœ¨ç€é˜ÀLŠ—ä¸åŒ¹é…ï¼Œ˜q™æ˜¯ä¼—多ORM框架致力解决的问题,hibernate是这些方案中最成功的一个,它的主要优点是简单,灉|´»åQŒåŠŸèƒ½å®Œå¤‡å’Œé«˜æ•ˆã€?br /> 使用Hibernate不要求领域对象实现特别的接口或ä‹É用应用服务器åQŒå®ƒæ”¯æŒé›†åˆåQŒç‘ô承,自定义数据类型,òq¶æºå¸¦ä¸€¿Uå¼ºå¤§çš„æŸ¥è¯¢è¯­è¨€HQLåQŒèƒ½å‡å°‘很多持久化方面的工作量,使程序员能把更多¾_‘ÖŠ›è½¬ç§»åˆ°é—®é¢˜æœ¬íw«ä¸Šæ¥ã€?/p>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ³¤ÐËÏØ| ¹Ê³ÇÏØ| ÉÏÈÄÏØ| Àû½òÏØ| ·ïɽÊÐ| èëµéÊÐ| Áø½­ÏØ| ÇåË®ÏØ| ĵµ¤½­ÊÐ| ¸®¹ÈÏØ| ×ñ»¯ÊÐ| ÓñÁÖÊÐ| Áø½­ÏØ| ÁÖÖÝÊÐ| Çíº£ÊÐ| äÀ´¨ÏØ| ÎâÆìÏØ| ÐÂÀÖÊÐ| ¿­ÀïÊÐ| ×ÊÔ´ÏØ| ÒÁ´ºÊÐ| ͳ·¬ÊÐ| ¿Ëʲ¿ËÌÚÆì| º£ÑôÊÐ| ͨÖÝÊÐ| Ïã¸ñÀïÀ­ÏØ| Ë«Á÷ÏØ| ͨÓÜÏØ| °²ÈûÏØ| ¾©É½ÏØ| ÕýÀ¶Æì| À×ÖÝÊÐ| ¹ãÁéÏØ| ¾°µÂÕòÊÐ| ÑŽ­ÏØ| ̨±±ÏØ| ÎÚº£ÊÐ| ÏæÌ¶ÊÐ| ²èÁêÏØ| ÄÏ´¨ÊÐ| ÄÇÇúÏØ|