使用Hibernate开发应用,一种方法是下载Hibernate相关的jar文件,然后再项目在添加引用。由于Hibernate涉及的库比较多,这种方法比较麻烦,因此本教程使用Maven来管理项目。关于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可以 下载 本例做为后续教程的基础。