1.Hibernate是什麼java
Hibernate是一個輕量級的ORMapping對象。主要用來實現Java和數據庫表之間的映射,除此以外還提供數據查詢和數據獲取的方法,能夠大幅度減小開發時人工使用SQL和JDBC處理數據的時間,解放編程人員95%的任務。mysql
如下是Hibernate的特徵(對應規則):sql
(1).類和表的對應數據庫
(2).類的屬性和表的字段對應編程
(3).類的實例和表中的具體一條記錄對應緩存
(4).一個類對應多個表,一個表也能夠對應多個類安全
(5).DB中的表能夠沒有主鍵,可是Object中必須設置主鍵字段session
(6).DB中表與表之間的映射成Object之間的關係app
(7).Object中屬性個數以及屬性名稱能夠和DB中表的字段數目以及字段名稱不一致ide
Object和DB的工做原理:
2.Hibernate有什麼
Hibernate將應用層從底層的JDBC/JTA API中抽象出來,而讓Hibernate去處理
Hibernate體系結構
·SessionFactory:針對單個數據庫映射關係通過編譯後的內存鏡像,是線程安全的的(不可變),它是生成Session的工廠。
·Session:表示應用程序層與持久存儲層之間的交互操做的一個單線程對象,此對象聲明週期很短,隱藏了JDBC的鏈接,也是Transaction工廠。
·Transaction:應用程序用來指定原子操做單元範圍的對象,它是單線程的,生命週期很短。它經過抽象將應用程序從底層具體的JDBC,JTA,CORBA事物隔離開。
·ConnectionProvider:生成JDBC鏈接的工廠(有數據庫鏈接池的做用),經過抽象將應用從底層的DataSource或者DriverManager隔離開,供開發者使用。
·TransactionFactory:生成Transaction的工廠,供開發者使用。
3.Hibernate入門:Hello World
咱們將完成如下的四個操做:Object,數據庫表,兩種配置文件,客戶端程序調用Hibernate接口。
第一步:建立工程,將hibernate-release中lib下的required下面的包所有jar包以及slf4j-log4j12-1.5.8.jar,log4j-1.2.16.jar以及JDBC驅動包導入工程下的lib目錄
第二步: Object類,有一下幾個字段:uuid,userId,name,age
1 package com.hb; 2 3 public class UserModel { 4 private String uuid; 5 private String userId; 6 private String name; 7 private int age; 8 public UserModel() { 9 // TODO Auto-generated constructor stub 10 } 11 public String getUuid() { 12 return uuid; 13 } 14 public void setUuid(String uuid) { 15 this.uuid = uuid; 16 } 17 public String getUserId() { 18 return userId; 19 } 20 public void setUserId(String userId) { 21 this.userId = userId; 22 } 23 public String getName() { 24 return name; 25 } 26 public void setName(String name) { 27 this.name = name; 28 } 29 public int getAge() { 30 return age; 31 } 32 public void setAge(int age) { 33 this.age = age; 34 } 35 }
第三步:建立數據庫的表(使用的是mysql數據庫)
第四步:配置***.cfg.xml文件
(1).缺省的名字是hibernate.cfg.xml
(2).將文件存放到classe跟s目錄下,開發中將其存放在src的根目錄下便可。
(3).主要配置如下的四個部分:
1.與DB的鏈接
2.可選的配置
3.資源文件配置
4.二級緩存
(4).配置以下:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 在執行數據查詢時,是否顯示sql語句 --> <property name="hibernate.show_sql">true</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">tangjie</property> <property name="connection.pool_size">2</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <!-- 添加影射文件 --> <mapping resource="com/hb/UserModel.hbm.xml" /> </session-factory> </hibernate-configuration>
第五步:配置***.hbm.xml
(1).與被描述的類同名,如:UserModel.hbm.xml
(2).存放位置與所描述類存放在同一文件夾下
(3).主要有以下四部分配置:
1.類和表的映射
2.主鍵的映射
3.類的屬性和DB字段的映射
4.關係的映射
5.配置以下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> <hibernate-mapping> <class name="cn.javass.h4.hello.UserModel" table="tbl_user"> <id name="uuid"> <generator class="assigned" /> </id> <property name="userId"></property> <property name="name"></property> <property name="age"></property> </class> </hibernate-mapping>
第六步:編寫客戶端類
1 package com.hb; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 8 public class Client { 9 10 public static void main(String[] args) { 11 // 讀取hibernate.cfg.xml文件,建立Session工廠 12 SessionFactory sf = new Configuration().configure() 13 .buildSessionFactory(); 14 15 Session s = null; 16 Transaction t = null; 17 18 try { 19 // 準備數據 20 UserModel um = new UserModel(); 21 um.setUuid("1"); 22 um.setUserId("id1"); 23 um.setName("name1"); 24 um.setAge(1); 25 // 得到session對象 26 s = sf.openSession(); 27 t = s.beginTransaction(); 28 s.save(um); 29 t.commit(); 30 } catch (Exception err) { 31 t.rollback(); 32 err.printStackTrace(); 33 } finally { 34 s.close(); 35 } 36 } 37 }
運行結果如圖所示:
到這裏,咱們完成了第一個Hibernate的案例,學會最基礎的用法。後續學習筆記會持續更新...
·