实现Castor数据绑定,第4部分:把Java对象绑定到SQL数据

本文配套源码

对于多数开发人员 — 尤其是各种Java版本的用户 — 数据绑定已经和闭包、单例(singletons)、Ajax一样变为常用词汇表中的一部分了。而且和其他术语一样,数据绑定也常常被错误的定义。

特别是大部分程序员在听到数据绑定 的时候,实际上想的是XML数据绑定。加上这个小小的单词XML,造成大多数程序员忽略了相当多的功能和灵活性,尤其是如果使用 Castor API的话。这是因为对于Castor而言,XML数据绑定仅仅是其中的一部分。除了绑定到XML文档之外,Castor还提供了将Java数据绑定到SQL数据库的能力。这就是所谓的SQL数据绑定。

定义SQL数据绑定

SQL数据绑定 也许是一个新的术语,概念其实非常简单。实际上,最好从一个更熟悉的术语 XML 数据绑定 出发来考察。XML 数据绑定就是在 XML 文档数据 — 通常存储在元素和属性中 — 和 Java 对象模型的属性之间建立映射的过程。可以通过编组程序和解组程序在两者之间移动数据。编组程序从 Java 对象模型获得数据存储到 XML 文档中,解组程序从 XML 文档获取数据存入Java对象模型的属性中。

在这个基础上,我们说 SQL 数据绑定是在 SQL 数据库数据 — 存储在模式、表、列等中 — 和 Java 对象之间建立映射的过程就毫不奇怪了。编组和解组的过程一样,只不过转换是在 Java 对象和 SQL 而不是 XML 之间进行的。实际上,多数数据绑定文章中如果将 XML 替换为 SQL,元素数据 更改为表记录,讨论的内容就变成了 SQL 数据绑定了。

SQL 数据绑定的意义

Java 技术刚诞生的时候基本上是一种玩具语言,很大程度上是因为它的 API 非常简单,而且主要关注于图像(还记得 AWT 吗?)。Java 技术走向成熟的标志是 Java 数据库连接(JDBC),能够持久到 SQL 数据库。JDBC 过去(现在也是)惟一的问题是用起来很笨重。并不是说多复杂,而是对于大多数程序而言增加了太多的额外工作。

使用 Castor 和 SQL 数据绑定可以避免大部分复杂性。更妙的是,这种 API 对于 XML 和 SQL 上下文功能基本相同。而且使用数据绑定,应用程序需要关心的细节也少了。处理 JDBC ResultSet 和行数不再是您的代码的问题了,几次简单的编组解组调用就能处理 Java 对象和 SQL 数据库之间的转换。

关于 SQL 数据绑定可能最有意思的是它没有受到过多 的压力和关注。特别是考虑到一大批程序员对 XML 心存芥蒂,说它冗长笨拙,或者他们更愿意使用二进制序列化。但是这些人对 SQL 双手欢迎。事实上,如果发现有一大批程序员甚至真正的程序员也不认为 SQL 是一种合法的数据存储和持久技术,您可能会非常吃惊(看看你周围有多少人认为关系数据库臃肿笨拙、夸大其词或者已经落伍)。

既然如此,SQL 数据绑定和它的 XML 兄弟相比无疑更有意义。企业应用程序中必然需要持久(或存储)数据,而编写数据访问和检索代码是痛苦的。SQL 数据绑定把一种熟悉的 API(假设您已经阅读过本系列前面的文章)用于 SQL 数据存储。几行命令就能把数据写入表(或者多个表)或者读出来。

仍然是映射

SQL 数据绑定特别重要的一点是,能够建立 Java 对象到 SQL 数据模式的映射而不需要绑定 Java 或者 SQL 名称。和 XML 相比,关系数据库的结构通常和 Java 对象的结构相距甚远。表是数据的集合,对象通常代表一部分(可能是一行)数据。对象之间的关系必须跟踪到其他对象,就像表之间的关系要跟踪到其他表。但是 Java 对象模型中没有一对多的连接表,当然也没有多对多连接。

即便是中等复杂程度的关系数据库,设计的东西也和对象模型不同。SQL 和 Java 对象之间的映射,大量的工作就是定义对象和表之间的映射。虽然映射可能很复杂,本文中将使用几个简单的映射说明 SQL 数据绑定中映射的基本原理。

这就是 JDO,对吗?

是。但也不全对。有几分对。这里有点让人费解。

Sun 有一个规范叫 Java 数据对象(Java Data Objects,JDO)。Java Specification Request (JSR) 12(JDO 1.0)和 JSR 243(JDO 2.0)定义了一种非常具体的 SQL 数据绑定方法(虽然从未明确地称为 “SQL 数据绑定”)。如果读过 JDO 然后再读本文开始的介绍部分,就会发现是一件事。但是,Castor 的 JDO(不错,Castor 也叫 JDO,事情更加混乱)不 同于 Sun 的 JDO,甚至没有任何关系,只不过两者的基本目标相同而已。

鉴于可能造成很大混淆,再强调一次:如果使用 Castor 的 JDO,那么它不是 Sun 的标准 API。但问题并不像看起来这么糟糕或者简单明了。实际上,Castor 的开发者正努力将其 API 的很多特性纳入 Sun 数据绑定和 JDO API。因此,虽然 Castor 现在还不是标准 API,但很多特性 — 包括 API 自身 — 可能有一天会成为标准化的 JDO API。

时间: 2024-08-03 02:13:19

实现Castor数据绑定,第4部分:把Java对象绑定到SQL数据的相关文章

使用Quick在Java对象和XML之间进行转换

近几年来,XML 的确给编程世界带来了巨大冲击.然而,XML 应用程序的复杂 性(从一开始就很复杂)在最近几年中并没有减少多少.开发人员仍要花几个星 期的时间(即使不是几个月)来学习复杂的 XML 语义和 API(如 SAX 和 DOM) 来操作 XML.然而,在过去的 6 个月到 12 个月中,相对于那些较复杂的 API, 另一种新的比较简单的 XML API(称为 Quick)已经越来越受到欢迎. 数据绑定允许您直接在 Java 对象和 XML 之间映射,而不必处理 XML 属性和 元素.另

实现Castor数据绑定,第1部分:安装和设置Castor

本文配套源码 数据绑定风靡一时 在XML新闻组.邮件列表和网站的讨论论坛中(在 参考资料 中可以找到这些内容的链接),最常见的一个主题就是数据绑定.Java和XML开发人员正在寻求一种在 Java 对象与XML文档之间来回转换的简单方法. Sun 借助其 JAXB,即 Java Architecture for XML Binding(如果您在其他地方看到缩写词 JAXB,那也是正常的:Sun 似乎每年都会更改 JAXB 所代表的含义), 在数据绑定领域占据了主导地位.然而,JAXB API(如

Ajax 的 Java 对象序列化

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机.在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他们

Ajax 的 Java 对象序列化(2)

ajax|对象 Fujak Superpix72 Camera 7.2 Megapixel digital camera featuring six shooting modes and 3x optical zoom. Silver.$299.99自行序列化的不足 有趣的是,清单 3 中的代码展示了让 JavaBean 把自己序列化为 XML 的一个主要不足.假设要用这个文档表示顾客的订单历史视图.在这种情况下,不太可能要显示每个历史订单中每个商品的完整说明,或者告诉顾客他或她自己的姓名.但是

JAVA对象和XML文件绑定

目的     在日常工作中,我们经常处理这些编组关系:JAVA对象 <--> XML文件:JAVA对象 <--> 数据库表.本文简单介绍一下JAVA对象和XML文件之间的绑定.虽然代码简单,但解决问题的广度与思路也是非常重要的.     首先,在Maven中引入要用到的jar包. <dependency> <groupId>castor</groupId> <artifactId>castor</artifactId> &

解析Java的Jackson库中对象的序列化与数据泛型绑定_java

Jackson对象序列化这里将介绍将Java对象序列化到一个JSON文件,然后再读取JSON文件获取转换为对象.在这个例子中,创建了Student类.创建将有学生对象以JSON表示在一个student.json文件. 创建一个名为JacksonTester在Java类文件在 C:\>Jackson_WORKSPACE. 文件: JacksonTester.java import java.io.File; import java.io.IOException; import org.codeha

java对象中属性值为空字符串的问题

问题描述 java对象中属性值为空字符串的问题 业务逻辑中需要将对象中为空字符串的属性转换为null,首先我想到是将对象转为一个数组, 然后遍历数组,将""转为 null ,不过这样应该不对,大家给个思路 解决方案 用 反射 获得所有字段的数组,然后遍历判断~~~~~~ 解决方案二: 你为什么还要遍历呢,你前台传过来的数据先处理再装对象,这样才对 解决方案三: 传到后台后,先判断 if("".eques(name)){ name=null; } object.set

关于使用java从http接口取数据保存到本地文件的中文乱码处理

关于使用java从http接口取数据保存到本地文件的中文乱码处理 要做到如下几点: 1. 取接口数据,要注意加入编码设置与接口文件本身的编码设置一致,才能取得正确的数据   注意如下的: ins =new InputStreamReader(connection.getInputStream(),"GBK"):   必须加入第二个编码格式参数:参数的值与接口返回的数据的编码格式一致         /**   * 从某个接口取返回数据内容   * @param url   * @ret

Ajax 的 Java 对象序列化(1)

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机. 在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他