IIWAB

JDO:独立持久化

IIWAB 2月前 ⋅ 119 阅读

JDO(Java Data Objects)数据持久化标准

一、基础定义

JDO = Java Data Objects,Java对象持久化规范 由JCP制定规范:

  • JDO1.0:JSR-12
  • JDO2.0/3.x:JSR-243,现由Apache维护,主流实现:DataNucleus

核心定位:透明对象持久化标准,让普通POJO直接持久化到各类存储,不用手写SQL。

二、核心思想:透明持久化

  1. 纯POJO编程 持久化类无需实现特定接口、不用继承父类,就是普通Java Bean;通过字节码增强(Enhancer) 在编译期植入持久化逻辑,自动追踪对象字段修改、自动读写存储。
  2. 面向对象操作,屏蔽底层存储 你只操作Java对象,增删改查底层自动完成,几乎不写SQL。
  3. 多存储兼容(JDO最大特色) 不只支持关系数据库,同时兼容:对象数据库、MongoDB等NoSQL、XML文件、普通文件、Excel等异构存储。

三、核心API组件

  1. PersistenceManager(PM) 持久化核心入口,管理对象生命周期、创建查询、开启事务,等同于JPA的EntityManager
  2. Transaction 事务控制,支持乐观锁/悲观锁。
  3. Query + JDOQL 专属查询语言JDOQL,完全基于Java对象语法,无SQL依赖,一套查询可适配所有存储; 示例:查询18岁以上用户
Query q = pm.newQuery(User.class, "age >= 18");
List<User> list = q.execute();
  1. 元数据Metadata 定义对象与存储映射,支持三种方式:注解、XML配置、API动态配置。

四、持久化对象生命周期(JDO独有状态)

  • 瞬时态 Transient:普通内存对象,和持久层无关
  • 持久态 Persistent:与PM绑定,修改字段自动同步存储
  • 游离态 Detached:脱离PM,仍携带持久状态,可重新附着更新数据库
  • 删除态 Persistent-Deleted:标记待删除,事务提交后移除

五、JDO核心优势

  1. 存储无关性:一套代码切换关系库、NoSQL、文件,无需大幅改造;
  2. 完全面向对象:原生支持继承、多态、复杂对象关联映射(对应你前面学的面向对象继承/多态);
  3. 透明变更追踪:修改对象属性自动检测,自动生成更新语句;
  4. 无侵入POJO:代码不绑定持久化框架,业务与存储解耦;
  5. 统一JDOQL,跨存储通用查询。

六、JDO vs JPA

对比项JDOJPA
规范定位通用对象持久化,不限存储Java EE标准ORM,仅关系数据库
存储支持RDB、NoSQL、文件、对象库仅限关系型数据库
查询语言JDOQL(纯对象语法)JPQL(类SQL语法)
侵入性极低,纯POJO有约束(不能final类、必须无参构造等)
诞生背景独立持久化标准(JSR12)EJB3产物,吸收JDO思想简化而来
现状小众,多存储异构场景使用主流企业Java持久化方案

区分点

  • 出现:多数据源、文件/对象数据库、透明存储、跨存储 → 选JDO
  • 出现:ORM、关系数据库、JavaEE、JPQL、Hibernate → 选JPA

七、简单执行流程

  1. 编写普通POJO实体类;
  2. 字节码增强,植入持久化逻辑;
  3. 通过PersistenceManager获取对象、新建对象;
  4. 操作对象属性,JDO自动同步数据库;
  5. JDOQL查询对象,事务提交完成持久化。

八、极简

JDO是Java平台标准化对象持久化API,核心是透明持久化,依托字节码增强实现POJO持久化;支持关系库、NoSQL、文件等多种存储,使用JDOQL面向对象查询;区别于只针对关系库的JPA。


全部评论: 0

    我有话说: