1. 程式人生 > >Hibernate入門——基礎詳解

Hibernate入門——基礎詳解

什麼是ORM?

ORM全名是Object Relational Mapping(物件關係對映),用來把物件模型表示的物件對映到基於S Q L 的關係模型資料庫結構中去。

它的方法論基於三個核心原則:

  1. 簡單:以最基本的形式建模資料。
  2. 傳達性:資料庫結構被任何人都能理解的語言文件化。
  3. 精確性:基於資料模型建立正確標準化的結構。

什麼是Hibernate?

Hibernate是一個開源的ORM框架,它對JDBC進行了非常輕量級的物件封裝,它將POJO與資料庫表建立對映關係,是一個全自動的ORM框架,Hibernate可以自動生成SQL語句,自動執行。

搭建Hibernate環境步驟

安裝JBoss Tools外掛

JBoss Tools它是一個綜合開發工具外掛,該外掛簡化ORM框架Hibernate,JBoss Seam,EJB3等的開發工作。
安裝請參考我的上一篇文章 Eclipse安裝以及整合Java開發環境外掛的安裝

下載相關jar包

  • Hibernate官網:http://hibernate.org/orm/
    我是用的是hibernate-release-5.2.10這個版本
    解壓我們下載好的hibernate-release-5.2.10.Final.zip,開啟\lib\required檔案,如下圖所示(即所需的最小jar包):

hibernatejar

mysqljar

建立Java Project專案匯入Hibernate的所需的jar包

新增Junit單元測試的jar包:

右鍵我們的專案—>Build Path—>Add Library—>JUnit—Finish。

新增Hibernate所需的jar包以及Mysql的jdbc驅動jar包

hibernatedemo

建立並完善相關配置檔案

建立配置hibernate.cfg.xml檔案

右鍵src目錄,New—>Other選擇Hibernate檔案中的選項如下:

cfg

下一步建立完成(預設選項)。

編寫hibernate.cfg.xml檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql:///test</property>
      <property name="connection.username">root</property>
      <property name="connection.password">root</property>
      <!-- SQL 方言 -->
      <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

      <!-- 在控制檯輸出sql語句 -->
      <property name="show_sql">true</property>
      <property name="format_sql">true</property>
      <!-- 生成策略 常用的create update -->
      <property name="hbm2ddl.auto">create</property>

      <!-- Enable Hibernate's automatic session context management -->
      <property name="current_session_context_class">thread</property>

      <!-- 註冊實體對映檔案 -->
      <mapping resource="com/demo/bean/Students.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
建立持久化類

建立學生類,程式碼如下:

package com.demo.bean;

import java.util.Date;

/**
 * 學生類
 * 
 * @author JackHu
 *
 */
public class Students {

    private int sid;
    private String sname;
    private String gender;
    private Date birthday;
    private String address;

    public Students() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Students(int sid, String sname, String gender, Date birthday, String address) {
        super();
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.address = address;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}
建立物件-關係對映檔案

在我們的實體類包下點選右鍵—>New—>Other,如下:

hbm

點選Next,建立完成。

生成物件關係對映配置文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-8-25 17:25:25 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.demo.bean.Students" table="STUDENTS">
        <id name="sid" type="int">
            <column name="SID" />
            <generator class="assigned" />
        </id>
        <property name="sname" type="java.lang.String">
            <column name="SNAME" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="GENDER" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="ADDRESS" />
        </property>
    </class>
</hibernate-mapping>
建立資料庫(test)

在我們的Mysql中建立test資料庫:

testdb

使用Junit進行單元測試

Junit常用的註解標籤:

  • @Test:測試方法
  • @Before:初始化
  • @After:釋放走遠

新建測試類StudentsTest.java:

package com.demo.test;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.demo.bean.Students;

/**
 * 學生測試類
 * @author JackHu
 *
 */
public class StudentsTest {

    //建立型別安全的準服務註冊類
    private StandardServiceRegistry registry;
    //建立會話工廠物件
    private SessionFactory sessionFactory;
    //建立會話
    private Session session;
    //事物
    private Transaction tx;

    @Before
    public void init() {
        registry=new StandardServiceRegistryBuilder()
                .configure()
                .build();
        try {
            sessionFactory = new MetadataSources(registry)
                    .buildMetadata()
                    .buildSessionFactory();
        } catch (Exception e) {
            StandardServiceRegistryBuilder.destroy(registry);
        }
        session=sessionFactory.openSession();
        //開啟事物
        tx=session.beginTransaction();
    }

    @After
    public void destory() {
        //提交事物
        tx.commit();
        //釋放資源
        session.close();
        sessionFactory.close();
    }

    @Test
    public void testSaveStudent() {
        Students s=new Students(1,"hjw","男",new Date(),"北京");
        session.save(s);
    }

}

執行testSaveStudent()方法,新增資料成功:

success

開啟我們的資料庫,檢視,如下圖:

save

總結

Hibernate幫我們自動建立表結構,並且把我們的學生物件儲存的我們的資料庫中。
歡迎小夥伴們學習!!!