Hibernate簡介與實例
一、Hibernate簡介
1、什麽是Hibernate?
Hibernate是數據持久層的一個輕量級框架。數據持久層的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。並且Hibernate是一個開源的orm(Object relations mapping)框架,提供了查詢獲取數據的方法,用面向對象的思想來操作數據庫,節省了我們開發處理數據的時間。
2、Hibernate的優點
1)、使用簡潔的hql語句(Hibernate query language)。可以不使用傳統的insert,update等sql語句。比如insert一個對象,原來的做法是:insert into 表名稱 value(值1,值2,值3,……),而現在的做法是:save(對象)。
2)、使用or映射。對象到關系數據庫之間的映射。是從對象的角度操作數據庫,再次體現了面向對象思想。原來的實體抽取方法:首先有了表,然後表映射實體對象。而現在Hibernate做法是:直接由對象映射到表。
3)、沒有侵入性,移植性比較好。什麽是沒有侵入性?就是Hibernate采用了pojo對象。所謂的pojo對象就是沒有繼承Hibernate類或實現Hibernate接口。這樣的話,此類就是一個普通的java類,所以移植性比較好。
4)、支持透明持久化。透明是針對上層而言的。三層架構的理念是上層對下層的依賴,只是依賴接口不依賴具體實現
3、當然一個事物,不可能十全十美,即使如此優秀的Hibernate也有自己的弱點。比如:若是大量數據批量操作。則不適合使用Hibernate。並且一個持久化對象不能映射到多張表中。
4、Hibernate中5個核心接口
1)、Configuration接口:負責配置及啟動Hibernate,用來創建sessionFactory
2)、SessionFactory接口:一個SessionFactory對應一個數據源存儲,也就是一個數據庫對應一個SessionFactory。SessionFactory用來創建Session對象。並且SessionFactory是線程安全的,可以由多個線程訪問SessionFactory共享。
3)、Session接口:這個接口是Hibernate中常用的接口,主要用於對數據的操作(增刪改查)。而這個Session對象不是線程安全的。不能共享。
4)、Query接口:用於數據庫的查詢對象。
5)、Transaction接口:Hibernate事務接口。它封裝了底層的事務操作,比如JTA(;java transcation architecture)所有的數據操作,比如增刪改查都寫在事務中。
二、實例:一個Hibernate小程序
創建一個Hello_World的Java項目,導入所需jar包
在src目錄下,創建一個hibernate.cfg.xml的配置文件,文件配置設置可以參見hibernate的官方文檔。
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- Student為你的數據庫名稱 -->
<property name="connection.url">jdbc:mysql://localhost:3306/Student</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate‘s automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
<!-- true:在控制臺顯示SQL語句 -->
<property name="show_sql">true</property>
<!-- 格式化輸出SQL語句 -->
<property name="format_sql">true</property>
<!-- validate 加載hibernate時,驗證創建數據庫表結構 -->
<!-- create 每次加載hibernate,重新創建數據庫表結構,這就是導致數據庫表數據丟失的原因。 -->
<!-- create-drop 加載hibernate時創建,退出是刪除表結構 -->
<!-- update 加載hibernate自動更新數據庫結構 -->
<property name="hbm2ddl.auto">create</property>
<property name="myeclipse.connection.profile"></property>
<!-- hibernate與數據庫的對象關系映射文件**.hbm.xml -->
<mapping resource="com/lsj/hibernate/model/Student.hbm.xml" />
<!-- 使用annotion註解時,hibernate與數據庫對象關系映射表示 -->
<!-- 推薦使用annotion註解來表示映射關系 -->
<mapping class="com.lsj.hibernate.model.Teacher" />
</session-factory>
</hibernate-configuration>
創建一個Teacher的實體類,這裏用的是annotion註解,還有一種方法是創建XXX.hbm.xml的關系映射文件
package com.lsj.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//Entity是javax.persistence.Entity包中的
@Entity
// 映射的表名
@Table(name = "teacher")
public class Teacher {
private int id;
private int age;
private String name;
private String title;
// 主鍵,一般寫在get方法中,而不是在定義中
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
創建一個TeacherTest的測試類
package com.lsj.hibernate.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.lsj.hibernate.model.Teacher;
public class TeacherTest {
public static void main(String[] args) {
Teacher t = new Teacher();
t.setAge(30);
t.setName("小傑");
t.setTitle("背包客");
Configuration cfg = new Configuration();
// 讀取hibernate.cfg.xml中的配置
cfg.configure();
// 獲取SessionFactory
SessionFactory sf = cfg.buildSessionFactory();
// 獲取Session
Session session = sf.openSession();
// 開啟事務
session.beginTransaction();
// 保存
session.save(t);
// 提交事務
session.getTransaction().commit();
// 關閉連接
session.close();
sf.close();
}
}
這樣一個簡單的Hibernate程序就寫完,運行的時候記得打開MySQL的服務。
Hibernate簡介與實例