日期:2013-07-28  浏览次数:20536 次

三、现有的O/R Mapping产品介绍

O/R Mapping已经出现很久了, 产品很多:Java方面的有Hibernate、jdo等。.Net的有ObjectSpaces、Grove.Net、OJB.Net、AtomsFramework、Objectz.Net、OPF.Net等。



1、Hibernate

Hibernate是一个java开放源代码的O/R Mapping,它对JDBC进行了轻量级的对象封装,可以非常灵活的用对象编程思维来操纵数据库。现在以一个简单的demo看下Hibernate是怎样使用的:



首先Hibernate需要一个hibernate.cfg.xml配置文件

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

<session-factory>

<!-数据库的配置 -->

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/quickstart </property>

<property name="hibernate.connection.username">dbusername</property>

<property name="hibernate.connection.password">dbpassword</property>

<property name="hibernate.connection.pool.size">30</property>

<property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!-持久化类映射的XML文件名 -->

<Mapping resource=" ormappingdemo.hibernate.Customer.xml"/>

</session-factory>

</hibernate-configuration>





一个需要持久化类的表:Customer

CREATE TABLE dbo.Customer (

customerID int,

CustomerName varchar(100) NULL,

)





在Hibernate需要定义一个Customer.xml映射文件

<?xml version="1.0"?>

<!DOCTYPE hibernate-Mapping

PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

"http://hibernate.sourceforge.net/hibernate-Mapping-2.0.dtd">



<hibernate-Mapping>



<!-定义持久化类的类名和所映射的表名 -->

<class name="ormappingdemo.hibernate.Customer" table="Customer">



<!-定义主键 -->

<id name="customerID" type="int" unsaved-value="null" >

<column name="customerID " sql-type="int" not-null="true"/>



<!-主键的生成规则,"increment"表示该主键是自递增,hibernate有10多种的主键生成方法-->

<generator class="increment">

</generator>

</id>

<!-定义类的属性 -->

<property name="Name">

<!-所映射的字段,这里可以看出表的字段名可以跟类属性名完全不同 -->

<column name="CustomerName" sql-type="varchar(100)" not-null="true"/>

</property>

</class>

</hibernate-Mapping>





Customer.xml里面定义了很多类的属性和表的字段的详细信息,如果有变动的,只需要更改这个xml文件就行。Hibernate定义mapping比较灵活, property也可以不定义property里面的内容,用缺省的形式。

除了这个xml文件,还要有一个持久化类:Customer

package ormappingdemo.hibernate;



public class Customer {



private int customerID;

private String name;



public Customer() {

}

//全部的属性都要通过get、set方法来访问

public int getCustomerID() {

return customerID;

}



public void setCustomerID(int customerID) {

this.customerID = customerID;

}



public String getName() {

return name;

}



public void setName(String name) {

this.name = nam