天之狼子

Java技术

统计

留言簿(1)

Other Blogers

我的链接

阅读排行榜

评论排行榜

在JJpStudy中使用Hibernate

JJp 的基本数据是于伶的《学日语背单词 1.0 》所带的 japan.mdb 中的单词表和《新版标准日本语》词汇表( Excel ),而我学过的数据库系统是 Oracle 和 mysql 。在这些格式中转换需要很大的工作量,我写了几个 Java 类来做转换,还没有做完整。同学说,使用 Hibernate 可以避免这个问题,并且可以可以很快的封装数据层,所以决定用她了。

 

从 Hibernate3.0 中文参考手册大致浏览了一下,然后使用 MyEclipse 的工具配置并生成了实体类,初次使用,感觉非常棒!下面介绍一下配置过程。

首先得有数据库,这里使用 Mysql5.0 。 Hibernate 也可以自动生成 Schema ,但是已经有数据库(由 PowerDesigner9.5 生成)和数据(从 japan.mdb 和 Excel 导入)了,所以没那么做,今后有机会再研究一下。 JJp 数据库结构如下:

vocabulary.GIF
    首先,在
MyEclipse 里配置数据库连接。在 Pereferences 里 MyEclipse 下有一个 Database Explorer 选项里配置 Mysql 驱动程序“ MySQL Connector/J Driver ”,主要是选择 mysql-connector-java-5.0.0-beta 的 jar 包,如果成功,驱动名称前面会出现对号。

然后,将项目转换为 Hibernate 兼容。方法是右键点击项目名称,在 MyEclipse 里选择“ Add Hibernate Capabilites ”。这时会出现对话框,依次选择库文件夹 Library Folder 、配置文件路径 Configuration Folder 并自动创建 Session 工厂类(用于获取 Hibernate 的 Session ),成功之后,出现 hibernate.cfg.xml 配置工具。

接下来是配置 hibernate.cfg.xml 。数据库连接选择 JDBC 并使用 MySQL Connector/J Driver 创建一个 profile ,右边参数里添加一个 show-sql 设为 true. 。配置文件如下:

< hibernate-configuration >
< session-factory >
    
< property  name ="myeclipse.connection.profile" > jjp </ property >
    
< property  name ="connection.url" >
        jdbc:mysql://localhost/jjp
    
</ property >
    
< property  name ="connection.username" > root </ property >
    
< property  name ="connection.password" > password </ property >
    
< property  name ="connection.driver_class" >
        com.mysql.jdbc.Driver
    
</ property >
    
< property  name ="dialect" > org.hibernate.dialect.MySQLDialect </ property >
    
< property  name ="show_sql" > true </ property >
</ session-factory >
</ hibernate-configuration >

    下一步是添加 Mapping( 数据库表与 Java 实体类的映射 ) 。打开 Database Explorer 视图,建立一个数据库连接,这里还是使用上面的 MySQL Connector/J Driver ,如果驱动没设置好,相关的操作都不会成功。然后连接到数据库上,展开 Tables ,右键某个表,选择 生成映射 Generate hibernate mapping ;选择实体类位置和 ID 生成器为“ sequence ”即可。将所有表的映射生成完毕,自动配置就结束了。这时 hibernate.cfg.xml 如下:

<? xml version='1.0' encoding='UTF-8' ?>

<! DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
<!--  Generated by MyEclipse Hibernate Tools.                    -->
< hibernate-configuration >
< session-factory >
     <!--  

    <property name="connection.useUnicode">true</property>

    <property name="connection.characterEncoding">GBK</property>  

    
-->   

    
< property  name ="myeclipse.connection.profile" > jjp </ property >

    
< property  name ="connection.url" > jdbc:mysql://localhost/jjp?characterEncoding=gbk </ property >

    
< property  name ="connection.username" > root </ property >

    
< property  name ="connection.password" > password </ property >

    
< property  name ="connection.driver_class" >

       com.mysql.jdbc.Driver

    
</ property >

    
< property  name ="dialect" >

       org.hibernate.dialect.MySQLDialect

    
</ property >
  
< property  name ="connection.pool_size" > 10 </ property >

    
< property  name ="show_sql" > true </ property >
      <
mapping  resource ="jjp/db/configs/Word.hbm.xml"   />
      <
mapping  resource ="jjp/db/configs/Form.hbm.xml"   />
      <
mapping  resource ="jjp/db/configs/Derivation.hbm.xml"   />
      <
mapping  resource ="jjp/db/configs/RWordForm.hbm.xml"   />
      <
mapping  resource ="jjp/db/configs/RWordDerivation.hbm.xml"   />
</ session-factory >
</
hibernate-configuration >

实体类映射配置文件中以 Word.hbm.xml 为例:

<? xml version="1.0" encoding='UTF-8' ?>

<! DOCTYPE hibernate-mapping PUBLIC

                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" 
>
<!--  DO NOT EDIT: This is a generated file that is synchronized  -->

<!--  by MyEclipse Hibernate tool integration.                    -->

<!--  Created Sat Mar 11 15:33:08 CST 2006                          -->

< hibernate-mapping  package ="jjp.db" >

    
< class  name ="Word"  table ="word" >

        
< id  name ="wordId"  column ="word_id"  type ="long" >

            
< generator  class ="increment" />

        
</ id >

        
< property  name ="hiragana"  column ="hiragana"  type ="string"   />

        
< property  name ="chinese"  column ="chinese"  type ="string"   />

        
< property  name ="mean"  column ="mean"  type ="string"   />

        
< property  name ="example"  column ="example"  type ="string"   />

        
< set  name ="RWordDerivationSet"  inverse ="true" >

            
< key  column ="word_id" />

            
< one-to-many  class ="RWordDerivation" />

        
</ set >  

        
< set  name ="RWordFormSet"  inverse ="true" >

            
< key  column ="word_id" />

            
< one-to-many  class ="RWordForm" />

        
</ set >
    
</ class >
</ hibernate-mapping >

    如果没有特殊要求,

hibernate配置 方面的工作都结束了。下面介绍一下如何使用 hibernate 。

使用 Session 工厂类 HibernateSessionFactory 的方法 currentSession() 取得一个 Session ,然后就可以通过 Session 对数据库进行各种操作了。例如, JJp 中词汇表类 Vocabulary 取得所有单词的方法 getWords() 可以这样写:

public  Collection getWords()  {
        
if  (words  !=   null )
            
return  words;
        Session session 
=  HibernateSessionFactory.currentSession();
        Transaction tx 
=  session.beginTransaction();
        Collection result 
=  session.createQuery( " from Word " ).list();
        tx.commit();
        HibernateSessionFactory.closeSession();
        
return  result;
}

 

其中 session.createQuery("from Word") 的 ”from Word” 是 HQL , HQL 使用方法请查看 hibernate 参考手册。

在 HQL 方面有一个中文问题,下面代码

              Collection result = session.createQuery(

                            "from Word where chinese LIKE '%" + hiragana + "%'").list();

其中的 hiragana 在自动生成 SQL 语句的时候被转换成乱码,在网上查找,据说是 hibernate 版本的问题,但是网上的解决方法我没有成功,现在用了一个替代方案。

上面是 JJp 中使用 hibernate 的简要介绍。

现在 JJp 开发工具是 JDK1.5.0.6+Eclipse3.1.1+MyEclipse4.0.0.1GA+JBuilder2006 ,其他工具有 PowerDesigner9.5+ MysqlMigrationTool+RationalRose2002 等,数据库有 Access2003+Excel2003+Mysql5.0.19+Oracle9i 。

posted on 2006-03-13 22:59 北方苍狼 阅读(454) 评论(0)  编辑  收藏 所属分类: JJpStudy


只有注册用户登录后才能发表评论。


网站导航: