随笔 - 303  文章 - 883  trackbacks - 0
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

Hibernate Quickly英文版下载


Hibernate Quickly

--读书笔记

 


        上个笔记介绍了配置文件的简要介绍,本想这个文来探讨一下实例,但经过思考之后,还是要再澄清一些知识点。这里我们主要了解什么是Session和Sessionfactory,再拿上次的图出来:、

 

好了,继续解释这个图先:

这个图是hibernate给我们这些开发人员的全貌图,
下面的三个配置文件负责hibernate服务的基本配置。通过对这些文件的配置实现数据库的访问和数据库内部关系与程序间的协调;从而实现数据库的智能化操作,提高效率和数据安全性。
例子:
hibernate.cfg.xml(jdbc)
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd"
>
<hibernate-configuration>
<!--定义Sessionfactory-->
<session-factory>
<!--要连接的数据库帐号和密码-->
<property name="connection.username">uid</property>
<property name="connection.password">pwd</property>
<!--数据库路径-->
<property name="connection.url">
jdbc:mysql://localhost/db
</property>
<!--加载驱动-->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--影射到的数据库中的表-->
<!--这里我们的每个表用一个影射文件表示-->
<!--这里总共有四个表,我们会在这些影射文件中记录一些必要的信息-->
<mapping resource="com/manning/hq/ch03/Event.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Location.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Attendee.hbm.xml"/>
</session-factory>
</hibernate-configuration>

另一中数据库连接方式,比较少见,贴给大家看看

hibernate.cfg.xml(JNDI)
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd"
>
<hibernate-configuration>
<session-factory
name="java:comp/env/hibernate/SessionFactory">
<property name="connection.datasource">
jdbc/myDataSource
</property>
<!--dialect属性告诉Hibernate使用什么sql方言-->
<!--不同的数据库使用的sql会有所不同-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<mapping resource="com/manning/hq/ch03/Event.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Location.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Speaker.hbm.xml"/>
<mapping resource="com/manning/hq/ch03/Attendee.hbm.xml"/>
</session-factory>
</hibernate-configuration>


影射文件:

Event.hbm.xml

<?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="com.manning.hq.ch03">
<!--为改类取名,并声明它所对应的表-->
<class name="Event" table="events">
<!--定义内部的数据字段属性-->
<id name="id" column="uid" type="long" unsavedvalue="null">
<generator class="native"/>
</id>
<property name="name" type="string" length="100"/>
<property name="startDate" column="start_date"
type
="date"/>
<property name="duration" type="integer"/>
<!--定义多对一的表关系-->
<many-to-one name="location" column="location_id"
class
="Location"/>
<set name="speakers">
<key column="event_id"/>
<!--定义一对多的表关系-->
<one-to-many class="Speaker"/>
</set>
<set name="attendees">
<key column="event_id"/>
<!--定义一对多的表关系-->
<one-to-many class="Attendee"/>
</set>
</class>
</hibernate-mapping>

这里我们发,对于表间的关系,只定义于多个影射文件中的一个,其他的只定义自己的基本字段属性;
这样做不但简单,而且便于管理。

Location.hbm.xml

<?xml version="1.0"?>
<hibernate-mapping package="com.manning.hq.ch03">
<class name="Location" table="locations">
<!--定义locations表中的字段属性-->
<id name="id" column="uid" type="long">
<generator class="native"/>
</id>
<property name="name" type="string"/>
<property name="address" type="string"/>
</class>
</hibernate-mapping>

接下来看看图中的sessionfactory和session怎么使用

//创建一个Configuration实例
Configuration cfg = new Configuration();
//创建一个SessionFactory实例
SessionFactory factory = cfg.buildSessionFactory();
//实例化表对象,这与前面影射文件是对应的
Event event = new Event();
//通过SessionFactory实例创建我
//们的编程接口session
Session session = factory.openSession();
//执行HQL语句,改语句会自动判定目前的情况下是
//执行sare(event)还是Update(event)
session.saveOrUpdate(event);
//刷新session缓存,将updata数据写入数据库
session.flush();
//关闭该session对象
session.close();

不早了,睡觉觉去了,先写到这里了,本想给大家个code example直接搞定,可惜hibernate实在是有点复杂有些问题不讲清就会似懂不懂,实在是违背我的本意;

下个文章,将学习session的缓存技术,建议大家找这本书先看看,上面给了个英文版的下载地址。

不明之处,还请留言;


地震让大伙知道:居安思危,才是生存之道。
posted on 2007-04-05 23:27 小寻 阅读(321) 评论(2)  编辑  收藏 所属分类: j2se/j2ee/j2me

FeedBack:
# re: Hibernate Quickly--读书笔记(2) 2007-04-27 18:45 Aliang
问一下,你有这本书的代码么?有的话麻烦发一个
brinews@126.com

先谢了  回复  更多评论
  
# re: Hibernate Quickly--读书笔记(2) 2007-04-29 11:46 幻想~@@~
哦你好 谢谢你的支持!!

     《Hibernate Quickly》
源代码,网上找不到
但我提供一个方法:你可以装Adobe Reader
用它打开上面下载的的电子书,然后你就可以
使用里面提供的文本选择工具选取自己想要的代码,
并将它复制下来使用,改方法我试过可行!
 
祝你学习愉快~~~
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: