Java 数据对象(JDO)介绍(四)

深入掌握Java数据对象(JDO)技术指南 JDO(Java Data Objects)是一种基于Java平台的持久化技术,它以对象的方式简化了数据持久化操作。JDO能够将Java对象转换为数据库中的数据,同时也能够将这些数据再次转换回Java对象,从而避免了传统数据访问技术中复杂的SQL语句编写。JDO的核心优势在于其高度的可移植性和对多种数据库的兼容性。ORM(Object-Relational Mapping)模型是现代数据库操作中的一项关键技术,它将对象模型映射到关系模型上。在JDO的背景下,这一概念尤为重要。 阅读详情

Kodo JDO 规范


Kodo JDO包含自己的类来创建数据库模型和增强类。 

模型生成工具被用于揣安数据库模型,这个模型将被用于存储JDO对象实例。工具正式支持的数据库包括: 

DB2 
InstantDB 
SQLServer 
MySQL 
Oracle 
PostgreSQL 
其他数据库的JDBC驱动可以通过扩展代码被加入。详细内容参考Kodo JDO的文档。 

模型创建工具要依赖于一个package.jdo文件,这个文件被用于定义JDO实例类的一些细节。下面的文件被用于这个例子。可以查看Kodo JDO的文档来获得文件格式和概念的详细信息。 

[pre]    <?xml version="1.0"?>
    <jdo>
        <package name="com.ociweb.jdodemo">
            <class name="Engine"/>
            <class name="Vehicle"/>
            <class name="Bicycle" persistence-capable-superclass="Vehicle"/>
            <class name="MotorVehicle" persistence-capable-superclass="Vehicle"/>
            <class name="Fleet">
                <field name="vehicles">
                    <collection element-type="Vehicle"/>
                </field>
            </class>
        </package>
    </jdo>    [/pre]  
    
schematool.bat文件被用来运行模型创建工具。.jdo文件必须作为一个参数放到命令行中。 

    schematool.bat package.jdo
    
一旦模型被创建,域对象的类文件必须被增强以实现PersistenceCapable 接口。jdoc.bat文件被用于运行类增强器。jdoc.bat批处理文件也需要package.jdo文件作为参数方到命令行中。 

    jdoc.bat package.jdo
    
上面演示的模型创建和类增强是Kodo JDO实现特有的,它并不是JDO规范的一部分。其他的厂商也许有他们自己的方法来完成以上部分,具体实现要参考厂商的文档。 

向数据库增加数据
由于数据库已经配置完成并且我们的域对象也已经设计好了,代码也通过增强实现了PersistenceCapable接口,现在那些类的可以被实例化并添加到数据库中了。 

下面的类将实例化一个Fleet,给他添加几条数据然后把它存储到数据库中。 

  1.     /**
  2.      * SeedDatabase.java
  3.      */
  4.     package com.ociweb.jdodemo;
  5.     
  6.     // 厂商实现的PersistenceManagerFactory
  7.     import com.solarmetric.kodo.impl.jdbc.JDBCPersistenceManagerFactory;
  8.     
  9.     import javax.jdo.PersistenceManager;
  10.     import javax.jdo.Transaction;
  11.     
  12.     public class SeedDatabase {
  13.     
  14.         public static void main(String[] args) {
  15.             // 创建一个vehicles的fleet...
  16.             Fleet fleet = new Fleet();
  17.             fleet.addVehicle(new Bicycle("Schwinn"));
  18.             fleet.addVehicle(new Bicycle("Giant"));
  19.             fleet.addVehicle(new MotorVehicle(4, new Engine(8)));
  20.             fleet.addVehicle(new MotorVehicle(2, new Engine(4)));
  21.             fleet.addVehicle(new MotorVehicle(4, new Engine(4)));
  22.     
  23.             // 获得的一个PersistenceManager...
  24.             PersistenceManager pm =
  25.                     new JDBCPersistenceManagerFactory().getPersistenceManager();
  26.     
  27.             // 开始一个transaction...
  28.             Transaction transaction = pm.currentTransaction();
  29.             transaction.begin();
  30.     
  31.             // 存储 fleet...
  32.             pm.makePersistent(fleet);
  33.     
  34.             // 提交transaction...
  35.             transaction.commit();
  36.     
  37.             // 关闭 manager...
  38.             pm.close();
  39.         }
  40.     }
  41.     

从数据库中获得数据
下面的代码从数据库中获得类的所有实例(包括子类的)并且把他们打引导控制台。 
  1.     /**
  2.      * ListAll.java
  3.      */
  4.     package com.ociweb.jdodemo;
  5.     
  6.     // 厂商实现的PersistenceManagerFactory
  7.     
  8.     import com.solarmetric.kodo.impl.jdbc.JDBCPersistenceManagerFactory;
  9.     
  10.     import javax.jdo.Extent;
  11.     import javax.jdo.PersistenceManager;
  12.     import javax.jdo.PersistenceManagerFactory;
  13.     import javax.jdo.Query;
  14.     import java.util.Collection;
  15.     import java.util.Iterator;
  16.     
  17.     public class ListAll {
  18.     
  19.         public static void main(String[] args) {
  20.     
  21.             // 厂商特定的工厂实现...
  22.             PersistenceManagerFactory managerFactory =
  23.                     new JDBCPersistenceManagerFactory();
  24.     
  25.             // 获得一个 manager...
  26.             PersistenceManager manager =
  27.                     managerFactory.getPersistenceManager();
  28.     
  29.             Extent ext = manager.getExtent(Vehicle.class, true);
  30.             Query query = manager.newQuery(Vehicle.class, ext, "");
  31.             Collection vehicles = (Collection) query.execute();
  32.             Iterator iterator = vehicles.iterator();
  33.             while (iterator.hasNext()) {
  34.                 Vehicle vehicle = (Vehicle) iterator.next();
  35.                 System.out.println("vehicle = " + vehicle);
  36.             }
  37.             manager.close();
  38.         }
  39.     }
  40.     

  ListAll 输出内容: 

[pre]    vehicle = Bike: Model Schwinn
    vehicle = Bike: Model Giant
    vehicle = MotorVehicle With 4 Wheels.  8 Cylinder Engine.
    vehicle = MotorVehicle With 2 Wheels.  4 Cylinder Engine.
    vehicle = MotorVehicle With 4 Wheels.  4 Cylinder Engine.[/pre]
    
限制输出的结果为有四个cylinders的Vehicle 对象。条件参数必须放到newQuery()中。
注意这个例子中使用MotorVechicle类来实例化Vechicle,因为只有MotorVehicle 对象有Engines。 

  1.     /**
  2.      * ListFourCylinderVehicles
  3.      */
  4.     package com.ociweb.jdodemo;
  5.     
  6.     // 厂商实现的PersistenceManagerFactory
  7.     import com.solarmetric.kodo.impl.jdbc.JDBCPersistenceManagerFactory;
  8.     
  9.     import javax.jdo.Extent;
  10.     import javax.jdo.PersistenceManager;
  11.     import javax.jdo.PersistenceManagerFactory;
  12.     import javax.jdo.Query;
  13.     import java.util.Collection;
  14.     import java.util.Iterator;
  15.     
  16.     public class ListFourCylinderVehicles {
  17.     
  18.         public static void main(String[] args) {
  19.     
  20.            // 厂商特定的工厂实现...
  21.             PersistenceManagerFactory managerFactory =
  22.                     new JDBCPersistenceManagerFactory();
  23.     
  24.             // 获得 a manager...
  25.             PersistenceManager manager =
  26.                     managerFactory.getPersistenceManager();
  27.     
  28.             Extent ext = manager.getExtent(MotorVehicle.class, true);
  29.     
  30.             // 只返回有4个cylinders的 vehicles...
  31.             Query query = manager.newQuery(MotorVehicle.class, ext,
  32.                     "engine.numberOfCylinders == 4");
  33.     
  34.             Collection vehicles = (Collection) query.execute();
  35.             Iterator iterator = vehicles.iterator();
  36.             while (iterator.hasNext()) {
  37.                 Vehicle vehicle = (Vehicle) iterator.next();
  38.                 System.out.println("vehicle = " + vehicle);
  39.             }
  40.             manager.close();
  41.         }
  42.     }
  43.     

  ListFourCylinderVehicles 的输出结果为: 

[pre]    vehicle = MotorVehicle With 2 Wheels.  4 Cylinder Engine.
    vehicle = MotorVehicle With 4 Wheels.  4 Cylinder Engine.[/pre]
    

结论


JDO提供了一个数据库表示,在面向对象方面它比JDBC有何多好处。具体的对象映射和数据库厂商对于开发人员来讲都是隐藏的(换句话说开发人员根本不用管)。存储和查询的数据库操作非常简单明了。开发人员写的有关数据存储的代码非常少。有理由认为JDO对于Java数据存储是非常引人注目的技术。 
DataNucleus JPA/JDO访问mysql示例 DataNucleus 通过JPA/JDO访问mysql示例,具体介绍可以见我的博客 立即下载

相关推荐

全面了解JDO第四部分

全面了解JDO<br>精通JDO

Java数据对象技术JDO初步概览(Java数据对象技术JDO)

作为异军突起的新型语言,Java定义了一个标准的运行环境,用户定义的类在其中得到执行。这些用户自定义类的实例代表了真实环境中的数据,包括储存在数据库、文件或某些大型事务处理系统中的数据,而小型系统通常也需要一种在本地负责控制数据存储的机制。    由于数据访问技术在不同的数据源类型中是不一样的,因此对数据进行访问成了给程序开发人员的一种挑战,程序员需要对每一种类型的数据源使用特定的编程接口 ...

weimou66 263

如何使用安路TD与Modelsim进行联合仿真?

1)安装安路FPGA开发软件;(本次实验使用版本:TD_5.6.3_Release)2)安装Modelsim仿真软件;(本次实验使用版本:Modelsim SE-64 10.1c)3)FPGA开发板;(本次实验使用型号:EG4X20BG256)4)LED点灯例程;

qq_17313923的博客 3216

package.json 配置完全解读

package.json 配置完全解读

JackChan 5932

利用ArcGIS的模型构建器实现批量投影栅格和批量克里金插值

博主要批量投影几百个栅格,但是ArcGIS中的投影栅格的批处理工具需要手动一条条设置参数,还是麻烦,因此学习了使用模型构建器(ModelBuilder)来批量投影栅格,可以导入需投影栅格的文件夹,然后迭代投影,并按栅格原名逐个输出到指定目录。 1.在工具箱里构建模型 在arctool box里右键点击空白处,选择【添加工具箱】,点击ArcGIS默认工作目录的工具箱进行添加,然后Toolbox就会被添加到ArcToolbox页面,右键点击Toolbox,选择“新建”-“模型” 2.编写模型 (1).

qq_36958801的博客 1万+

Multisim仿真运放积分器踩坑实录:为什么你的方波变不成三角波?

本文针对Multisim仿真运放积分器时方波无法转换为三角波的常见问题,提供了详细的排查与调试指南。文章指出,经典RC积分电路因直流反馈开路导致运放饱和,核心解决方案是在反馈电容两端并联大阻值电阻以稳定直流工作点。通过参数优化(调整Rin、C、Rf)和高级仿真技巧,手把手教你调出线性度好、幅度适中的完美三角波,并分享异常波形(如饱和、不对称、振荡)的对应策略。

weixin_29231263的博客 114

[转载]如何用JDO开发数据库应用(3)

如何用JDO开发数据库应用(3)4.3. 编辑metadata: system.jdo 这个过程,我们完全可以通过JDOGenie带的图形工具来完成。 我 们将上面两个类编译以后,打开JDOGenie的workBench,即运...

congji3817的博客 214

贝加莱Automation Studio 4.10安装保姆级教程:从官网下载到解决.Net 3.5报错

本文提供贝加莱Automation Studio 4.10的详细安装教程,涵盖从官网下载到解决.Net 3.5报错的全过程。特别针对工业自动化开发环境中常见的.Net Framework 3.5安装问题,提供多种经过验证的解决方案,包括控制面板安装、DISM命令离线安装和手动下载安装包等方法,帮助工程师顺利完成PLC开发环境的搭建。

weixin_30955617的博客 713

hive mysql 中文乱码问题研究。

首先mysql 字符集修改 1:[client] 下面增加: default-character-set = utf8 2:[mysqld]下面增加: character-set-server = utf8 3:[mysql] 下面增加: default-character-set = utf8 4:重启mysql数据库:service mysqld restart

xiao_jun_0820的专栏 4850

ADS与MATLAB数据互通全指南:从Snp文件导入到TXT导出完整流程

本文详细介绍了在射频与微波工程中,实现ADS与MATLAB高效数据互通的完整流程。核心内容包括利用SPOutput控件、数据显示窗口及测量方程等多种方法,将ADS仿真数据(如S参数)导出为Touchstone或TXT格式,并导入MATLAB进行深度分析与可视化;同时指导如何将MATLAB处理后的数据回灌至ADS,用于模型验证与协同仿真,旨在构建自动化、无损的数据交换工作流,提升工程师的工作效率。

pluto的博客 393

PCB布线避坑指南:晶振布局的5个致命错误(附正确示例图)

本文深入解析PCB布线中晶振布局的5个致命错误,包括底层布线、电容布局、地平面处理等关键问题,并提供实战解决方案。通过真实案例和量化数据,帮助硬件开发者避免常见陷阱,提升电路稳定性和性能。特别针对晶振这一高敏感元件,给出布线参数黄金法则和三维避让原则。

weixin_29215391的博客 428

Java 数据对象(JDO)介绍

 Java 数据对象(JDO)介绍byJeff Brown, Senior Software Engineer Object Computing, Inc. (OCI) 介绍Java 数据对象 (JDO) is 是一个存储Java对象的规范.   它已经被JCP组织定义成JSR12规范。JDO的第一个版本在2000年6月6日提交并在2002年4月30日正式发布1.0版本规范

1714

超详细的YOLOv8项目组成解析:一站式指南了解其架构与组件

最近的更新是关于“Segment ONNX Runtime example”的,意味着它添加了对ONNX运行时的支持,特别是针对模型分割功能的支持。这些文件和文件夹共同工作,以确保 YOLOv8 的文档是全面的、多语言的,并且始终保持最新。这些示例涵盖了从基本的对象检测到更复杂的图像分割和视频处理任务,为开发者提供了丰富的学习资源和应用指导。最近的更新也是关于 ONNX 运行时示例。这些文件夹共同构成了 YOLOv8 的基础框架,从数据处理和模型配置到实际的训练和推理引擎,以及实用工具和高级功能的实现。

CDBmax的博客 1万+

Java数据对象(JDO)快速入门

  JDO有一个充满活力的社区。所以如果你正在为你的POJO寻找持久化解决方案,JDO是一个通过JCP项目开发的标准。JDO为POJO持久化提供了一个丰富和具有全部特征的JSR规范,并且很多开发商正在提供竞争性的JDO实现。EJB3.0,正由Sun微系统和来自于不同的持久化开发商的专家创建,将是未来持久化模型的选择。  持久化Java技术对象到任何关系型数据库都是一项富有挑战性的任务,因为它必须潜

银狐的专栏 3625

人工智能机器学习从入门到高级学习资料(含资料下载地址)

机器学习是一个技术含量较高的领域,高效学习需要多种途径相结合.以下是一些推荐的学习资源。首先介绍几个比较有用的社区,包含了丰富的学习资料

2401_86900375的博客 1648

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java学习之JDO

  Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访

自由引导码民! 1943

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[转载]Java数据对象(JDO)的应用

 在本篇文章中,我们将详细地讨论Sun公司的Java数据对象(JDO)标准。JDO允许我们使用Java对象,支持事务和多用户。与ODBC不同的是,它使我们无需考虑SQL和与数据库有关的其他东西。它与串行化也有所区别,因为它支持多个用户和事务。JDO允许Java开发人员将他们的数据模型用作数据模型,无需在“数据端”、“对象端”之间的转移方面花费大量的时间。 包括CocoBase、WebGain 

741

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JDO持久框架——DataNucles

1. JDO框架简介 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就...

旗鼓相当的对手的博客 3588

JDO快速入门

Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根据类的定义来管理对

bin的主栏 4318

Java 数据对象(JDO)介绍(一)

showbanner(6,6);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =240;google_ad_format = "120x240_as";google_ad_channel="3662469727";google_color_bor

cowboy 1522

Java数据对象(JDO)的应用

在本篇文章中,我们将详细地讨论Sun公司的Java数据对象(JDO)标准。JDO允许我们使用Java对象,支持事务和多用户。与ODBC不同的是,它使我们无需考虑SQL和与数据库有关的其他东西。它与串行化也有所区别,因为它支持多个用户和事务。JDO允许Java开发人员将他们的数据模型用作数据模型,无需在“数据端”、“对象端”之间的转移方面花费大量的时间。 包括CocoBase、WebGain TOP

键者天行 5783

Java数据对象(JDO)的前世今生

1 Java与数据库应用,JDBC   Java发明以来,在短短的几年之间,迅速占领了从桌面应用(J2SE)到服务器(J2EE),再到小型设备嵌入式系统(J2ME)的应用开发市场,其语言吸取了SmallTalk的一切皆对象的理念,摆脱了C++的历史累赘,简洁、自由的风格赢得了很多开发者的喜爱。从JDK1.1开始,Java成为实用的语言,而不是被人观望的新品秀;再经过JDK1.2的大量增强(尤

Steven_ssm的博客 913

探索Apache JDO:Java数据对象的灵活桥梁

探索Apache JDO:Java数据对象的灵活桥梁 在现代软件开发中,高效地管理数据库与应用程序之间的数据交互是一项核心任务。Apache JDO(Java Data Objects)作为开源界的瑰宝,提供了一种强大的方式来简化这一过程,允许开发者以面向对象的方式透明地操作持久化数据。本文将深入探讨Apache JDO项目,揭示其技术魅力,应用场景,以及为何它应成为你工具箱中的必备项。 项目介绍...

gitblog_00221的博客 769
上一篇: Java 数据对象(JDO)介绍(三)
下一篇: jboss下开发部署ejb简介
damfool
博客等级 码龄22年 19粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值