上篇Hibernate從入門到精通(一)JDBC簡介,我們主要對JDBC進行了簡單介紹和使用說明,這次我們做一個Hibernate簡單實例,通過這個實例對比Hibernate和JDBC,了解Hibernate的優勢所在。在此之前,讀者有必要了解一下Hibernate中的每個jar包的作用和每個jar文件包主要負責的工作,這裡我們不做過多的解釋。
1、導入jar文件
導入antlr-2.7.6.jar
導入commons-collections-3.1.jar
導入dom4j-1.6.1.jar
導入hibernate-jpa-2.0-api-1.0.1.Final.jar
導入hibernate3.jar
導入javassist-3.12.0.GA.jar
導入jta-1.1.jar
導入mysql-connector-java-3.1.13-bin.jar
導入slf4j-api-1.6.1.jar
這一部分沒有過多的解釋,只需要大家了解每個jar文件包的作用即可。
2、編輯實體
package com.entity; import java.util.Date; public class User { private String id; private String name; private String password; private Date createTime; private Date expireTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getExpireTime() { return expireTime; } public void setExpireTime(Date expireTime) { this.expireTime = expireTime; } }
這一步與普通的JDBC沒有太大的區別,在JDBC中我們也可以通過實體封裝需要的信息,如果你對面向對象編程有一定的了解相信不難理解。
3、創建數據庫、表
創建數據庫
創建表
顯示表結構
這一步就是一個創建數據庫的過程,與我們平常做項目使用的數據庫結構和過程也沒有區別。
4、創建實體映射文件User.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> <class name="com.entity.User"> <id name="id"> <generator class="uuid"/> </id> <property name="name"/> <property name="password"/> <property name="createTime"/> <property name="expireTime"/> </class> </hibernate-mapping>
從這一步開始,JDBC開始與Hibernate有一定的區別,這裡我們重點講一下User.hbm.xml的作用。User.hbm.xml的作用簡而言之就是對實體和數據庫中的表進行相呼應,保證我們對實體對象進行的操作都會在數據庫中產生與之對應響應的結果。但僅這樣的配置還有一個問題那就是我們如何將能夠將數據庫中的表與對象進行關聯。這就需要接下來的配置了。
5、創建數據庫連接和映射配置文件 hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <mapping resource="com/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>
這裡的重點區別在於,通過映射說明<mapping resource="com/entity/User.hbm.xml"/>我們可以將數據庫連接和映射進行聯系,也就是說通過 hibernate.cfg.xml的配置,我們就可以找到具體的實體和數據庫表對應關系。到此為止我們所有的配置就進行完畢了,接下來做一個測試。
6、創建測試文件 Client.java
package test; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.entity.User; public class Client { public static void main(String[] args) { //讀取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //建立SessionFactory SessionFactory factory = cfg.buildSessionFactory(); //取得session Session session = null; try { session = factory.openSession(); //開啟事務 session.beginTransaction(); User user = new User(); user.setName("NAME1"); user.setPassword("PWD1"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //保存User對象 session.save(user); //提交事務 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); //回滾事務 session.getTransaction().rollback(); }finally { if (session != null) { if (session.isOpen()) { //關閉session session.close(); } } } } }
程序執行結果如下:
通過上述實例的演示,對比上一篇Hibernate從入門到精通(一)JDBC簡介文章中我們提到的JDBC操作的缺陷可以看出,我們向數據庫中添加一個對象只需要通過HibernateAPI中最核心的Session接口,調用save()方法即可,不需要我們在代碼中編寫SQL語句,也不需要程序員對SQL語言過多的了解,這就體現了Hibernate完全面向對象編程。
到此為止,我們已經基本了解了Hibernate的基本使用步驟,接下來我們會分別講解一些Hibernate中的一些重點概念和使用。