使用Hibernate 串連SQL Server 2000
來源:互聯網
上載者:User
server
以下代碼在 JDK 5.0, Hibernate 2.1, SQL Server 2000 SP3 中測試通過。
第一次使用Hibernate作持久層,感覺使用起來還是比較複雜的,尤其是調試起來很不方便。Hibernate 基於反射的機制雖然很靈活,但明顯給跟蹤代碼製造了障礙,給出的異常資訊量也太少。個人感覺其改進的餘地還很大,比如Java新增加了Annotation文法後,是否可使用它來定義ORM,而取代hbm.xml的形式。
好了,進入正題。
首先,必須設定資料庫,下面以在資料庫yufan中的操作為例。
CREATE TABLE CUSTOMER(CID INTEGER NOT NULL PRIMARY KEY, USERNAME VARCHAR(12) NOT NULL, PASSWORD VARCHAR(12));
然後是一個資料對象,必須為它的每個欄位提供讀寫屬性方法,Hibernate 會用反射來檢索。
// Customer.java
public class Customer {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
然後是Hibernate的映射Customer.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="Customer" table="Customer" proxy="Customer">
<id name="id" column="CID">
<generator class="increment"/>
</id>
<property name="username" column="USERNAME" />
<property name="password" column="PASSWORD" />
</class>
</hibernate-mapping>
類和映射結合在一起,定義了ORM。
下面是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 name="java:/hibernate/HibernateFactory">
<property name="show_sql">true</property>
<property name="connection.driver_class">
com.jnetdirect.jsql.JSQLDriver
</property>
<property name="connection.url">
jdbc:JSQLConnect://localhost:1433;database=yufan;
</property>
<property name="connection.username">
sa
</property>
<property name="connection.password">
yufan
</property>
<property name="dialect">
net.sf.hibernate.dialect.SQLServerDialect
</property>
<mapping resource="Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
重要的property包括connection.driver_class,指定JDBC資料庫驅動。connection.url 制定資料庫的Url。我使用的是JSQLDriver,功能上比MS 的 JDBC 驅動強大。但必須注意的是,在指定資料庫的時候,必須使用database= 或 databaseName=的文法,而DatabaseName則會出錯。MS的驅動則無此問題。我剛遇到此問題時真是茫然無緒。。。最後發現是如此。。。
在這個檔案中,不能使用XML注釋,感覺是Hibernate的缺陷。
最後是Test.java
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class Test {
public static void main(String[] args) {
try {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i < 20; i++) {
Customer customer = new Customer();
customer.setUsername("customer" + i);
customer.setPassword("customer");
session.save(customer);
}
tx.commit();
session.close();
}
catch (HibernateException e) {
e.printStackTrace();
}
}
}
好了,在項目中添加對Hibernate庫檔案的引用,編譯執行,你會在資料庫中找到新添加的記錄。
代碼部分取自史上最簡單的Hibernate入門簡介by watano_cc,根據SQL Server改動。