使用Hibernate开发应用,一种方法是下载Hibernate相关的jar文件,然后再项目在添加引用。由于Hibernate涉及的库比较多,这种方法比较麻烦,因此本教程使用Maven来管理项目。关于Maven的简单教程可以参见:
- Maven 使用指南(1): 概述
- Maven 使用指南(2): 第一个例子Hello World
- Maven 使用指南(3): 简述Maven工作过程
- Maven 使用指南(4): Maven Build 的阶段
- Maven 使用指南(5): Maven 自动依赖管理
- Maven 使用指南(6): 使用Maven插件
- Maven 使用指南(7): 使用Maven打包资源文件
- Maven 使用指南(8): 使用Maven管理多个项目
此外教程采用MySql 数据库为例,如果你使用Windows操作系统,可以安装WAMP系统(包括MySQL,Apache ,PHP等)也可以只安装MySQL。 Hibernate 使用其它数据库的方法大同小异。
管理MySQL的免费前端管理工具为HeidiSQL,你也可以使用命令行或是其它工具。
开始使用的示例数据库为Sales 数据库,可以参见Vaadin Web应用开发教程(46): 开始使用SQLContainer 。或是本地下载Sales.sql.
此外为方便起见 使用 Maven-Hibernate3插件,可以直接从数据库生成 映射文件和Java类代码。具体使用可以参见 Mojo。
开发环境使用Eclipse 或是 SpringSouce tool Suite (STS),这些都可以从网上免费下载。
首先创建一个Maven项目 HibernateTutorial.
修改pom.xml 添加于Hibernate相关的引用:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.6.Final</version>
</dependency>
<!-- Hibernate uses jboss-logging for logging, for the tutorials we will
use the sl4fj-simple backend -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
<!-- The tutorials use JUnit test cases to illustrate usage -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
</dependencies>
使用Maven-Hibernate 的 hbm2java (自动生成Java代码),hbm2hbmxml (自动生成.hbm.xml 映射文件) 和 hbm2cfgxml (自动生成最终的hibernate.cfg.xml文件)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<components>
<component>
<name>hbm2java</name>
<outputDirectory>src/main/java/</outputDirectory>
<implementation>jdbcconfiguration</implementation>
</component>
<component>
<name>hbm2hbmxml</name>
<outputDirectory>src/main/resources/</outputDirectory>
</component>
<component>
<name>hbm2cfgxml</name>
<outputDirectory>src/main/resources/</outputDirectory>
<implementation>jdbcconfiguration</implementation>
</component>
</components>
<componentProperties>
<drop>true</drop>
<configurationfile>/src/main/resources/hibernate.cfg.xml</configurationfile>
<packagename>com.pstreets.hibernate.demo.data</packagename>
</componentProperties>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
</dependencies>
</plugin>
其中hbm2java 通过 outputDirectory参数指明创建的Java代码的目录,hbm2hbmxml通过outputDirectory参数指明创建的映射文件的目录,本例使用缺省的资源目录src/main/resources ,因为我们使用MySQL plugin也添加了对mysql 的依赖。
hibernate.cfg.xml 为Hibernate的配置文件,本例使用如下配置来连接Mysql数据库的Sales数据库
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.pool_size">1</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Sales</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
在命令行运行 mvn hibernate3:hbm2java hibernate3:hbm2cfgxml hibernate3:hbm2hbmxml 自动生成java代码,.hbm.xml 映射文件及配置文件hibernate.cfg.xml。
到此时我们还没有写过一行代码。
下面我们就使用Hibernate 来读取Sales数据库的Customer表,并显示所有Customer的FirstName 和Last Name,代码如下
SessionFactory sessionFactory;
sessionFactory = new Configuration().configure().buildSessionFactory();
// create a couple of events...
Session session = sessionFactory.openSession();
session.beginTransaction();
List result = session.createQuery( "from Customer" ).list();
for ( Customer customer : (List<Customer>) result ) {
System.out.println( "Customer: " + customer.getFirstName()
+ " " + customer.getLastName() );
}
session.getTransaction().commit();
session.close();
if (sessionFactory != null) {
sessionFactory.close();
}
这里先不解释,但可以看出没有任何的SQL语句,就将Customer表的记录写到result 这个List对象中。结果如下:
Customer: Laura Steel
Customer: Susanne King
Customer: Anne Miller
Customer: Michael Clancy
Customer: Sylvia Ringer
Customer: Laura Miller
Customer: Laura White
Customer: James Peterson
Customer: Andrew Miller
Customer: James Schneider
Customer: Anne Fuller
Customer: Julia White
Customer: George Ott
Customer: Laura Ringer
Customer: Bill Karsen
Customer: Bill Clancy
Customer: John Fuller
Customer: Laura Ott
Customer: Sylvia Fuller
Customer: Susanne Heiniger
Customer: Janet Schneider
Customer: Julia Clancy
Customer: Bill Ott
Customer: Julia Heiniger
Customer: James Sommer
Customer: Sylvia Steel
Customer: James Clancy
Customer: Bob Sommer
Customer: Susanne White
Customer: Andrew Smith
Customer: Bill Sommer
Customer: Bob Ringer
Customer: Michael Ott
Customer: Mary King
Customer: Julia May
Customer: George Karsen
Customer: John Steel
Customer: Michael Clancy
Customer: Andrew Heiniger
Customer: Mary Karsen
Customer: Susanne Miller
Customer: Bill King
Customer: Robert Ott
Customer: Susanne Smith
Customer: Sylvia Ott
Customer: Janet May
Customer: Andrew May
Customer: Janet Fuller
Customer: Robert White
Customer: George Fuller
可以
下载
本例做为后续教程的基础。