A. sql server 2005 将数据库中的数据映射为哪两类文件作用是什么
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。
主要数据文件的推荐文件扩展名是
.mdf。主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。
用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是
.mdf。
sql
server的每个数据库是以两个文件存放的,一个后缀名为mdf,是数据文件,另一个后缀名为ldf,为日志文件。因此只要定期复制这两个文件,就可以达到备份的效果。
B. Hibernate框架ORM的实现原理
东方标准国际软件专业讲师,曾经负责过的重大的大型项目包括:全军武器装备
质量管理系统、全军办公自动化系统、日本NTT电信管理系统等。主要着作包括
《ASP.NET开发答疑200问》《ASP.NET开发实例导航》等。毕业于北京大学计算
机专业。
1. 什么是ORM
ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是
将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可
以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人
员以面向对象的思想来实现对数据库的操作。
2.什么是Hibernate
对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都
可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能
实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框
架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸收进来,利用它在
自己的项目中实现ORM功能。
3.ORM的实现原理
现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错
误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。
在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的
功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题
就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们
也能够开发出自己的一款ORM框架。会使用 Hibernate的开发人员都知道,在使
用它实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件
(*.hbm.xml)以及数据库配置文件(*.properties或*.cfg.xml),它们各自的
作用如下。
⑴映射类:它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,
将来就可以实现把表中的记录映射成为该类的对象。
⑵映射文件:它的作用是指定数据库表和映射类之间的关系,包括映射类和数据
库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对
应关系等。
⑶数据库配置文件:它的作用是指定与数据库连接时需要的连接信息,比如连接
哪中数据库、登录用户名、登录密码以及连接字符串等。
在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据
库配置文件为Properties格式或者是XML格式。想理解“映射” 首先我们需要知
道如何解析这三种文件,即解析XML格式文件、解析Properties格式文件和解析
Java类文件。下面我们来分别探讨一下如何实现这些文件的解析。
⑴如何解析XML文件
前面我们说过映射文件是XML格式,数据库配置文件也可以是XML格式,因此如果
能解析XML文件我们就可以获取这两个文件的信息。XML文件格式我简单做下介绍
,比如tom这句就是一个XML格式的描述,name代表节点,节点必须有开始标记和
结束标记,在开始标记中我们可以添加一些属性的声明比如sex。解析XML的技术
可以分为两类那就是SAX和DOM,这两种方式的差别和优缺点大家可以上网查阅或
者我们会在以后的文章中提出,请大家关注。实现解析XML文件的功能很方便,
我们可以通过下载第三方的一些工具包如xml-apis.jar和 xercesImpl.jar等,
也可以使用JDK自带的工具类DocumentBuilderFactory、DocumentBuilder、
Document、Element等等,大家可以通过API文挡查阅这些类的说明。通过这些类
我们可以把XML文件的信息读入内存并通过类中的某些方法获取指定节点的名字
、值、属性名、属性值这些信息。
⑵解析Properties文件
数据库配置文件可以是XML格式也可以是Properties格式,Properties文件一般
采用“属性名=属性值”的形式描述信息。如果配置文件采用Properties文件描
述,我们就需要想办法解析这种类型的文件了。想解析Properties文件大家就需
要熟悉Properties这个类了,这个类有一些常用方法比如,load()加载指定文件
并读取文件中的属性信息,PropertyNames()返回所有属性名,getProperty ()
返回指定属性名的属性值。通过解析Properties文件我们可以得到连接数据库必
要的信息,然后通过底层JDBC技术与数据库建立连接。
⑶解析Java类文件
通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射
类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数
据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象
的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只
知道类名和属性名,如何根据类名和属性名调用相应的set和get方法,是一个关
键问题。在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息
,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机
制相关的类有Class、Field、Method以及 Constructor等。通过Class的
getFields()、getMethods()和getConstructors()方法得到相应的属性、方法和
构造方法。通过Field类的getName()、getType()和getModifiers()方法得到相
应的属性名、属性类型、属性修饰符信息。通过Method类getReturnType()可以
获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中
对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX
和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中
。
此外要实现Hibernate机制还会涉及到一个技术点,那就是如何获取数据库的相
关信息。要实现这个功能,就需要大家了解JDBC的 DataBaseMetaData类和
ResultSetMetaData类,通过这两个类的方法我们就可以获取数据库表的字段名
、类型、大小等相关信息。
C. XML 和数据库之间的映射有什么作用
楼主 首先我们应该明白xml的作用:
XML的简单使其易于在任何应用程序中读写数据,这使XML成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
————————————————————————
由上面我们可以得知,XML成为数据交换的唯一公共语言,异构系统 甚至 异构平台的信息交互 都要靠xml传输数据,举个例子:
.net 开发的系统 和 java开发的系统 如何进行数据交换,如何进行深度整合和互操作,考得就是webservice,而现在webservice数据格式一般都是采用xml的,因为xml是数据交换的事实上的工业标准了,通过它我们可以“穿透那个可亲又讨厌的防火墙”. 呵呵
数据一般都是从数据库中取出的吧,所以 研究xml与数据库数据的互相转化和映射关系,就显的非常重要了。
————————————————————————
XML在Web领域已经得到了广泛的应用,而XML数据库一直是个研究热点。各数据库厂商及研究机构纷纷投入对XML技术的研究及开发。大体上可以把XML数据库分为两类:原生XML数据库(Native XML Database)和使能XML数据库(Enable XML Database)。而XML数据一般可划分为粗粒度、中粒度及细粒度三种形式。以文档为中心的粗粒度形式,一般采用原生XML数据库,而以数据为中心的细粒度形式一般采用使能XML数据库。
XML数据是嵌套的树形结构,而关系数据库是简单、平面的二维表结构,结构的差异性,使得在存储XML数据时需要按一定的映射规则进行转换,并使能够恢复到原XML文件。
XML文件物理结构上由多种元素组成,本文的研究只考虑常用的ELEMENT、TEXT、ATTRIBUTE三种元素,采用三个表来保存XML数据。主要思想是把树结构中的中间节点(非属性和文本节点)放入mNode(Middle Node)表,叶子节点(属性和文本节点)放入eNode(End Node)表,另外一个是ePath表,用于保存从根节点到叶子节点的路径。当然保存多个XML时,我们会引入一个用于保存区分各个XML的表。详细说明如下:
1) Path(pathID, path)
该表主要保存从根结点到各个叶子结点的所有不同的路径,在查询时可满足类似于Xpat的查询。
pathID:各不同的路径标识符,在解析过程中产生。
path:实际路径名称。
2)mNode(nodeID, nodeName, parentID, order, pathID)
该表主要通过指定parentID来保存各节点间的父子关系,以保持原XML的树型结构。
nodeID:节点的唯一标识符,在解析过程中产生。
nodeName:节点的名称,即XML中的实际名称。
parentID:父节点的标识符,根节点置为-1。
order:兄弟节点的先后次序。
pathID:从根结点到本节点所走的路径。
3)eNode(nodeName, nodeValue, parentID, order, type)
该表主要保存属性及文本节点的值。
nodeName:属性名,如果是文本节点则取其父节点名。
nodeValue:属性文本值。
parentID:父节点的标识符。
order:兄弟节点的先后次序。
type:用于区分属性还是文本的标量。
4转换方法
从XML到SQL,一般都是采用递归算法,先根遍历XML树结构,而从SQL返回到XML时,一般采用队列生成XML节点。递归过程一般要消耗较多的时间和空间,在处理较大结构的XML时,性能上不是很理想。
本模型在XML和SQL中放入一个中间层,该层中主要有根据DTD或Schema生成的一系列Bean、一个操作SQL的模块、一个操作XML的模块,另外在此基础上还可以方便扩展给其他业务逻辑层调用的模块。结构如下图所示:
JavaBeans:这里所说的JavaBeans是根据XML 对应的DTD或Schema所产生的有级联关系的类。通过这些类逻辑上形成一棵XML树形结构,用于存放实际XML数据。对于如下的一部分DTD:
<! ELEMENT book (title, price, author+)>
<! ATTLIST book year CDATA>
<! ELEMENT title (#PCDATA)>
<! ELEMENT price (#PCDATA)>
我们可以设计一个BookItem类,它包括一个TitleTxt字段、一个PriceTxt字段、一个AuthorBean字段以及一个YearAttr字段,其中AuthorBean由多个AuthorItem组成,类似的,AuthorItem包含它下面的节点信息。在这个过程中,可以完成ePath表的信息建立。
根据前面的映射模型,对于BookItem类的title字段,设计如下形式的类结构:
Public Class BookItem(){
Private String titleTxt;
Public setTitleTxt(String title){}
Public getTitleTxt(){}
Public setTitleParentID(int parentID){}
Public getTitleParentID(){}
Public setTitleOrder(){int order}
Public getTitleOrder(){}
…
}
而对于AuthorBean类,类结构设计如下:
Public Class AuthorBean(){
Private Vector beanVector;
Public void add(AuthorItem authorItem){}
Public AuthorItem getByIndex(int index){}
Public int getSize(){}
…
}
从结构上容易看出,代码量非常大,但由于都是一些get()和set()方法,这些代码不用通过手工去撰写,而是根据DTD或Scheme的信息自动生成。在过程①及过程④中调用set()方法,在过程②及过程③中调用get()方法。
XML Operator:该模块可以支持DOM、SAX解析。根据层次信息依次解析每个节点,此过程中记录父子节点关系,并且记录一个节点中所有子节点的先后顺序,并设定到Bean中。
SQL Operator:该模块主要是把Bean中的信息写入数据库,以及从数据库中读取信息供重组XML。
楼主,希望我的给出信息和资料对你的问题的解决 有所帮助!:-)