博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataNucleus之JDO操作演示样例
阅读量:4490 次
发布时间:2019-06-08

本文共 6572 字,大约阅读时间需要 21 分钟。

    JDO(Java Data Object )是Java对象持久化的新的规范。也是一个用于存取某种数据仓库中的对象的标准化API。

注意JDO是一种规范,而不是一个产品。而DataNucleus正是实现JDO规范的产品之中的一个。JDO实现产品还有FOStore、JPOX等。当然DataNucleus不仅实现了JDO规范,还实现了JPA(java还有一持久化规范),也就是说有了DataNucleus,你既能够选择JDO API,也能够选择JPA API进行持久化操作。

    如今DataNucleus官网上主要推的是3.3与4.0版本号。3.3版本号须要JDK1.6以上。而4.0版本号须要JDK1.7以后,因为本人寻常习惯于JDK1.6,所以在这里选择的是DataNucleus3.0版本号。

    要使用DataNucleus,必需要加入其jar包。由于其jar包比較多还涉及jar包依赖关系,所以最好是使用maven进行构建。以下是项目依赖:

javax.jdo
jdo-api
3.1-rc1
mysql
mysql-connector-java
5.1.18
junit
junit
4.4
test
org.datanucleus
datanucleus-core
3.0.0-m4
org.datanucleus
datanucleus-enhancer
3.0.0-m4
org.datanucleus
datanucleus-api-jdo
3.0.0-m4
org.datanucleus
datanucleus-jdo-query
3.0.0-m2
org.datanucleus
datanucleus-cache
3.0.0-m2
org.datanucleus
datanucleus-rdbms
3.0.0-m4
org.datanucleus
datanucleus-management
1.0.2
有了jar包后,就应该写配置文件了。

在类路径下新建一个 META-INF/persistence.xml文件。文件名必须为persistence.xml且必须放在META-INF文件夹中,这是JDO规范中规定死的。以下是该配置文件内容:

xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <!-- 一个配置文件里能够有多个持久化单元(persistence-unit) RESOURCE_LOCAL表示本地事务 --> <persistence-unit name="xtayfjpk" transaction-type="RESOURCE_LOCAL"> <-- 包括一个Person实体 --> <class>com.xtayfjpk.jdo.entity.Person</class> <exclude-unlisted-classes/> <properties> <property name="datanucleus.ConnectionDriverName" value="com.mysql.jdbc.Driver"/> <property name="datanucleus.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/test"/> <property name="datanucleus.ConnectionUserName" value="root"/> <property name="datanucleus.ConnectionPassword" value="******"/> <property name="datanucleus.autoCreateSchema" value="true"/> </properties> </persistence-unit> </persistence>

properties中主要设置的是数据库连接信息。该连接信息还有还有一种写法:

javax.jdo.option.ConnectionDriverName是datanucleus.ConnectionDriverName的别名。其他依此类推,datanucleus.autoCreateSchema=true表示在操作JDO API的时候相应的数据库表还没有创建的话会依据实体的元数据自己主动创建表。

当然能够设置的属性还有非常多,详细请參看:http://www.datanucleus.org/products/accessplatform_3_3/persistence_properties.html。

以下是Person类代码:

package com.xtayfjpk.jdo.entity;import javax.jdo.annotations.Column;import javax.jdo.annotations.PersistenceCapable;import javax.jdo.annotations.PrimaryKey;@PersistenceCapable(table="JDO_PERSON")public class Person {	@PrimaryKey	@Column(name="P_ID")	//假设ID要自增长请加上@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)	private Integer id;		@Column(name="P_NAME")	private String name;		@Column(name="P_AGE")    private int age;		@Column(name="P_EMAIL")    private String email;		public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public String getEmail() {		return email;	}	public void setEmail(String email) {		this.email = email;	}	@Override	public String toString() {		return "Person [id=" + id + ", name=" + name + ", age=" + age				+ ", email=" + email + "]";	}}
配置元数据即能够既使用XML配置文件,也能够使用注解,但个人习惯使用注解。要使一个类能够被JDO操作,必须在类上加上@PersistenceCapable注解,其table属性用于设置该实体相应的数据库表名称。

@PrimaryKey用于表示这是主键,@Column(name="P_AGE")用于指定表字段名称。@Column不是必须的。这些注解就可以放置在字段上,也能够放置在相应的getter方法上.JDO提供的注解有非常多,有些注解还有非常多属性,详细请參看:http://db.apache.org/jdo/annotations.html。

配置好了元数据后就能够操作JDO的API了。例如以下:

package com.xtayfjpk.jdo;import javax.jdo.JDOHelper;import javax.jdo.PersistenceManager;import javax.jdo.PersistenceManagerFactory;import javax.jdo.Transaction;import org.junit.Before;import org.junit.Test;import com.xtayfjpk.jdo.entity.Person;/** * Unit test for JDO. */public class JDOTest {	private static PersistenceManagerFactory pmf = null;		@Before	public void before() {		/*Properties properties = new Properties();    	properties.setProperty("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.Driver");    	properties.setProperty("javax.jdo.option.ConnectionURL","jdbc:mysql://127.0.0.1:3306/test");    	properties.setProperty("javax.jdo.option.ConnectionUserName","root");    	properties.setProperty("javax.jdo.option.ConnectionPassword","xtayfjpk");    	properties.setProperty("javax.jdo.option.Optimistic","true");    	properties.setProperty("datanucleus.autoCreateSchema","true");*/    	//getPersistenceManagerFactory有非常多重载的方法,详细请參看API    	pmf = JDOHelper.getPersistenceManagerFactory("xtayfjpk");	}	    @Test	public void testPersistenceManageFactory() {    	System.out.println(pmf);	}        @Test    public void testSave() {    	PersistenceManager pm = pmf.getPersistenceManager();    	Transaction tx = pm.currentTransaction();    	try	{    	    tx.begin();    	    Person person = new Person();        	person.setId(1);        	person.setName("王五");        	person.setAge(40);        	person.setEmail("wangwu@qq.com");        	Person p = pm.makePersistent(person);    	    tx.commit();    	} catch (Exception e) {    		e.printStackTrace();    	    if (tx.isActive()) {    	        tx.rollback();    	    }    	} finally {    		pm.close();    		pmf.close();    	}    }    }
有一点特别须要注解的是:尽管上面在写Person类的时候就是一个纯POJO。但DataNucleus事实上并不能真正直接使用该类。所以DataNucleus採用了一种增强机制,这正是引入datanucleus-enhancer包的原因。

假设不进行增强直接执行会报:

Found Meta-Data for class com.xtayfjpk.jdo.entity.Person but this class is not enhanced!! Please enhance the class before running DataNucleus.异常
增强POJO有两种方式。一种是手动,比較麻烦。还有一种是自己主动增强,但要安装DataNucleus Eclipse插件。插件安装地址为:
http://www.datanucleus.org/downloads/eclipse-update/,推荐使用3版本号。4版本号好像有JDK兼容的问题。安装完插件后。右击project弹出的菜单会多出一个DataNucleus菜单项。

然后加入DataNucleus支持(add DataNucleus support),再选择enabel Auto-Ehancement启用自己主动增强。

转载于:https://www.cnblogs.com/brucemengbm/p/7151686.html

你可能感兴趣的文章
java 断点续传(springMvc),可支持html5 vedio在线播放 posted @ 2017年3月11日 16:15:44...
查看>>
[入门阅读]怎样在android中解析JSON
查看>>
extjs中rowEditing动态编辑
查看>>
第10题 正则表达式匹配(动态规划)
查看>>
HTML入门
查看>>
[LeetCode] 23. Merge k Sorted Lists
查看>>
windows开启Apache的mod_rewrite模块
查看>>
Webform(分页、组合查询)
查看>>
Foundation - NSDate
查看>>
Codeforces - 570D 离散DFS序 特殊的子树统计 (暴力出奇迹)
查看>>
geatpy - 遗传和进化算法相关算子的库函数(python)
查看>>
iOS 线程安全
查看>>
mysql 分组之后统计记录条数
查看>>
New STL Algorithms That Will Make A More Productive Developer
查看>>
js 对象 浅拷贝 和 深拷贝
查看>>
初识 python
查看>>
PCL Examples
查看>>
spring boot
查看>>
浏览器URL传参最大长度问题
查看>>
学习进度条
查看>>