Hibernate框架學習之初識Hibernate
Hibernate的簡單介紹
Hibernate是一個開源的優秀的ORM(Object Relational Mapping、對象關系映射)框架,對JDBC進行了輕量級的對象封裝,架起了面向對象開發以及SQL之間的橋梁。Hibernate可以通過配置,自動生成對應的SQL語句,自動執行,并且對結果進行封裝,將得到的對象返回給用戶。有了Hibernate框架,開發人員可以以面向對象的角度來操作數據庫。
Hibernate的優點
對JDBC進行封裝,簡化了數據訪問的代碼(這一點相信使用原生JDBC操作數據庫的朋友應該會有比較深的感觸)
支持多種關系型數據庫
性能好、配置靈活
Hibernate_HelloWorld
上面是關于Hibernate的一點簡單介紹以及其優點,接下來讓我們開始使用Hibernate的進行數據庫的訪問,感受Hibernate帶來的方便性。
準備
首先需要下載Hibernate對應的jar包,Hibernate 5.2.9 Final 版本下載地址 ,如果是使用Maven來進行構建的朋友則更加簡單了,只需要配置對應的依賴,Maven就會自動幫我們將對應的jar下載并且導入,筆者這里使用第二種方式。
建立項目
-
建一個Maven項目(筆者這里使用IDEA)勾選如下所示
-
填寫對應的GroupId、Artifact以及Version,如下所示
-
選擇好對應的Maven版本以及對應的設置、倉庫所在位置,如下所示
-
填寫項目的名稱、位置以及對應的Module信息(這里保持默認),如下所示
-
建立項目完成之后,項目的結構圖如下所示
-
為了項目資源管理的方便,這里我們在src目錄下建立一個resources目錄,并且將其設置為資源文件,這樣,Maven在編譯時會自動將其導入類路徑中,具體操作如下
至此,我們的項目的基本骨架的搭建完成了。
導入Hibernate的核心包以及依賴包
由于是使用Maven來進行項目管理,所以導入對應的jar文件只需要在根目錄的pom.xml文件中添加如下內容即可
<project>
...
<dependencies>
<!--添加Junit支持-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--添加Hibernate支持-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.9.Final</version>
</dependency>
<!--添加JDBC支持-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
</dependencies>
<build>
<!--為了IDEA能夠在編譯時將對應的配置文件加入,需要添加下面的配置-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
...
</project>
這樣Maven就會自動下載Hibernate所需要的依賴及其核心包了。
編寫配置文件
Hibernate的配置主要有兩個文件,一個是用于配置元數據的,一個是用于配置數據源等信息的,下面我們開始編寫配置文件
元數據
首先閑來編寫元數據配置文件,所謂的元數據配置文件,可以理解為就是一個對應關系,也就是配置一個從JavaBean對象到SQL之間的對應關系,顯然,為了Hibernate能夠自動地完成從Java對象到SQL之間的映射,我們就必須告訴它哪個對象對應哪一張表,其中對象中的哪個屬性對應表中的哪個列,哪個屬性是對應的ID。
也就是說,在這個環節中,需要建立兩個內容,一個是所要操作的類,另外一個其對應的關系,也就是我們的元數據
-
在包中建立以個Students對象,如下所示
package cn.xuhuanfeng.learnignhibernate; /** * Created by xuhuanfeng on 2017-04-06. */ public class Students{ private int id; private String name; private int age; . . . // 篇幅原因省略setter以及getter }
?
-
在Students對象的同級目錄建立一個名為Student.hbm.xml的配置文件,配置內容如下所示
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--name為對應的Java類,table為對應的表的名字--> <class name="cn.xuhuanfeng.learnignhibernate.Students" table="students"> <!--id為對應的主鍵,name為類屬性,column為表的字段--> <id name="id" column="id"> <!--主鍵的增長策略,以后將介紹--> <generator class="increment"></generator> </id> <!--property為其他的屬性--> <property name="name" column="name"></property> <property name="age" column="age"></property> </class> </hibernate-mapping>
至此,我們的元數據則建立完成。
數據源配置文件
接下來嗎,我們來編寫Hibernate的數據源配置文件,該配置文件是Hibernate的核心配置文件,主要用于加載上面的元數據以及配置相關的屬性等等,在剛剛建立的resources目錄中建立名為hibernate.cfg.xml的文件,注意,該文件不建議更改名字,內容如下所示:
<!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> <!--配置數據源信息--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">huanfeng</property> <!--打印操作過程中的SQL語句--> <property name="show_sql">true</property> <!--格式化SQL語句--> <property name="format_sql">true</property> <!--配置數據庫操作策略,以后將介紹--> <property name="hbm2ddl.auto">update</property> <!--配置對應的映射文件 即 元數據--> <mapping resource="cn/xuhuanfeng/learnignhibernate/Student.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
由于這里需要操作對應的數據庫,所以還需要建立一個對應的庫,這里命名為hibernate,如果按照上面的配置,則不需要建立對應的表,只需要建立對應的庫即可。
至此,Hibernate所需要的配置全部完成,接下來我們就來開始編寫對應的測試代碼了。
編寫測試文件
不知道初學Hibernate的你,看到這里會不會有點懵,筆者剛剛學習的時候也覺得有點懵,這樣就可以編寫測試代碼了?我連具體內容都還沒見到了,就只是寫了配置文件以及一個JavaBean而已。這就是Hibernate的強大之處了,我們基本上可以不需要寫任何的JDBC代碼就能操作數據庫了,而且更神奇的事情還在繼續,讓我們接下來繼續前進,編寫對應的測試類 StudentsTest如下所示
/**
* Created by xuhuanfeng on 2017-04-06.
* 測試Hibernate
*/
public class StudentsTest {
@Test
public void testCreate(){
// 獲取Hibernate的配置對象
Configuration configuration = new Configuration().configure();
// 建立SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 打開session
Session session = sessionFactory.openSession();
// 所要添加到數據庫的學生對象
Students students = new Students();
students.setAge(22);
students.setName("xuhuanfeng");
// 開啟事務
Transaction ts = session.beginTransaction();
// 將數據添加到數據庫
session.save(students);
// 提交事務
ts.commit();
// 關閉對應的連接
session.close();
sessionFactory.close();
}
}
保存之后直接運行即可,然后就可以查看對應的數據庫數據了,相信你會驚奇的發現,對應的數據已經保存到數據庫中了: )
控制臺輸出
細心的你可能會發現,在IDEA控制臺中,輸出了很多內容,接下來我們來粗略地看一下這些內容,在輸出的內容中,主要內容如下
Hibernate:
create table students (
id integer not null,
name varchar(255),
age integer,
primary key (id)
) engine=MyISAM
Hibernate:
select
max(id)
from
students
Hibernate:
insert
into
students
(name, age, id)
values
(?, ?, ?)
相信看到上面這些內容的你會覺得非常熟悉,這些SQL語句就是Hibernate為我們生成的,也就是說,使用了Hibernate框架,我們基本上再也不需要編寫這些SQL操作的語句了,因為Hibernate已經為我們做好了大部分重復性的操作了。
總結
這小節主要介紹了Hibernate以及Hibernate的優點,并且一步步動手搭建一個基于Maven的Hibernate的項目,編寫對應的配置文件以及測試類,看到了Hibernate的神奇之處,不過Hibernate的神奇之處可不止這些,Hibernate的學習之路還在繼續。