Hibernate 簡介
Hibernate 是一個開放源代碼的對象關系映射架構,它對JDBC進行了非常輕量級的對象封裝,它将POJO與資料庫表建立映射關系,是一個全自動的ORM架構,hibernate可以自動生成SQL語句,自動執行,使得Java程式員可以随心所欲的使用對象程式設計思維來操縱資料庫。 一句話:Hibernate 是一個實作了 ORM 思想的架構,封裝了 JDBC。
ORM: 對象關系映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping)是一種程式技術,用于實作面向對象程式設計語言裡不同類型系統的資料之間的轉換。其實就是将關系和對象通過映射檔案進行聯系。我們在程式中隻需要操作對象即可操作對應的資料庫表的資料。
注意:POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通JavaBeans,
使用環境:
1、Hibernate 5.2.17, JBoss tools 插件生成配置檔案
2、Eclipse 4.7
3、jdk1.8
4、MySQL5.7
5. maven
一、建立一個簡單的 maven 項目 導包 和 配置 Hibernate5 主配置檔案
導包
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
Hibernate5 主配置檔案:hibernate.cfg.xml
注意:方言 MySQL5 指5.0+版本的MySQL
自動生成表結構政策(開發配置, 生産不配置)
<property name="hbm2ddl.auto">update</property>
value -- update(使用最多):當資料庫不存在表時,hibernate啟動後會自動生成表結構。
當資料庫表存在時,如果一樣,則隻會寫入資料,不會改變表結構。
當資料庫表存在時,如果不一樣,則會修改表結構,原有的表結構不會改變。
create(很少):無論表結構是否存在,hibernate啟動後都會重新生成表結構。(造成之前的資料丢失)
create-drop(極少):無論表結構是否存在,hibernate啟動都會重新生成表結構。并且hibernate關閉後,表結構會被删除。來無影去無蹤。
validate(很少):不會建立表結構,不會修改表結構。校驗與資料庫中的表結構是否一樣,如果不一樣則報異常。
<session-factory>
<!-- 資料庫基本資訊 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_hibernate5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- hibernate配置資訊 MySQL5指5.0+版本的MySQL-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ORM 映射關系 -->
<mapping resource="cn/jq/hibernate5/model/Student.hbm.xml"/>
</session-factory>
二、 建立一個 POJO 類 和 Xxxt.hbm.xml 映射檔案
POJO 類:必須要有無參構造器
public class Student {
private int id;
private String name;
private String sex;
private Date birthday;
...
//必須要有無參構造器
//getter setter
}
Xxxt.hbm.xml : 插件生成, 簡單修改
<class name="cn.jq.hibernate5.model.Student" table="T_STUDENT">
<id name="id" type="int">
<column name="ID" />
<!-- 設定主鍵的生成方式 -->
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
</class>
三、 建立 Junit 測試類
注意: SessionFactory 工廠類的建立過程
Hibernate5 規定: 所有配置或服務要生效, 必須将其注冊到一個 StandardServiceRegistry 服務注冊類中
@Test
public void test() {
//1. 建立一個 SessionFactory 工廠類: 通過它建立一個與資料庫連接配接回話 session
SessionFactory sessionFactory = null;
//配置類: 封裝有我們的配置檔案裡的配置資訊, 傳回的 configuration 包含有配置檔案裡的具體資訊
Configuration configuration = new Configuration().configure();
//Hibernate5規定: 所有配置或服務要生效, 必須将其注冊到一個服務注冊類中
StandardServiceRegistry serviceRegistry = configuration.getStandardServiceRegistryBuilder().build();
sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//2. 通過工廠類開啟 Session 對象
Session session = sessionFactory.openSession();
//3. 開啟事務
Transaction transaction = session.beginTransaction();
//4. 執行 CRUD 操作
Student student = new Student("李四","男",new Date());
session.save(student);
//5. 送出事務
transaction.commit();
//6. 關閉 Session
session.close();
//7. 關閉工廠類
sessionFactory.close();
}
四、資料庫結果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXwUFRPlXQE5UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TNzMTN1MDNzITNwgDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)