当前位置:支点网 >> 资讯
滚动新闻:

利用Hibernate优势加快 SCA 模块实现

作者:张俊青  来源:developerWorks 中国  时间:2008-7-3 11:26:52
SCA(Service Component Architecture)作为服务组件体系结构,将所有的集成构件都描述为具有定义明确的接口的服务组件。SCA 还引入了模块的概念,它将服务组件集中到一起,并提供服务的进一步说明和封装。

 

 

  配置数据库连接信息
  将StockModule发布到WID中的Websphere Process Server v6.0,然后在管理控制台增加名称为jdbc/localdb的JNDI配置,并保证测试连接成功:

  Step1: 设置DB2_JDBC_DRIVER_PATH,指定DB2 JDBC驱动的位置
  例如:C:\Program Files\IBM\SQLLIB\java

  Step2: 新建J2C认证信息

  在Security -> Global security -> JAAS Configuration -> J2C Authentication data中,新增J2C认证信息,这里的用户名和密码是为登录数据用的。

  图-15:新增J2C认证数据

 

  Step3: 新增JDBC Providers:DB2 Legacy CLI-based Type 2 JDBC Driver
  选择Resources -> JDBC Providers 菜单,点击New按钮:

  图-16:新增JDBC Providers

 

  保存之后,在其Data Sources属性中,新增jndi_localdb的JNDI配置:

  图-17:新增jndi_localdb的JNDI配置

 

  在module.stock.implementation目录中创建hibernate.cfg.xml并进行配置

  主要配置以下几项:

  hibernate.connection.datasource:jdbc/localdb(JNDI名称)
  connection.pool_size:1
  dialect:org.hibernate.dialect.DB2Dialect
  show_sql:true(将Hibernate生成的SQL语句以SystemOut的方式输出到日志中)
  mapping resource:引入Hibernate映射文件
  配置完毕的hibernate.cfg.xml文件如下表:

  清单-3: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">
  <hibernate-configuration>                                                        
  <session-factory>                                                            
  <!-- Database connection settings, we use jndi here -->                  
  <property name="hibernate.connection.datasource">              
  jdbc/localdb</property>                                                          
  <property name="connection.pool_size">1</property>       
  <!-- SQL dialect -->                                                     
  <property name="dialect">                                      
  org.hibernate.dialect.DB2Dialect</property>                                      
  <!-- Enable Hibernate's automatic session context management -->         
  <property name="current_session_context_class">                
  thread</property>                                                                
  <!-- Disable the second-level cache  -->                                 
  <property name="cache.provider_class">                         
  org.hibernate.cache.NoCacheProvider</property>                                   
  <!-- Echo all executed SQL to stdout -->                                 
  <property name="show_sql">true</property>                
  <mapping resource=                                                          
  "/gen/src/module/stock/implementation/Stock.hbm.xml"/>                    
  <mapping resource=                                                          
  "/gen/src/module/stock/implementation/StockType.hbm.xml"/>                
  <mapping resource=                                                          
  "/gen/src/module/stock/implementation/StockAccount.hbm.xml"/>             
  <mapping resource=                                                          
  "/gen/src/module/stock/implementation/StockHolder.hbm.xml"/>              
  <mapping resource=                                                          
  "/gen/src/module/stock/implementation/StockMemo.hbm.xml"/>                
  </session-factory>                                                           
  </hibernate-configuration>                                                       

  该文件将在实例化SessionFactory的时候被引用,Hibernate将根据此文件创建数据库连接池,并根据其中的mapping 定义建立*.hbm.xml与JavaBean之间的映射关系。有关SessionFactory,请参考实现StockService模块一节的内容。

  3.连接到sample数据库并创建所需数据表

  在本文所附的StockModule.rar中,在StockModule\gen\src\module\stock\implementation路径下包含一个名为 create_db_objects.sql的文件,运行db2cmd并连接到sample数据库上,

  db2 connect to sample

  然后使用下列命令提交create_db_objects.sql文件来创建所需的表:

  db2 –td; -f create_db_objects.sql

  项目中还有一个init_db_objects.sql文件来向所创建的表中插入一些测试数据,请执行下列命令:

  db2 –td; -f init_db_objects.sql

  4.创建Java类

  在创建图-2所示的类图的同时,我们已经创建了下列JavaBean:

  module.stock.implementation.StockType
  module.stock.implementation.StockMemo
  module.stock.implementation.StockHolder
  module.stock.implementation.StockAccount
  module.stock.implementation.Stock
  使用WebSphere Integration Developer,程序员能够以模型驱动的方式在建模的过程中创建类图和对应的Java类。

  5.创建Hibernate映射文件

  Hibernate映射文件定义的是数据库表的字段和JavaBean的属性之间的映射关系,这种映射关系除了一般字段与字段的直接对应关系外,还包括表与表之间的多对一,一对多,多队多的对应关系。Hibernate将根据这些映射文件,自动生成SQL语句,并把从数据库中取得的对象填充到JavaBean的简单属性或复杂属性中。

  这一节中,我们将介绍如何为本例中的各个JavaBean构造Hibernate映射文件,并将揭示以下技巧:

  如何映射id主键以及id值的生成方法
  如何使用数据库提供的sequence对象生成id
  如何映射多对一关系
  如何定义组合主键映射
  创建StockType.hbm.xml – 最一般的情形

  StockType是最简单的JavaBean,没有复杂的映射关系,StockType.hbm.xml定义StockType这个JavaBean和数据库表StockType之间的映射关系:

  清单-4:stockType表定义

  CREATE TABLE stockType(
  id                VARCHAR(10) NOT NULL,
  typeName          VARCHAR(20),
  CONSTRAINT pk_stockType PRIMARY KEY(id)
  );

  清单-5:StockType类定义

  package module.stock.implementation;
  import java.io.Serializable;
  public class StockType implements Serializable {
  private String id;
  private String typeName;
  //Getters and setters…
  … …
  }

  清单-6:StockType.hbm.xml定义

  <?xml version="1.0"?>                                           
  <!DOCTYPE hibernate-mapping PUBLIC                              
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"                
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  <hibernate-mapping package="module.stock.implementation">       
  <class name="StockType" table="StockType"
  lazy="true">      
  <comment>Stock Type table</comment>                     
  <id name="id">                                          
  <generator class="assigned" />                      
  </id>                                                   
  <property name="typeName"/>                             
  </class>                                                    
  </hibernate-mapping>

  - package: 指明 class name=”StockType”所代表的JavaBean的package路径。
  - table: 指明与StockType JavaBean建立映射关系的表名。
  - comment: 对此映射文件的注释
  - id: 主健定义,必须唯一,如果StockType表中的字段名不是id,则需要用column=”idName”来说明,例如:<id name="id" column="idName">
  - generator: 指定主键值的产生算法,assigned为用户指定。可供选择的还有: sequence(使用数据库提供的sequence对象,Oracle, DB2等数据库支持,本例将用到sequence), increment, identity, hilo, seqhilo, uuid, guid, native,select foreign等,关于这些id生成算法的具体情况,请参考Hibernate reference documentation。
  - property:指定JavaBean属性与数据表字段之间的映射,如果列名与JavaBean属性名不相同,则需要增加column=”” 来说明。如<property name="typeName" column="name"/>。

  创建Stock.hbm.xml – 定义多对一关系

  Stock(证券)类有一个stkType属性,类型为StockType(证券类别),一个证券类别可以有多个证券,多个证券可能属于同一个证券类别,所以它们之间的关系是多(Stock)对一(StockType)的关系,我们使用many-to-one来定义这种关系。其他字段直接映射即可。

  清单-7:stock表定义

  CREATE TABLE stock(
  id                  VARCHAR(10) NOT NULL,
  stkName             VARCHAR(40),
  stkTypeId           VARCHAR(10),
  CONSTRAINT pk_stock PRIMARY KEY (id)
  );

  清单-8:Stock类定义-6:StockType.hbm.xml定义

  package module.stock.implementation;
  import java.io.Serializable;
  public class Stock implements Serializable {
  private String id;
  private String stkName;
  private String stkTypeId;
  private StockType stkType;
  //Getters and setters
  ……
  }

  清单-9:Stock.hbm.xml定义

  <?xml version="1.0"?>
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  <hibernate-mapping package="module.stock.implementation">
  <class name="Stock" table="Stock" lazy="true">
  <comment>Stock table</comment>     
  <id name="id">
  <generator class="assigned" />
  </id>      
  <property name="stkName"/>
  <property name="stkTypeId" />
  <many-to-one name="stkType" class="StockType"
  insert="false" update="false">
  <column name="stkTypeId"/>
  </many-to-one>
  </class>   
  </hibernate-mapping>

  -many-to-one:定义stkType属性与StockType类之间的多对一关系。Name为Stock类的stkType属性,class指定该属性的类型, <column>指定在Stock表中与StockType进行连接的属性名,在本例中为stkTypeId。

  创建StockHolder.hbm.xml – 使用数据库的sequence

 

[1] [2] [3] [4] [5
责任编辑:李伟
【字体: 】【打印此文】【关闭窗口】【论坛
相关信息
相关评论