天天看點

Hibernate5簡單demo

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();
	}
           

四、資料庫結果

Hibernate5簡單demo