论文部分内容阅读
摘要:本文将Java技术与XML技术进行有机结合,研究了数据库操作中,XML技术映射数据库中表与Java类的方法,通过Java技术动态解析XML映射,为操作数据库建立对象查询语句,并应用Java技术对对象查询语句转换为标准SQL语句提出了新的实现方法。
关键词:XML映射;对象查询;动态解析
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)05-11273-01
XML(eXtensible Markup Language)是可扩展标记语言。与静态网站编辑的HTML语言一样是从SGML(Standard Generalized Markup Language)派生出来的,因此XML也是一种元语言,一个定义Web应用的SGML的子集,和SGML一样,可以用XML来定义各种不同的标记语言以满足不同需要,尤其是数据方面,XML语言有着绝对优势。
笔者结合Java技术,研究了XML技术映射数据库中表与Java类的实现方法,提出了对象查询语句的构建思想,并通过把对象查询语句转换为标准SQL语句给出了实现方法。
1 设计思路
以XML语言作为定义结构的基本语言,把Java中定义的类与数据库中定义的表结构一一对应起来,如下图所示:
图中Student就是一个Java类,类中定义了属性,并且为每个属性提供了set/get方法,以方便外部程序对属性的存取。STUDENT_TAB是一个数据库中的表结构,其中定义了学生的基本信息,从图中可以看出Java类中的属性与表中的字段是一一对应的。其对应关系被定义在XML文件中。
2 基本实现
(1)定义XML映射文件
该XML文件主要用以定义对应关系,即Java类中属性与数据表中的字段的对应关系,为了能够确切的描述对应关系,需要自定义几个标签,如下:
table标签表明一个表的开始,其中包含了一个name属性指明被映射表的名称,也包含了一个class属性指明了被映射的Java类名称。在table下有一个primary-key标签表明了表中的主键,同时还有若干个mapping标签具体的指明了字段和属性的对应,field-name是表中的一个字段名称,其中包括了属性isnull表明字段是否可以为NULL,默认字段是可以为NULL,属性type表示该字段的数据类型,prop-name是与字段名称对应的Java类中的属性名称,其中的type属性表明类中对应的数据类型。
(2)解析XML文件
对于XML文件可以定义一个DTD文件来描述XML文件中能够使用的标签以及标签的属性,这样在解析XML文件时可以按照DTD中定义的标准进行。在定义了Java类以及对应的数据表结构以后,就可以创建一个XML映射文件,对类和表建立对应关系,如果定义了DTD文件,那么创建XML映射文件时,必须依据DTD文件中定义的标签以及标签属性进行XML文件的定义。完成XML文件的定义后,就可以在程序中通过对XML文件的解析,来得到类和表结构的对应关系,从而产生需要的操作。XML文件的解析可以通过Java中提供的DOM API来实现。
(3)动态解析Java类
通过Java中Reflection技术可以动态的解析一个类,该技术所涉及的类均被包含在java.lang.reflect包中,主要使用的几个类有:
Field类:对类中的公共属性进行解析
Method类:对类中的公共方法进行解析
Proxy类:提供动态地生成代理类和类实例的静态方法。
在这里,对映射文件中定义的类通过动态加载,并应用XML提供的属性来得到其属性对应的set/get方法,把set/get方法通过Reflection技术中提供的Method类进行动态调用,即可为该类中的属性动态赋值,或者动态获取属性值。
(4)动态产生数据库操作语句
对XML文件进行解析后,即可得到表中的字段名称以及表名称,与动态解析后的类对象一起,共同产生标准的数据库操作语句:Insert, Delete, Update。在产生各种数据库操作语句时,需要注意一些细节问题,对于一个Java类对象,应该对应数据表中的一条记录。也就是说数据表中一条记录中的所有字段,都必须在对象中有相应的属性出现,反之则不用这么做,只要把握这个原则,在产生数据库操作语句时就会非常容易。对于Insert语句可以通过以下几个步骤完成:
解析XML后通过表字段产生Insert语句的前端:Insert into 表名 (字段列表) values ()
通过对Java对象的动态解析即可获取字段的对应值,把对应值填写在Values关键字的后面括号中,但必须与字段对应
对于Delete语句和Update语句产生的方法是相同的,唯一的不同就是带有了条件语句where子句。
(5)产生Select语句
对于Select语句,必须将其作为单独的一个功能进行处理,因为查询往往分为单条记录查询和多条记录查询。对于单条记录查询的Select语句,只要通过一个带有主键的Java类对象,就像产生Insert,Delete,Update语句一样容易
然而,对于多条记录查询的Select语句,因为这种语句带有不同的查询条件,所以必须列为单独的一个功能进行考虑,这里可以给出两种解决方案:通过直接提供SQL条件语句的方式,这种方式不能够达到完全封装数据库操作的效果;通过使用Java对象建立自己的查询语句,如查询所有姓李的学生,其对象查询条件可以是:From Student Where stu_name like ‘李%’,把这个对象查询语句提交给数据库操作类后,需要有一个对对象查询类进行解析的类,其作用就是将对象查询语句解析为标准的数据库查询语句,这种方式可以达到完全封装数据库操作的目的。
(6)对象查询解析类的基本思路
对象查询语句的解析,首先需要自定义出查询语句的关键字,以及必要的查询语句格式,最简单的方式就是使用标准SQL语句的关键字作为对象查询的关键字,这样对查询语句的解析带来方便,使得解析对象查询语句变得非常简单。这里需要注意,对象查询语句中不需要提供Select关键字,只需要从From子句开始就可以了,这是因为对象查询语句始终查询的是一条记录的所有字段内容,也就是说查询的是完整的一个对象。
对象查询语句的格式定义:
From 类名 where 条件
其解析步骤描述如下:
提取查询的类名以及查询所依赖的条件
获取XML文件的解析结果
从XML的解析结果中,依据类名查找其对应的数据库表名称
检索条件,将对象的属性提取出来
从XML的解析结果中获取对应表的字段
把条件中属性所对应的表字段提取出来
对条件语句进行替换,把属性替换为对应的表字段,其条件值保持不变化
根据以上操作结果将查询语句按照标准SQL语句格式进行重新组合
3 结论
XML数据映射技术对数据库中表与Java类的映射以及数据库的封装操作具有较高的操作安全性,对于那些不必要的操作,必须通过封装后的相关映射来访问,在前段的程序是无法直接访问的,这样大大提高了数据库的安全性。另一方面,该技术不但能够提高数据库的安全性,而且大大简化了数据访问的操作程序,提高了项目的开发效率。而该技术对环境要求比较简单,只要能够运行Java、XML便能应用,因此,从目前数据库技术的发展来看,XML的数据映射技术具有极大的使用价值以及广泛的应用领域。
参考文献:
[1]肖刚.Java Web服务器应用程序设计[M].电子工业出版社,2001.
[2]孙鑫.Java Web开发详解:XML+XSLT+Servlet+JSP深入剖析与实例应用[M].电子工业出版社,2006.
[3]吴洁.XML应用教程[M].清华大学出版社,2005.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:XML映射;对象查询;动态解析
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)05-11273-01
XML(eXtensible Markup Language)是可扩展标记语言。与静态网站编辑的HTML语言一样是从SGML(Standard Generalized Markup Language)派生出来的,因此XML也是一种元语言,一个定义Web应用的SGML的子集,和SGML一样,可以用XML来定义各种不同的标记语言以满足不同需要,尤其是数据方面,XML语言有着绝对优势。
笔者结合Java技术,研究了XML技术映射数据库中表与Java类的实现方法,提出了对象查询语句的构建思想,并通过把对象查询语句转换为标准SQL语句给出了实现方法。
1 设计思路
以XML语言作为定义结构的基本语言,把Java中定义的类与数据库中定义的表结构一一对应起来,如下图所示:
图中Student就是一个Java类,类中定义了属性,并且为每个属性提供了set/get方法,以方便外部程序对属性的存取。STUDENT_TAB是一个数据库中的表结构,其中定义了学生的基本信息,从图中可以看出Java类中的属性与表中的字段是一一对应的。其对应关系被定义在XML文件中。
2 基本实现
(1)定义XML映射文件
该XML文件主要用以定义对应关系,即Java类中属性与数据表中的字段的对应关系,为了能够确切的描述对应关系,需要自定义几个标签,如下:
table标签表明一个表的开始,其中包含了一个name属性指明被映射表的名称,也包含了一个class属性指明了被映射的Java类名称。在table下有一个primary-key标签表明了表中的主键,同时还有若干个mapping标签具体的指明了字段和属性的对应,field-name是表中的一个字段名称,其中包括了属性isnull表明字段是否可以为NULL,默认字段是可以为NULL,属性type表示该字段的数据类型,prop-name是与字段名称对应的Java类中的属性名称,其中的type属性表明类中对应的数据类型。
(2)解析XML文件
对于XML文件可以定义一个DTD文件来描述XML文件中能够使用的标签以及标签的属性,这样在解析XML文件时可以按照DTD中定义的标准进行。在定义了Java类以及对应的数据表结构以后,就可以创建一个XML映射文件,对类和表建立对应关系,如果定义了DTD文件,那么创建XML映射文件时,必须依据DTD文件中定义的标签以及标签属性进行XML文件的定义。完成XML文件的定义后,就可以在程序中通过对XML文件的解析,来得到类和表结构的对应关系,从而产生需要的操作。XML文件的解析可以通过Java中提供的DOM API来实现。
(3)动态解析Java类
通过Java中Reflection技术可以动态的解析一个类,该技术所涉及的类均被包含在java.lang.reflect包中,主要使用的几个类有:
Field类:对类中的公共属性进行解析
Method类:对类中的公共方法进行解析
Proxy类:提供动态地生成代理类和类实例的静态方法。
在这里,对映射文件中定义的类通过动态加载,并应用XML提供的属性来得到其属性对应的set/get方法,把set/get方法通过Reflection技术中提供的Method类进行动态调用,即可为该类中的属性动态赋值,或者动态获取属性值。
(4)动态产生数据库操作语句
对XML文件进行解析后,即可得到表中的字段名称以及表名称,与动态解析后的类对象一起,共同产生标准的数据库操作语句:Insert, Delete, Update。在产生各种数据库操作语句时,需要注意一些细节问题,对于一个Java类对象,应该对应数据表中的一条记录。也就是说数据表中一条记录中的所有字段,都必须在对象中有相应的属性出现,反之则不用这么做,只要把握这个原则,在产生数据库操作语句时就会非常容易。对于Insert语句可以通过以下几个步骤完成:
解析XML后通过表字段产生Insert语句的前端:Insert into 表名 (字段列表) values ()
通过对Java对象的动态解析即可获取字段的对应值,把对应值填写在Values关键字的后面括号中,但必须与字段对应
对于Delete语句和Update语句产生的方法是相同的,唯一的不同就是带有了条件语句where子句。
(5)产生Select语句
对于Select语句,必须将其作为单独的一个功能进行处理,因为查询往往分为单条记录查询和多条记录查询。对于单条记录查询的Select语句,只要通过一个带有主键的Java类对象,就像产生Insert,Delete,Update语句一样容易
然而,对于多条记录查询的Select语句,因为这种语句带有不同的查询条件,所以必须列为单独的一个功能进行考虑,这里可以给出两种解决方案:通过直接提供SQL条件语句的方式,这种方式不能够达到完全封装数据库操作的效果;通过使用Java对象建立自己的查询语句,如查询所有姓李的学生,其对象查询条件可以是:From Student Where stu_name like ‘李%’,把这个对象查询语句提交给数据库操作类后,需要有一个对对象查询类进行解析的类,其作用就是将对象查询语句解析为标准的数据库查询语句,这种方式可以达到完全封装数据库操作的目的。
(6)对象查询解析类的基本思路
对象查询语句的解析,首先需要自定义出查询语句的关键字,以及必要的查询语句格式,最简单的方式就是使用标准SQL语句的关键字作为对象查询的关键字,这样对查询语句的解析带来方便,使得解析对象查询语句变得非常简单。这里需要注意,对象查询语句中不需要提供Select关键字,只需要从From子句开始就可以了,这是因为对象查询语句始终查询的是一条记录的所有字段内容,也就是说查询的是完整的一个对象。
对象查询语句的格式定义:
From 类名 where 条件
其解析步骤描述如下:
提取查询的类名以及查询所依赖的条件
获取XML文件的解析结果
从XML的解析结果中,依据类名查找其对应的数据库表名称
检索条件,将对象的属性提取出来
从XML的解析结果中获取对应表的字段
把条件中属性所对应的表字段提取出来
对条件语句进行替换,把属性替换为对应的表字段,其条件值保持不变化
根据以上操作结果将查询语句按照标准SQL语句格式进行重新组合
3 结论
XML数据映射技术对数据库中表与Java类的映射以及数据库的封装操作具有较高的操作安全性,对于那些不必要的操作,必须通过封装后的相关映射来访问,在前段的程序是无法直接访问的,这样大大提高了数据库的安全性。另一方面,该技术不但能够提高数据库的安全性,而且大大简化了数据访问的操作程序,提高了项目的开发效率。而该技术对环境要求比较简单,只要能够运行Java、XML便能应用,因此,从目前数据库技术的发展来看,XML的数据映射技术具有极大的使用价值以及广泛的应用领域。
参考文献:
[1]肖刚.Java Web服务器应用程序设计[M].电子工业出版社,2001.
[2]孙鑫.Java Web开发详解:XML+XSLT+Servlet+JSP深入剖析与实例应用[M].电子工业出版社,2006.
[3]吴洁.XML应用教程[M].清华大学出版社,2005.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。