1. 程式人生 > >Hibernate系列1:入門程式

Hibernate系列1:入門程式

1.傳統的java資料庫連線 

  在傳統的開發中,如果要建立java程式和資料庫的連線,通常採用JDBC或者Apache Commons DbUtils開發包來完成。他們分別有以下特點:

  JDBC:

    優點:1.底層連線,效率高

    缺點:需要手寫sql語句,程式碼重複多,封裝結果集繁瑣

  DbUtils:

    優點:結果集封裝可直接呼叫,封裝JDBC,效率較高

    缺點:需要手寫sql語句

2.Hibernate的概念:

  Hibernate是一個  輕量級、企業級、開源的 持久層 ORM框架:

  • 輕量級:依賴資源少
  • 企業級:適合在企業級應用中使用
  • 開源:原始碼開放
  • 持久層:完成資料持久化的邏輯層
  • ORM: Object Relationship Mapping,物件關係對映

3.Hibernate的入門程式:

    • 建立專案,java專案或web專案,此處我們建立java專案
    • 匯入jar包,匯入需要的mysql-connector,hibernate核心jar包

      

    • 建立實體類
//學生實體類
package domain;
import java.io.Serializable;
public class Student implements Serializable {

    
private int stuId; private String stuName; private String stuMemo; public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) {
this.stuName = stuName; } public String getStuMemo() { return stuMemo; } public void setStuMemo(String stuMemo) { this.stuMemo = stuMemo; } @Override public String toString() { return "Student [stuId=" + stuId + ", stuName=" + stuName + ", stuMemo=" + stuMemo + "]"; } }
    • 編寫配置檔案,包括Hibernate實體類對映檔案和Hibernate主配置檔案
//Student實體類對映配置檔案
<?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>
    <class name="domain.Student">
        <id name="stuId" column="stu_id">
        <generator class="native"/>
        </id>
        <property name="stuName" column="stu_name"></property>
        <property name="stuMemo" column="stu_memo"></property>
    </class>
</hibernate-mapping>
//Hibernate主配置檔案
<?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="hibernateDialect">org.hibernate.dialect.MYSQLDialect</property>
        <property name="hibernate.connection.driver.class">com.mysql.jdbc.Driver</property>    
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
                        <!-- 第二步:配置hibernate其他配置 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.current_session_context_class">thread</property>
                        <!-- 第三步:匯入對映檔案 -->
        <mapping resource="domain/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
  • 編寫測試類並執行:
package test;

import org.hibernate.Session;import org.hibernate.SessionFactory;

  import org.hibernate.cfg.Configuration;

import org.hibernate.Transaction;
import org.junit.jupiter.api.Test;

import util.HibernateUtils;

public class HibernateTest01 {
    
    @Test
    public void test1() 
    {
        Configuration config = new Configuration().configure();
        SessionFactory SF = config.buildSessionFactory();
        Session s = SF.openSession();
        Transaction tx = s.beginTransaction();                
        tx.commit();
        s.close();
        SF.close();
    }

}

執行上述單元測試,可以從輸出中看到Hibernate幫我們完成了建立表的操作:

下面我們完成一個簡單的插入操作:

package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.jupiter.api.Test;

import domain.Student;
public class HibernateTest01 {
    
    @Test
    public void test1() 
    {
        Configuration config = new Configuration().configure();
        SessionFactory SF = config.buildSessionFactory();
        Session s = SF.openSession();
        Transaction tx = s.beginTransaction();       
        Student s1 = new Student();
       // s1.setStuId(1);  資料庫主鍵自動生成,可省略此行
        s1.setStuName("uzi");
        s1.setStuMemo("a famous adc");
        s.save(s1);        
        tx.commit();
        s.close();
        SF.close();
    }
}