Hibernate的配置與簡單使用

来源:http://www.cnblogs.com/xingyazhao/archive/2017/04/02/6659124.html
-Advertisement-
Play Games

一、概念 Hibernate是一個開源的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以拋棄在程式中編寫SQL語句,隨心所欲的使用對象編程思維來操縱資料庫。 二、準備工作 在Eclipse中安裝HibernateTools插件:Help -> Install ...


一、概念

   Hibernate是一個開源的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以拋棄在程式中編寫SQL語句,隨心所欲的使用對象編程思維來操縱資料庫。

二、準備工作

  在Eclipse中安裝HibernateTools插件:Help -> Install New Software 來進行安裝。New -> Other打開的對話框中如果有Hibernate選項則表明安裝成功。

三、創建工程

  1.New 一個 Java Project

  2.為Java工程導入jar包:

    • Hibernate核心jar包
    • MySQL的jdbc驅動jar包
    • Junit4的jar包

     我們在windows->preferences->java->build path-user libraries中將三者添加為三個用戶類庫,方便以後的導入:

    右擊Java項目->properties->Java Build Path->Library->add Library->User Library->next->將剛纔建好的用戶類庫全打勾->finish->ok。

  3. 創建Hibernate的配置文檔,並編輯:

    右擊工程下的src->new->other->Hibernate->Hibernate Configuration File (cfg.xml)->next,next,finish

    src下已經生成了配置文件hibernate.cfg.xml,打開

<hibernate-configuration>
    <session-factory name="">
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  //mysql的jdbc驅動
        <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>  //指明資料庫的url地址
        <property name="connection.username">root</property>  //mysql用戶名
        <property name="connection.password">****</property>  //密碼
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  //方言

        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>

        <mapping resource="Students.hbm.xml" />  //映射文件
    </session-factory>
</hibernate-configuration>

   4. 創建持久化類

    假如我們想往資料庫存放一張學生表,包括id,姓名,性別,生日,地址這些欄位。那麼我們可以創建一個Students類,類中包含了學生的這些屬性,我們可以通過“更改Students對象的屬性,再傳遞給資料庫”來間接地操縱資料庫,這樣就避免了使用SQL語句。那麼Students這個類我們就稱為持久化類。

    在src下創建一個類,命名為Students。持久化類的設計原則要遵循JavaBean的設計原則:

    • 公有的類
    • 私有的屬性
    • 無參的公有的構造方法
    • 屬性setter/getter封裝

    如下:

    
public class Students {

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

    public Students() {

    }

    public Students(int sid, String sname, String gender, Date brithday, String address) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.brithday = brithday;
        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 getBrithday() {
        return brithday;
    }

    public void setBrithday(Date brithday) {
        this.brithday = brithday;
    }

    public String getAddress() {
        return address;
    }

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

    @Override
    public String toString() {
        return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", brithday=" + brithday
                + ", address=" + address + "]";
    }

}
Students Class

  5. 創建對象-關係映射文件

    右擊src->new->other->Hibernate->Hibernater XML Mapping File (hbm.xml)->next,next->點選要持久化的類->finish

    對象-關係映射文件創建完畢,打開可以看到:文件將一個實體類映射稱為資料庫中的一張表。

    
<hibernate-mapping>
    <class name="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="brithday" type="java.util.Date">
            <column name="BRITHDAY" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="ADDRESS" />
        </property>
    </class>
</hibernate-mapping>
Students.hbm.xml

    映射文件創建好之後要記得在hibernate配置文件中,添加mapping標簽:

    <mapping resource="Students.hbm.xml" />

  6. 在Mysql中創建一個資料庫,名稱為配置文檔中所配置的資料庫名稱

  7. 通過Hibernate API編寫訪問資料庫的代碼,使用Junit進行測試。

    三個註解:

    • @Test :測試方法
    • @Before:初始化方法
    • @After:釋放資源

    右擊工程名->new->source folder源文件夾->folder name命名為test->finish

    在test文件夾下新建一個類,命名為StudentsTest:

 1 import java.util.Date;
 2 import org.hibernate.Session;
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.Transaction;
 5 import org.hibernate.cfg.Configuration;
 6 import org.hibernate.service.ServiceRegistry;
 7 import org.hibernate.service.ServiceRegistryBuilder;
 8 import org.junit.After;
 9 import org.junit.Before;
10 import org.junit.Test;
11 
12 //測試類
13 public class StudentsTest {
14 
15     private SessionFactory sessionFactory;
16     private Session session;
17     private Transaction transaction;
18 
19     @Before
20     public void init() {
21         // 創建配置對象
22         Configuration config = new Configuration().configure();
23         // 創建服務註冊對象
24         ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties())
25                 .buildServiceRegistry();
26         // 創建會話工廠對象
27         sessionFactory = config.buildSessionFactory(serviceRegistry);
28         // 會話對象
29         session = sessionFactory.openSession();
30         // 開啟事務
31         transaction = session.beginTransaction();
32 
33     }
34 
35     @After
36     public void destroy() {
37         transaction.commit();// 提交事務
38         session.close();// 關閉會話
39         sessionFactory.close();// 關閉會話工廠
40     }
41 
42     @Test
43     public void testSaveStudents() {
44         // 生成學生對象
45         Students s = new Students(1, "張三", "男", new Date(), "北京市");
46         // 保存對象進入資料庫
47         session.save(s);
48     }
49 }

    測試類創建好之後,右擊該類下目錄下的testSaveStudents()方法,Run as Junit Test!

    之後我們去相應的資料庫里查看,已經有一張students的表生成了:

    

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JSR330 DI JSR 330 ,提供了一種可重用的、可維護、可測試的方式來獲取Java對象。也稱為Dependency Injection 。 DI應該都不陌生,因為它就是Spring core之一。在Spring盛行後,Google也提供了一種DI實現:Guice。因為這兩個DI容器的盛行, ...
  • 一、單例模式(Singleton) 1、單例模式應用場景: ①Servlet ②任務管理器 ③鏈接池 ④Spring中每個 bean 預設是單例 ⑤網站計數器 2、單例要求 ①構造器私有 ②私有的靜態變數 ③公共的靜態的可以訪問私有的靜態變數的方法 結論:由結果可以得知單例模式為一個面向對象的應用程 ...
  • 我在mvc配置文件中加上下麵這個配置就好了 <mvc:annotation-driven></mvc:annotation-driven>,需要在開頭引用如下命名空間xmlns:mvc="http://www.springframework.org/schema/mvc 它自動配置DefaultAn ...
  • 聲明 轉載請註明出處! Reprint please indicate the source! http://www.hiknowledge.top/?p=86&preview=true 什麼是JMS JMS即Java消息服務(Java Message Service)應用程式介面,是一個Java平 ...
  • 在牛客網上做到的一道題,挺簡單基礎的,不過也寫一下,哈哈! 統計一個數字在排序數組中出現的次數: 可定義一個用於統計數字個數的變數count,然後從前往後遍曆數組,看是否與所求數字相等,如果相等,則count++; 下麵貼出代碼: public class Solution { public int ...
  • 這段時間在做項目,發現自己忘得好快呀,幸虧有博客園幫我記著呢,整理博客園簡直不要太重要了哦 因為做的是一個內部管理系統,只用了一個主頁面,所有的都不允許整個網頁刷新,所以我們只能用ajax 來做,當然剛開始做也走了很多的彎路,最終還是做出來了 這點還是比較欣慰的 今天要整理一下ajax實現修改功能 ...
  • 作為一個能安全運行的工具庫,為了保證占用資源的安全性,對異常處理(exception handling)和事後處理(final clean-up)的支持是不可或缺的。FunDA的數據流FDAPipeLine一般是通過讀取資料庫數據形成數據源開始的。為了保證每個數據源都能被安全的使用,FunDA提供了 ...
  • 一、什麼是編碼 編碼是指信息從一種形式或格式轉換為另一種形式或格式的過程。 在電腦中,編碼,簡而言之,就是將人能夠讀懂的信息(通常稱為明文)轉換為電腦能夠讀懂的信息。眾所周知,電腦能夠讀懂的是高低電平,也就是二進位位(0,1組合)。 而解碼,就是指將電腦的能夠讀懂的信息轉換為人能夠讀懂的信息 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...