1. 用例
培训使用一个简单用例说明JDO各个功能,用例包括两个表单,分别为:EMAP_User、EMAP_Post。这两个表单分别为用户表以及论坛发帖表。
EMAP_User表单明细如下:
列名
数据类型(精度范围)
描述
UserId
Varchar2(38)
用户ID。主键。
LoginName
Varchar2(255)
登录名称。
Password
Varchar2(255)
密码。
Nick
Varchar2(255)
用户昵称。
EMAP_Post表单明细如下:
列名
数据类型(精度范围)
描述
PostId
Number(38)
帖子ID。主键。
Title
Varchar2(255)
用户姓名。
Content
Varchar2(4000)
用户年龄。
这两个表单对应的两个类分别为:User、Post。两个类关系如下:
0…*
1
User
userId:String
loginName:String
password:String
nick:String
posts:Set
Post
postId:Long
title:String
content:String
owner:User
2. Hibernate
2.1. 快速入门
产品主页:http://www.hibernate.org/。可以从该连接得到最新的软件包以及开发资料。
最新版本:2.1.2(推荐版本)
支持数据源包括:HypersonicSQL、PostgreSQL、DB2、MySQL、Oracle、Sybase、Mckoi SQL、SAP DB、MS SQL Server、JSQL Driver、JTURBO Driver、WebLogic Driver、纯Java驱动程序。
2.2. 使用指南
1、 准备工作:下载Hibernate2.1.2版本。并配置Classpath,是工程文件可以访问。
2、 将Hibernate中的配置文件hibernate.properties复制到应用程序的Default包里。修改此配置文件,选择相应的数据源配置。在本报告中,选择MySQL数据库配置。
3、 编写Java类,类包含每个变量的getter和setter函数以及辅助函数equals等。
4、 编写Java类的映射配置文件:类名.hbm.xml。映射的规则全在其中定义。
5、 配置文件介绍:
<hibernate-mapping>为根节点。
根节点下一个节点是<class>,最简单的情况下,<class>节点必须有name和table两个属性,前者描述对象所属的类,后者描述映射到的数据表:
<class name="com.mdao.test.hibernate.User" table="USER"
…
class>
对象的属性分为主键类和非主键类。主键类属性使用<id>标示,并且需要填写<generator>,即生成主键的方式,共有四种:Hi/Low、UUID、Identity、Assigned。非主键类属性使用<property>等标示。
6、 客户端程序典型应用:
Configuration cfg = new Configuration().addClass(User.class).addClass(Post.class);
SessionFactory sessions = cfg.buildSessionFactory();
new SchemaExport(cfg).create(true, true);
Session session = sessions.openSession();
User user = new User("Gigix");
user.setPassword("password");
Post post = new Post();
post.setTitle("Test");
post.setContent("Only for Test");
user.getPosts().add(post);
session.save(user);
session.flush();
session.close();
session = sessions.openSession();
Query q = session.createQuery("from Post as post where post.title = 'test'");
post = (Post) q.list().get(0);
System.out.println(post.getOwner().getPassword());
post.getOwner().setPassword("xiongjie@csdn.net");
session.update(post);
System.out.println(post.getOwner().getPassword());
session.flush();
session.close();
7、 对象与对象之间的关系包括:一对一、一对多、多对一、多对多。
一对多情况:
<set name="posts"
lazy="true"
inverse="false"
cascade="all"
sort="unsorted"
order-by="POST_ID">
<key column="OWNER_ID"/>
<one-to-many class="com.mdao.test.hibernate.Post"/>
</set>
多对一情况:
<many-to-one
name="owner"
class="com.mdao.test.hibernate.User"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="OWNER_ID" />
2.3. 简单用例
参考源码,略。
3. 开发资源
http://www.hibernate.org.cn:8000/
http://www.jdocentral.com/