JDO 的使用和集成(一)

2014-11-24 00:57:39 · 作者: · 浏览: 0

这里不想讨论JDO和JPA的区别,也不讨论JDO的规范,单只是从JDO的使用和与应用的集成角度来概述。

1. 下载JDO规范的实现开源包。目前主流的JDO实现有:
*.TJDO http://tjdo.sf.net
*.Speedo http://speedo.objectweb.org
*.JORM http://jorm.objectweb.org
*.XORM http://xorm.sourceforge.net
*.JPOX http://jpox.sourceforge.net
*.OJB http://db.apache.org/ojb/
*.DataNucleus http://www.datanucleus.org/

2. 这里选择DataNucleus为JDO的实现,因为个人认为datanucleus大有一统O/R Mapping天下的架势。前端支持JDO/JPA规范,后面能接多种数据存储平台(RDBMS, ODBMS, Map-based, Web-based, documents, etc) . 并且直接可与bigtable、hbase等分布式数据库集成。实在强大。
* 下载DataNucleus程序包
* 下载DataNucleus在eclipse下的扩展插件

3. 如果使用dataNucleus连接DBMS数据库(Mysql)需要加入以下几个jar包:
datanucleus-enhancer-3.0.0-m4.jar jdo-api-3.1-SNAPSHOT-20110319.jar datanucleus-api-jdo-3.0.0-m4.jar datanucleus-jdo-query-3.0.0-m2.jar asm.jar
mysql-connector-java-5.0.4-bin.jar datanucleus-cache-3.0.0-m2.jar datanucleus-management-1.0.2.jar datanucleus-core-3.0.0-m4.jar datanucleus-rdbms-3.0.0-m4.jar

4. 创建一个entity class 并配置映射文件 如下:
entity class :
@PersistenceCapable
public class Person {
@PrimaryKey
private String name ;
private int age ;
private String mail ;
.......
}
mapping xml










5.创建JDO操作类:
Map JDOConfig = new HashMap();
JDOConfig.put( "javax.jdo.PersistenceManagerFactoryClass" ,"org.datanucleus.api.jdo.JDOPersistenceManagerFactory" );

JDOConfig.put("javax.jdo.option.ConnectionURL", "jdbc:mysql://localhost/acegi" );
JDOConfig.put( "javax.jdo.option.ConnectionDriverName" , "com.mysql.jdbc.Driver" );
JDOConfig.put( "javax.jdo.option.ConnectionUserName" , "root");
JDOConfig.put( "javax.jdo.option.ConnectionPassword" , "root");
JDOConfig.put( "javax.jdo.option.NontransactionalRead" , "true");
JDOConfig.put( "javax.jdo.option.NontransactionalWrite" , "true");
JDOConfig.put( "datanucleus.autoCreateSchema" , "true" );

PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(JDOConfig);
PersistenceManager pm = pmf.getPersistenceManager();
Person person = null;
System. out.println("Insert iterm into DB. " );
//insert
person = new Person("wenhao" ,123,"wenhao@gmail.com");
pm.makePersistent(person);
//select
getPersonsFromDB(pm);
//update
person.setMail( "wenhao@sina.com.cn");
pm.close();

person.setAge(1000);
System. out.println("instance level : " + person.getAge());

pmf = JDOHelper. getPersistenceManagerFactory(JDOConfig);
pm = pmf.getPersistenceManager();
List updatePersons = getPersonsFromDB(pm);
if(updatePersons != null && updatePersons.size() > 0) {
for(Person updatePerson : updatePersons)
//delete
pm.deletePersistent(updatePerson);
System. out.println("Delete iterms from DB." );
}
pm.close();
//select
Query q =