天之狼子

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 北方苍狼 阅读(408) 评论(0)  编辑  收藏 所属分类: JJpStudy


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


网站导航: