知识大全 用Hibernate3.1实现XML和数据库的同步

Posted 文件

篇首语:学而不厌,诲人不倦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Hibernate3.1实现XML和数据库的同步相关的知识,希望对你有一定的参考价值。

用Hibernate3.1实现XML和数据库的同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Hibernate是一套开源的用于对象/关系持久化和查询服务的Java库 现在Hibernate的最新版本是 在这个版本中引入了一个新的特性 XML到数据库映射(也可以看做是XML和数据库的同步) 这个功能允许程序员将基于XML文档的数据映射成数据库(在当前版本的Hibernate中支持DB MySQL Oracle和PostgreSQL) 通过使用Hibernate 可以将XML文档的节点(Node)映射成数据库的列 每一个XML文件直接被映射成一个数据库表 在这个过程中并不要求一个POJO Hibernate可以根据需要生成相应的SQL(包括create update delete insert等)    我们还可以通过Hibernate的配置文件生成新表 并将XML数据添加到数据库中 还能以XML格式得到数据库表中的数据 并通过XML的方式增加或更新数据 同时 Hibernate 还支持dom j API 并且支持Ant 在本文中将学习如何使用Hibernate 开发一个基于XML映射的应用程序

  我们要做的第一项工作就是设计数据库配置属性 这些属性可以在hibernate properties中设置 这此属性主要包括要连接的数据库 JDBC驱动类以及连接数据库的连接字符串 还需要设置一个映射文件hbm xml 这个文件指定了XML文档的节点和相应的数据表中的列的对应关系 Java Bean要映射的数据表名也在这个文件中指定 我们可以使用 hibernate tool hbm ddl SchemaExport工具将映射文件映射到数据表上 本文将详细描述如何将一个Catalog hbm xml文件映射到一个Oracle数据表上

  一 准备工作

  在开始本文的讲解前需要先安装用于开发的Hibernate应用程序包 我们可以从下载Hibernate的 版 然后需要安装Oracle g 详细的安装过程请参考相关的文章 最后 我们将本程序所需要的Hibernate的 jar文件加到加到CLASSPATH环境变量中 这些 jar文件如表 所示

   jar文件 描述 hibernate jar 这是hibernate主要的jar包 其中 hibernate tool hbm ddl SchemaExport就包含在这个文件中 dom j jar mons logging jar mons collections jar ehcache jar cglib jar jta jar asm jar antlr rc jar jaxen beta jar 这九个jar文件是包含了Hibernate的辅助类 classes jar or ojdbc jar 这是操作Oracle数据库的JDBC类

  表 Hibernate的jar文件

  在本节中 我们将学习如何从一个XML映射文件生成一个数据库表 这个工作可以通过hibernate properties文件实现 这个文件将指定数据库的设置信息和hbm xml映射文件 如果你使用一个配置文件(hibernate cfg xml)来指定数据库属性 那么hibernate properties文件将不再需要……hbm xml文件包含了将XML文档节点映射成数据库表的类的定义以及表名和XML文档相对应的列 除了这些 还需要指定列的类型 长度 是否为null以及是否唯一 表 列了一些主要的映射文件设置项

   设置项 描述 hibernate mapping 这是根设置项 它包含了schema和package属性和class字设置项 class 指定映射到数据库表的实体 包括table schema entity name和node属性 它的子设置项有id property set和list id 在定义类时要求的设置项 包括column type和length属性和column generator设置项 property 指定某个实体的属性和相应的数据库表列 包含type column length和not null属性

  表   Hibernate映射文件的主要设置项

  在本文的例子的映射文件指定了一个实体Catalog 其中包含了Catalog的节点(也就是列) XML文档节点在节点属性中指定 这个例子映射文件Catalog hbm xml在表 中指定 其中<generator class= native />指定了唯一标识符的产生策略 我们可以在Hibernate properties文件中指定JDBC配置信息 在hibernate properties文件中包含的属性通过<property>=<value>指定 JDBC的部分配置将在表 中列出

   属性 描述 nnection driver_class 连接数据库的驱动类 nnection url 用于连接数据库的连接字符串 hibernate dialect 数据库类型 nnection username 登录数据库的用户名 nnection password 登录数据库的密码

  表 Hibernate properties的部分属性

  在本文的例子中将数据库驱动类指定为oracle jdbc driver OracleDriver 连接字符串使用Oracle的第四种类型连接字符串 数据库类型为Oracle

  hibernate properties的设置如下所示

       nnection driver_class=oracle jdbc driver OracleDrivernnection url=jdbc:oracle:thin:@localhost: :OracleDBnnection username=usernnection password=mypwhibernate dialect= hibernate dialect OracleDialect

  在本例中将使用 hibernate tool hbm ddl SchemaExport工具根据Catalog hbm xml和hibernate properties文件来产生一个Oracle数据表

  首先将hibernate properties和Catalog hbm xml文件复制到同一个目录下 如d \\hibernate 然后启动Oracle数据库服务 接下来使用如下命令产生一个Oracle数据库表

    java hibernate tool hbm ddl SchemaExport properties=hibernate properties Catalog hbm xml

  在执行完上面的命令后 在Oracle数据库就建立了一个user Catalog表

  在这一节 我们将开发一个Java应用程序就于将XML文档转换成在上一节所描述的数据表 我们将使用表示所描述的catalog xml中的数据

  这个Java应用程序将映射文件 用于数据持久化的属性文件集成到了一起 首先将Catalog hbm xml和hibernate properties文件复制到同一个目录 并将这个目录加到CLASSPATH中 在Java应用程序中使用import导入 hibernate包和dom j包

   hibernate Session是主要的运行时接口 它负责将Java应用程序和Hibernate连接起来 你可以使用它在数据库表中增加 获得 更新和删除XML数据 我们可以从一个SessionFactory中获得一个Session对象 这个SessionFactory接口提供了openSession方法用来创建一个数据库连接以及打开一个连接会话 hibernate cfg Configuration类用来指定配置属性和创建一个SessionFactory的映射文件 下面的代码将创建一个配置对象

    Configuration config=new Configuration();

  下面的代码将映射文件catalog hbm xml加入到配置中

    config addFile( catalog hbm xml )

  现在映射文件Catalog hbm xml以及JDBC属性文件在相同的目录 并且应用程序使用配置对象获得这此文件的信息 下面的代码将创建一个SessionFactory对象

    SessionFactory sessionFactory=config buildSessioFactory();

  接下来 将向使用SchemaExport工具创建的数据表中加入数据 首先从SessionFactory对象中得到一个Session对象

    Session sess =sessionFactory openSession();

  下面的代码将得一个Transaction对象 我们可以使用这个对象向数据表中加入数据

     hibernate Transaction tx = sess beginTransaction();

  使用DOM J模式开始一个会话 第二个会话和第一个主会话有同样的连接 事务和上下文属性

    Session dom jSession = session getSession(EntityMode DOM J);

  下面将创建一个SAXReader对象用于分析描述数据表的XML文档 我们可以使用read(File)方法来分析catalog xml文件 代码如下

       SAXReader saxReader = new SAXReader();Document document = saxReader read(new File( c:/Hibernate/catalog xml ));

  下面的代码将获得文档对象中catalog节点的列表 并且创建一个Iterator对象用于浏览列表中止数据

        List list = document selectNodes( //catalog )      Iterator iter = erator()

  Iterate可以枚举列表中的对象 并且从列表中获得相应的节点 我们可以使用save(String entityName Object object)方法来将节点数据保存在数据库中 其实save方法并不会真的将数据保存在数据库中 要想物理保存 必须使用flush方法来同步数据库和XML文档 代码如下

    while(iter hasNext())     Object catalog = iter next();    dom jSession save( Catalog catalog);

  最后 我们将使用flush来保存Session 使用mit来提交事务 使用close来关闭会话 代码如下

    session flush() mit() session close()

  在这一节中我们将从一个数据表中以XML的形式得到数据 和上一节一样 需要创建一个配置对象 并且将映射文件catalog hbm xml加到配置对象中 代码如下

   configuration config = new Configuration() config addFile( catalog hbm xml )

  然后从配置对象创建一个SessionFactory对象 并且使用SessionFactory打开一个会话对象

   sessionFactory sessionFactory = config buildSessionFactory() session = sessionFactory openSession()

  使用DOM J实体模式创建一个新会话 代码如下

        Session dom jSession = session getSession(EntityMode DOM J)

  开始一个新事务 代码如下

        tx = session beginTransaction()

  下一步将使用Catalog中的数据来创建一个XML文档 首先 使用静态方法createDocument方法(在DocumentHelper类中)来创建一个Document对象 并将catalogs元素加到Document对象中 代码如下

   Document document = DocumentHelper createDocument() Element rootElement = document addElement( catalogs )

  创建一个Hibernate查询(HQL)用来查询表中的数据 HQL的语法类似SQL的语法 在HQL中并不要求Select子句 在From子句后面需要加实体名 而不是数据库表名 HQL的代码如下

        String hqlQuery = FROM Catalog

  在写完HQL后 需要使用Session对象的createQuery(hqlQuery)方法创建一个查询对象 并通过list()方法得到相应的查询结果 代码如下

        List results = dom jSession createQuery(hqlQuery) list()

  下面的代码将枚举返回结果中所有的数据 每一行对应XML文档中的一个catalog节点 并将catalog加入到每一个文档对象的根元素中

  

  for (int i = i < results size() i++)             Element catalog = (Element) results get(i)         rootElement add(catalog)    

  下面的代码使用XMLWriter对象将数据输出到XML文档对象中

        XMLWriter output = new XMLWriter(new FileWriter(new File( c /catalog/catalog xml ))) output write(document)

  在这一节我们将使用Hibernate API删除一行记录 我们需要在catalog delete xml中指定要删除的行 首先创建一个Configuration对象 并将catalog hbm xml加入到Configuration对象中

   configuration config = new Configuration() config addFile( catalog hbm xml )

  下面的代码将创建一个SessionFactory对象 并使用openSession方法打开一个会话

   sessionFactory sessionFactory = config buildSessionFactory() session = sessionFactory openSession()

  下面的代码将使用DOM J模式创建一个Session对象 这个Session对象和DOM J将拥有同样的连接 事务和上下文属性 代码如下

        Session dom jSession = session getSession(EntityMode DOM J)

  创建一个事务 代码如下

        tx = session beginTransaction()

  创建一个SAXReader对象用来分析XML文档 catalog delete xml 代码如下

   SAXReader saxReader = new SAXReader() Document document = saxReader read(xmlDocument)

  下面的代码将得到catalog节点对象 并创建一个Iterator对象(为了枚举这个节点的字节点) 代码如下

   List list = document selectNodes( //catalog ) Iterator iter = erator()

  下面的代码将枚举catalog中的所有数据 并将Catalog删除 代码如下

  

  while (iter hasNext())             Object catalog = iter next()         dom jSession delete( Catalog catalog)    

  最后需要将Session保存 并关闭Session 代码如下

cha138/Article/program/Java/ky/201311/28181

相关参考

知识大全 同步两个SQLServer数据库

同步两个SQLServer数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如何同步两个SQ

知识大全 如何通过触发器实现数据库的即时同步

问题如何通过触发器实现数据库的即时同步?  解答具体的解决方法请参考下文  即时同步两个表的示例如下:    测试环境如下:SQLSever数据库远程主机名:xz用户名:sa密码:无数据库名:test

知识大全 使ACCESS数据库保持同步

使ACCESS数据库保持同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 SQL Server数据库同步问题

SQLServer数据库同步问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们可以通过数据

知识大全 MYSQL数据库主主同步实战

MYSQL数据库主主同步实战  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MYSQL支持单向异

知识大全 解决不同字符集数据库间的数据同步问题

  解决不同字符集数据库间的数据同步问题  首先在原数据库上做一个视图对保存汉字的字段加包函数utl_raw_cast_to_raw(保存汉字的字段)  在新数据库上做个数据库连接连接指向原数据库之后

知识大全 怎样使两台服务器的oracle9i的数据同步

  高机复制就是物化视图  物化视图是包括一个查询结果的数据库对像它是远程数据的的本地副本或者用来生成基于数据表求和的汇总表物化视图存储基于远程表的数据也可以称为快照    物化视图可以查询表视图和其

知识大全 关于OracleRac数据不同步

关于OracleRac数据不同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  现在有这样的环境

知识大全 Java多线程共享数据、同步、通信

Java多线程共享数据、同步、通信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一线程共享数据

知识大全 为什么要进行数据同步

Java多线程初学者指南(9):为什么要进行数据同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!