转载 http://www.diybl.com/course/3_program/java/javajs/2008819/136428.html 了Hibernate的主要组件

Hibernate第一天

1.下载Hibernate
Hibernate Home Page总要知道:http://www.hibernate.org/
改网站介绍了Hibernate的主要组件:


Hibernate Core
Hibernate的核心部分,主要用于Java开发,本地API以及XML映射元数据
Hibernate Annotations
:一些Map类,用于JDK 5.0+annotations
Hibernate EntityManager
:标准的Java持久化API,用于SEEE
Hibernate Shards
:水平数据分区框架
Hibernate Validator
:数据集成annotations和验证API
Hibernate Search
HibernateLucence集成,用于索引和检索数据
ibernate Tools
:用于EclipseAnt开发
NHibernate
:用于.Net服务的Hibernate
JBoss Seam
:用于JSFAjaxEJB 3.0/Java EE 5.0用用程序的框架

 

这些功能中,Hibernate Core自然是核心和基础了,所以还是从Hibernate Core开始学习。
下载到Hibernate Core之后,将其解压缩到本地目录H_Home。例如D:/common/hibernate-distribution-3.3.0.GA
在发布包中,包含了Hibernate的五种语言的文档。
Hibernate
依赖的类库,笔者使用的Hibernate的版本为3.3.0,在lib文件夹中,Hibernate已经将依赖的类库进行了组织,其中required目录下的类库为必须使用的类库。
project目录中包含了HibernateMaven工程。

 

2.既然已经准备好了Hibernate,那么就根据Hibernate的教程进行学习吧。
首先开始第一个样例程序的学习。
学习点一    HSQLDB转换为MySQL
(HSQLDB
是一个轻量级的100% JavaSQL数据库引擎,参考http://hsqldb.org/)
之所以将HSQLDB切换为MySQL只是为了熟悉进行数据库切换的办法,毕竟产品开发时,数据库一般不会使用HSQLDB
>
下载并安装MySQL5(注意将charset设置为UTF-8)
>
下载MySQL Java Connector
>
修改样例程序的Hibernate Configuration如下:


<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">15</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

 

注意,在上面的配置中,基本上前面四行是必须修改的,但是笔者在第一次配置时,没有将dialect进行对应的修改,导致运行时发生了错误。
因为不同的dialect会生成针对不同数据库的SQL语句。
例如如果使用教程中的org.hibernate.dialect.HSQLDialect,那么在运行时就会提示控制台错误:

 

[java] 01:19:38,125 DEBUG SchemaExport:377 - drop table EVENTS if exists
[java] 01:19:38,125 DEBUG SchemaExport:362 - Unsuccessful: drop table EVENTS if exists
[java] 01:19:38,125 DEBUG SchemaExport:363 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists' at line 1
[java] 01:19:38,125 DEBUG SchemaExport:377 - create table EVENTS (EVENT_ID bigint generated by default as identity (start with 1), EVENT_DATE timestamp, title varchar(255), primary key (EVENT_ID))
[java] 01:19:38,140 ERROR SchemaExport:348 - Unsuccessful: create table EVENTS (EVENT_ID bigint generated by default as identity (start with 1), EVENT_DATE timestamp, title varchar(255), primary key (EVENT_ID))
[java] 01:19:38,140 ERROR SchemaExport:349 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'generated by default as identity (start with 1), EVENT_DATE timestamp, title var' at line 1

 

当切换为正确的org.hibernate.dialect.MySQL5Dialect时,控制台日志如下:

 

[java] 01:21:45,187 DEBUG SchemaExport:377 - drop table if exists EVENTS
[java] 01:21:45,203 DEBUG SchemaExport:377 - create table EVENTS (EVENT_ID bigint not null auto_increment, EVENT_DATE datetime, title varchar(255), primary key (EVENT_ID))
[java] 01:21:45,203  INFO SchemaExport:268 - schema export complete
[java] Hibernate: insert into EVENTS (EVENT_DATE, title) values (?, ?)

 

所以在切换数据库类型时,一定要将dialect也进行切换。(详细的配置信息参考H_HOME/project/etc/hibernate.properties)

 

3.配置日志
现在的Hibernate使用了SLF4J作为日志机制。在运行时,需要进行动态的配置日志。
现在使用比较多的是Log4j,此时需要进入H_HOME,将H_HOME/project/etc下面的log4j.properties拷贝到Hibernate工程的src目录下,在需要的情况下,可以对log4j.properties进行自定义的配置。
但是仅仅拷贝改为见还是不可以的,必须将以下两个类库拷贝到类路径中:

否则就会在控制台打印如下错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".(缺少slf4j-log4j12-1.5.2.jar)
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/apache/log4j/Level(
缺少log4j-1.2.12.jar)

 

4.关于drop-recreate
hibernate.cfg.xml配置中,教程中的配置文件包含如下的内容:
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
改配置会在每次创建数据库表之前先将表drop。这样如果在运行EventManager时,如果先执行一次store,再执行一次list,就看不到任何记录。
所以在运行时,一旦数据库表创建成功,那么就需要关闭该配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章