分享
 
 
 

hibernate使用

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

将Middlegen-Hibernate解压缩到f:\temp\middlegen

在mysql中创建数据库test,创建表t_user,字段id*(int),name varchar(5),sex tinyint(4),填入

1 tc 1 , 2 wx 0 , 3 yyy 1

修改config下的database目录下的mysql.xml文件

<property name="database.script.file" value="${src.dir}/sql/${name}-mysql.sql"/>

<property name="database.driver.file" value="${lib.dir}/mysql-connector-java-3.0.15-ga-bin.jar"/>

<property name="database.driver.classpath" value="${database.driver.file}"/>

<property name="database.driver" value="org.gjt.mm.mysql.Driver"/>

<property name="database.url" value="jdbc:mysql://localhost/test"/>

<property name="database.userid" value="root"/>

<property name="database.password" value=""/>

<property name="database.schema" value=""/>

<property name="database.catalog" value=""/>

<property name="jboss.datasource.mapping" value="mySQL"/>

修改目录下的build.xml文件

<!DOCTYPE project [

<!ENTITY database SYSTEM "file:./config/database/mysql.xml">

]>

<property file="${basedir}/build.properties"/>

<property name="name" value="test"/>

<property name="src_dir" value="G:\temp\Middlegen\src"/>

<property name="package_name" value="com.tc.model.users"/>

<property name="build.gen-src.dir" value="${src_dir}/gen-src"/>

这里还有一个属性genXDocletTags,如果设置为true,则生成的代码将包含xdoclet tag,这为以后在开发过程中借助xdoclet进行映射调整提供了帮助。

然后启动middlegen,这里配置一个批处理文件run.bat:

g:

path d:\lib\ant\bin

ant

运行后出现下面界面:

1 Domain Class Name

对应POJO 的类名(POJO 在Hibernate 语义中理解为数据库表所对应的Domain Object。这里的POJO就是所谓的“Plain Ordinary Java Object”,简单的可以理解为一个不包含逻辑代码的值对象(Value Object 简称VO))

2 Key Generator

主键产生器,可选项说明:

1) Assigned

主键由外部程序负责生成,无需Hibernate参与。

2) hilo

通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

3) seqhilo

与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

4) increment

主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

5) identity

采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。

6) sequence

采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。

7) native

由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

8) uuid.hex

由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

9) uuid.string

与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

10) foreign

使用外部表的字段作为主键。

通常利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性,但由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(自动增长或序列)。我们可以在数据库提供的主键生成机制上,采用native的主键生成方式。

对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。

3 如果需要采用定制的主键产生算法,则在此处配置主键生成器,主键生成器必须实现net.sf.hibernate.id.IdentifierGenerator 接口。

4 Schema Name 数据库Schema Name。

5 Persister

自定义持久类实现类类名。如果系统中还需要Hibernate 之外的持久层实现机制,如通过存储过程得到目标数据集,甚至从LDAP中获取数据来填充我们的POJO。

6 Enable proxies

是否使用代理(用于延迟加载[Lazy Loading])。

7 Dynamic Update

生成Update SQL 时不包含未发生变动的字段属性,这样可以提升SQL执行效能。

8 Mutable

类是否可变,默认选定可变。如果不希望应用程序对此类对应的数据记录进行修改(如对于数据库视图),则可将取消其选定状态,之后对此类的Delete和Update操作都将失效。

以上是针对Class的设置,同样,在MiddleGen中,我们也可以设定字段属性。在MiddleGen中选定某个字段,界面下方即出现字段设置栏:

1 Hibernate mapping specialty

映射类型:

Key :主键

Property :属性

2 Java property name

字段对应的Java 属性名

3 Java Type

字段对应的Java 数据类型

4 Column updateable

生成Update SQL时是否包含本字段。

5 Column insertable

生成Insert SQL时是否包含本字段。

单击窗口顶部的Generate 按钮,MiddleGen 即为我们生成这些数据库表所对应的Hibernate映射文件。在MiddleGen根目录下的\build\gen-src\com\tc\model\users目录中,我们可以看到对应的以.hbm.xml 作为后缀的映射文件,映射文件对应了数据库的一个表。

下面我们要需要根据文件生成对应的POJO。

POJO 的生成工作可以通过Hibernate Extension 来完成,Hibernate Extension 的

tools\bin目录下包含三个工具:

1. hbm2java.bat

根据映射文件生成对应的POJO。通过MiddleGen 我们已经得到了映射文件,

下一步就是通过hbm2java.bat工具生成对应的POJO。

2. class2hbm.bat

根据POJO class 生成映射文件,这个工具很少用到,这里也就不再详细介绍。

3. ddl2hbm.bat

由数据库导出库表结构,并生成映射文件以及POJO。这个功能与MiddleGen

的功能重叠,但由于目前还不够成熟(实际上已经被废弃,不再维护),提供

的功能也有限,所以我们还是采用MiddleGen生成映射文件,之后由hbm2java

根据映射文件生成POJO 的方式。

首先我们需要配置一些参数,打开tools\bin\setenv.bat 文件,修改其中的JDBC_DRIVER和HIBERNATE_HOME环境变量,使其指向我们的实际JDBC Driver文件和Hibernate所在目录,同时检查一下环境变量CP中的各个项目中是否实际存在,特别是%CORELIB%下的jar

文件,某些版本的发行包中,默认配置中的文件名与实际的文件名有所出入(如%CORELIB%\commons-logging.jar, 在Hibernate 发行包中,可能实际的文件名是commons-logging-1.0.3.jar,诸如此类)。

set JDBC_DRIVER=G:\temp\Middlegen\lib\mysql-connector-java-3.0.15-ga-bin.jar

set HIBERNATE_HOME=G:\temp\hibernate-2.1.6

……

set CP=%JDBC_DRIVER%;%PROPS%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\commons-logging-1.0.4.jar;%CORELIB%\commons-collections-2.1.1.jar;%CORELIB%\commons-lang-1.0.1.jar;%CORELIB%\cglib-full-2.0.2.jar;%CORELIB%\dom4j-1.4.jar;%CORELIB%\odmg-3.0.jar;%CORELIB%\xml-apis.jar;%CORELIB%\xerces-2.4.0.jar;%CORELIB%\xalan-2.4.0.jar;%LIB%\jdom.jar;%LIB%\..\hibernate-tools.jar

然后运行hbm2java g:\temp\middlegen\src\*.xml –ouptput=c:\sample\ (第一个参数是?.hbm.xml文件所在路径,第2个参数是生成的java所要存放的路径)

即可以将pojo文件导出

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有