新項目像使用JDO來避免以后數(shù)據(jù)庫移植帶來的不必要的工作量~其實一直不明白使用Hibernate就好了~也比較穩(wěn)定也比較成熟了。用戶也多~干嗎非要用一個以前沒有用過的乜~不過既然領(lǐng)導(dǎo)這么定了。那咱也就只能執(zhí)行。于是開始了JDO之旅。不過話說在剛剛配置的時候確實是糾結(jié)了好久。網(wǎng)上到處尋找都沒有確切的答案~不過好在最后是解決了。于是馬上記錄下來方便自己也方便一下大家~~~。
APACHE JDO網(wǎng)址:http://db.apache.org/jdo/ (其實大部分問題都是官網(wǎng)上解決的。雖然公開始覺得的寫的比較粗糙~但后來發(fā)現(xiàn)其實人家寫的很清楚。只是不習(xí)慣老外很多闡述東西的方式所以忽略了很多關(guān)鍵點。)
JDO下載地址:http://db.apache.org/jdo/downloads.html (咱用的是jdo2-api-2.3-ea.jar)也就是JDO 2.3 "Early Access"這個版本。后來發(fā)現(xiàn)有jdo2-api-2.3-eb.jar了但是沒有敢使用。還是保守著來吧。
JDO的具體執(zhí)行第三方有很多。同樣選擇了目前一直保持更新對數(shù)據(jù)庫支持比較全面的DataNucleus Access Platform。
DataNucleus Access Platform官網(wǎng)地址:http://www.datanucleus.org/
下載地址:http://sourceforge.net/projects/datanucleus/files/ (eclipse插件也在此。)
這里我使用的是datanucleus-core-1.1.0.jar,datanucleus-enhancer-1.1.0.jar,datanucleus-rdbms-1.1.0.jar(關(guān)系型數(shù)據(jù)庫的。db4o等其他的需要下載相應(yīng)其他的jar包)。eclipse的插件版本為:org.datanucleus.ide.eclipse_1.0.0.final.zip。直接解壓到eclipse的plugins目錄下然后重啟eclipse即可。如何配置后邊說。
其實這時候datanucleus已經(jīng)有了2.0.0。但是jdo官網(wǎng)寫的是jdo2.3對應(yīng)datanucleus1.1。于是為了避免彎路就使用了1.1版本。
datanucleus1.1的用戶指南:http://www.datanucleus.org/products/accessplatform_1_1/guides/jdo/tutorial.html
根據(jù)用戶指南一步一步來。
第一步:創(chuàng)建你自己的數(shù)據(jù)模型類。其實就是普通的一個bean。
package com.study.jdo;
public class Product {
String name = null;
String description = null;
double price = 0.0;
protected Product(){}
public Product(String name, String desc, double price){
this.name = name;
this.description = desc;
this.price = price;
}
}
package com.study.jdo;
public class Book extends Product{
String author=null;
String isbn=null;
String publisher=null;
public Book(String name, String desc, double price, String author, String isbn, String publisher){
super(name,desc,price);
this.author = author;
this.isbn = isbn;
this.publisher = publisher;
}
}
然后第二步:定義你的持久類
這部其實就是為你的bean來創(chuàng)建一個.orm的xml文件來進行映射。
<?xml version="1.0"?>
<!DOCTYPE orm PUBLIC
"-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
"http://java.sun.com/dtd/orm_2_0.dtd">
<orm>
<package name="com.study.jdo">
<class name="Product" identity-type="datastore">
<inheritance strategy="new-table"/>
<field name="name">
<column length="100" jdbc-type="VARCHAR"/>
</field>
<field name="description">
<column length="255" jdbc-type="VARCHAR"/>
</field>
</class>
<class name="Book" identity-type="datastore">
<inheritance strategy="new-table"/>
<field name="isbn">
<column length="20" jdbc-type="VARCHAR"/>
</field>
<field name="author">
<column length="40" jdbc-type="VARCHAR"/>
</field>
<field name="publisher">
<column length="40" jdbc-type="VARCHAR"/>
</field>
</class>
</package>
</orm>
但其實后來這部我是由插件來代勞的。于是這里沒有仔細研究。
第三步:類增強
這步感覺比較重要。就是在你的bean所在的package里創(chuàng)建一個package.jdo來對你定義的bean進行類增強。
當(dāng)然這步也可以由插件代勞。不過我最開始是手寫的。結(jié)果就出現(xiàn)問題了。導(dǎo)致程序運行的時候總是會出現(xiàn)一個糾結(jié)的ClassNotPersistenceCapableException錯誤異常。
這里的時候就要說一下~項目的lib下必須引用的jar包。
asm.jar
datanucleus-core-1.1.0.jar
datanucleus-enhancer-1.1.0.jar
datanucleus-rdbms-1.1.0.jar
jdo2-api-2.3-ea.jar
還有就是.jdo文件已經(jīng)部署好。最好就放在bean所在的package下。其實不放也沒事,官方上是這么說~~是說程序會自動找到這個.jdo為止。不過我沒有去試呵呵。
然后就是第四步:.properties文件
這個是為了在程序中創(chuàng)建PersistenceManagerFactory實例的一些屬性需要所以有了配置文件。我是定義為datanucleus.properties。因為是用datanucleus作為PersistenceManagerFactory的具體實現(xiàn)。
配置如下:
javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.jdo.JDOPersistenceManagerFactory
javax.jdo.option.ConnectionDriverName=com.mysql.jdbc.Driver
javax.jdo.option.ConnectionURL=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
javax.jdo.option.ConnectionUserName=root
javax.jdo.option.ConnectionPassword=123456
datanucleus.autoCreateSchema=true
datanucleus.validateTables=false
datanucleus.validateConstraints=false
http://db.apache.org/jdo/pmf.html這里介紹了每個屬性的作用。唯獨要注意的就是javax.jdo.PersistenceManagerFactoryClass這個屬性。這里是指定了其具體實現(xiàn)類。用不同的實現(xiàn)工具這里就是不同的值了。
最后就是具體實現(xiàn)程序。這個在http://db.apache.org/jdo/pm.html寫得很詳細。沒有什么特別的地方。
最后要說的就是datanucleus的eclipse插件的使用。其實最開始沒用插件的時候程序一直不行。已經(jīng)無計可施的時候在datanucleus的官網(wǎng)上看到了eclipse的插件使用。于是抱著死馬就當(dāng)活馬醫(yī)的心試試果然竟然成了。
地址是:http://www.datanucleus.org/products/accessplatform_1_0/guides/eclipse/index.html
目前就這么多。如果遇到其他問題會隨時更新。也希望看到的人能留言一起討論把遇到的問題都能解決方便更多的使用者。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。