hibernate介紹:html
Hibernate是一個開源的對象關係映射框架,它對JDBC進行了輕量級的對象封裝,使Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。java
它不只提供了從java類到數據庫表之間的映射,也提供了數據查詢和恢復機制。相對於使用JDBC和SQL來手工操做數據庫,Hibernate能夠大大減小mysql
操做數據庫的工做量。另外Hibernate能夠利用代理模式簡化載入類的過程,這將大大減小利用Hql從數據庫提取數據的代碼編寫量,從而節約開發時間程序員
和開發成本Hibernate能夠和多種web服務器或者應用服務器良好集成,現在已經支持幾乎全部的流行數據庫服務器。web
2. Hibernate原理:sql
Hibernate技術本質上是一個提供數據庫服務的中間件。Hibernate的工做原理,他是利用數據庫以及其餘一些配置文件如:hibernate.cfg.xml,數據庫
xxx.hbm.xml等來爲應用程序提供數據持久化服務的。編程
3. 配置Hibernate 聲明:我使用的是JDK1.7,Hibernate3.6.0服務器
3.1 導入相關Jar包:Hibernate模式不僅是本身內部實現,一樣也導入了許多外部的jar包,下面是Hibernate3.6.0框架的基本jar包session
我使用的是mysql數據庫,能夠根據本身使用的數據庫添加相關驅動Jar包
3.2 先建立一個User實體
1 package com.a_helloworld; 2 3 public class User { 4 5 private int id; 6 private String name; 7 public int getId() { 8 return id; 9 } 10 public void setId(int id) { 11 this.id = id; 12 } 13 public String getName() { 14 return name; 15 } 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 @Override 21 public String toString() { 22 return "User [id=" + id + ", name=" + name + "]"; 23 } 24 25 26 }
3.3 配置User實體在數據庫表的映射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 package="com.a_helloworld"> <!-- 屬性table 表示在數據庫中的表名 --> <class name="User" table="user_1" > <id name="id" column="id" type="int"> <!-- 值native表示會根據數據庫來建立不一樣的主鍵生成策略 --> <generator class="native"></generator> </id> <property name="name" column="name" type="string"></property> </class> </hibernate-mapping>
3.4 簡單配置hibernate.cfg.xml配置文件,這個文件名能夠隨便修改(xxx.cfg.xml),可是沒多大意義,通常不建議修改。配置的信息以下:
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory name="foo"> 7 8 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 9 <property name="connection.username">root</property> 10 <property name="connection.password">123456</property> 11 <property name="connection.url">jdbc:mysql:///user</property> 12 13 <!-- 要根據本身使用的數據庫來配置相對應的屬性,也成方言,針對不一樣數據庫 14 關於怎麼配置能夠查看HibernateAPI 15 --> 16 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 17 18 <!-- Hibernate 創建的SQL語句會顯示在控制檯 --> 19 <property name="hibernate.show_sql">true</property> 20 21 <!-- 選擇方案,經常使用值:validate | update | create | create-drop --> 22 <property name="hbm2ddl.auto">update</property> 23 24 <mapping resource="com/a_helloworld/user.hbm.xml"/> -- 導入實體映射配置,程序每次啓動都會自動檢索 25 26 </session-factory> 27 </hibernate-configuration>
以上Hibernate簡單配置已經基本完成,能夠添加一個測試類來測試是否成功
package com.a_helloworld; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.Session; import org.junit.Test; public class Demo { private static SessionFactory sf = new Configuration()// .configure("hibernate.cfg.xml")// .buildSessionFactory(); @Test public void addUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 建立一個Session
tran = session.beginTransaction(); //開啓事務
User user = new User(); user.setName("張三"); session.save(user); tran.commit();//事務提交
}catch(Exception e){ tran.rollback(); //事務回滾
throw(e); }finally{ session.close(); //關閉session
} } @Test public void getUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 建立一個Session
tran = session.beginTransaction(); //開啓事務
/*這裏指明你要得到哪一個類型,Hibernate會根據類名查詢映射配置文件到數據庫查詢哪張表,根據指定 * id查詢實體,經過反射機制建立實體對象 */ User user = (User) session.get(User.class, 1); //執行查詢,get
tran.commit();//事務提交
}catch(Exception e){ tran.rollback(); //事務回滾
throw(e); }finally{ session.close(); //關閉session
} } @Test public void updateUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 建立一個Session
tran = session.beginTransaction(); //開啓事務
User user = new User(); user.setId(1);//這裏指定了要更新的數據id爲1
user.setName("李四");// 把名字 「張三」 修改成 「李四」
session.update(user);//執行更新
tran.commit();//事務提交
}catch(Exception e){ tran.rollback(); //事務回滾
throw(e); }finally{ session.close(); //關閉session
} } @Test public void deleteUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 建立一個Session
tran = session.beginTransaction(); //開啓事務
User user = new User(); user.setId(1);//這裏指定了要更新的數據id爲1
session.delete(user); //執行刪除
tran.commit();//事務提交
}catch(Exception e){ tran.rollback(); //事務回滾
throw(e); }finally{ session.close(); //關閉session
} } }