Hibernate使用註解進行ORM映射實例

来源:http://www.cnblogs.com/doitbyyourself/archive/2017/07/07/7132781.html
-Advertisement-
Play Games

在上一篇博客中,我們通過xml配置文件進行實體類和表的映射,但是近兩年來有更多的項目對一些比較穩定的實體類使用了註解進行ORM映射,這樣使得編程更加簡潔、簡單。其實使用註解進行ORM映射和使用xml進行映射沒有太多的操作流程上的變化,主要步驟為:導包、編寫帶註解的實體類、編寫核心配置文件、編寫測試類 ...


在上一篇博客中,我們通過xml配置文件進行實體類和表的映射,但是近兩年來有更多的項目對一些比較穩定的實體類使用了註解進行ORM映射,這樣使得編程更加簡潔、簡單。其實使用註解進行ORM映射和使用xml進行映射沒有太多的操作流程上的變化,主要步驟為:導包、編寫帶註解的實體類、編寫核心配置文件、編寫測試類。

項目工程代碼已經上傳到GitHub:https://github.com/wanyouxian/Hibernate  工程名:HibernateUseAnnotation

整個工程項目結構如下圖:

 

一、導包

  筆者使用的是MySQL資料庫,因此導入數據包如下圖:

 

二、編寫實體類

  用於映射的註解基本都在javax.persistence.*包中定義,我常用到的主要是如下四個:

   @Entity註釋將此類標記為實體。   @Table註釋指定要保留此實體的數據的表名。 如果不使用@Table註釋,hibernate將使用類名作為表名稱bydefault。    @Id註釋標記此實體的標識符。    @Column註釋指定此屬性或欄位的列的詳細信息。如果未指定@Column註釋,則屬性名稱將用作列名稱bydefault。
 1 package com.rocky.domain;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.Id;
 5 import javax.persistence.Table;
 6 
 7 @Entity
 8 @Table(name = "tb_user")
 9 public class User
10 {
11     @Id
12     private Integer uId;
13     private String uName;
14     private Integer uAge;
15     public User()
16     {
17         super();
18     }
19     @Override
20     public String toString()
21     {
22         return "User [uId=" + uId + ", uName=" + uName + ", uAge=" + uAge + "]";
23     }
24     public Integer getuId()
25     {
26         return uId;
27     }
28     public void setuId(Integer uId)
29     {
30         this.uId = uId;
31     }
32     public String getuName()
33     {
34         return uName;
35     }
36     public void setuName(String uName)
37     {
38         this.uName = uName;
39     }
40     public Integer getuAge()
41     {
42         return uAge;
43     }
44     public void setuAge(Integer uAge)
45     {
46         this.uAge = uAge;
47     }
48 }
View Code

三、編寫核心配置文件

  使用註解的配置文件和xml映射的配置文件基本大同小異,但是在引入外部映射時使用的屬性是class而非resource屬性。

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <hibernate-configuration>
 7     <session-factory>
 8 
 9         <!--指定資料庫的參數  -->
10         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
11         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
12         <property name="hibernate.connection.url">jdbc:mysql://192.168.100.100:3306/test</property>
13         <property name="hibernate.connection.username">root</property>
14         <property name="hibernate.connection.password">1</property>
15         
16         <!--指定hibernate是否顯式SQL語句及其格式化  -->
17         <property name="hibernate.show_sql">true</property>
18         <property name="hibernate.format_sql">true</property>
19         
20         <!--指定表的生成方式-即是否由hibernate自動創建表,其取值為:create-drop、
21          create、validate、update-->
22         <property name="hibernate.hbm2ddl.auto">update</property>
23         
24         <!--引入 ORM配置文件 -->
25         <mapping class="com.rocky.domain.User"/>
26     </session-factory>
27 
28 </hibernate-configuration>
View Code

四、編寫測試類

 1 package com.rocky.testdriver;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 
 8 import com.rocky.domain.User;
 9 
10 public class TestDriver
11 {
12 
13     public static void main(String[] args)
14     {
15         // 載入配置文件
16         Configuration cfg = new Configuration();
17         cfg.configure();
18         // 創建會話工廠
19         SessionFactory factory = cfg.buildSessionFactory();
20         // 獲取非線程綁定會話
21         Session session = factory.openSession();
22         // 開啟事務
23         Transaction tx = session.beginTransaction();
24         // 創建User對象
25         User user = new User();
26         user.setuId(1);
27         user.setuName("rocky");
28         user.setuAge(28);
29 
30         // 將數據插入資料庫
31         session.save(user);
32 
33         // 提交事務
34         tx.commit();
35         // 關閉會話
36         session.close();
37     }
38 
39 }
View Code

 


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

-Advertisement-
Play Games
更多相關文章
  • 作者: kent鵬 轉載請註明出處: http://www.cnblogs.com/xieyupeng/p/7129152.html 該項目在SSH三大框架整合基礎上進行開發:http://www.cnblogs.com/xieyupeng/p/7108141.html 一、客戶列表 1.分析 2. ...
  • 一、用途 我們需要將記憶體中的數據進行序列化,即寫入文件中時,寫入的類型只能是字元串或者二進位類型。但是如果我們想要將複雜一些的數據類型,如:列表、字典或者函數之類的同樣進行序列化,我們就要用到 json或者pickle。 二、json序列化 1、dumps序列化和loads反序列化 dumps把數據 ...
  • 3、一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 方法一: 方法二:看了別人的思路,我覺得我儼然是個弱智。 4、輸入某年某月某日,判斷這一天是這一年的第幾天? 方法一: 方法二: 5、輸入三個整數x,y,z,請把這三個數由小到大輸出。 方法一 方法二: ...
  • 之前一篇Python 封裝DBUtils 和pymysql 中寫過一個basedao.py,最近幾天又重新整理了下思緒,優化了下 basedao.py,目前支持的方法還不多,後續會進行改進、添加。 主要功能: 1.查詢單個對象: 所需參數:表名,過濾條件 2.查詢多個對象: 所需參數:表名,過濾條件 ...
  • 適用情境:serialize()返回字元串,此字元串包含了表示value的位元組流,可以存儲於任何地方。這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。比較有用的地方就是將數據存入資料庫或記錄在文件中的時候 serialize()可處理處資源類型外所有的類型,也可以序列化對象 <?php $ ...
  • 目錄 1 Connection中的重用方法 2 JDBC事務管理經典案例 1 Connection類中常用的方法回顧 1.1 Statement createStatement() throws SQLException; 創建一個Statement實例(即:創建一個SQL執行對象) 1.2 Pre ...
  • Dubbo是一個分散式服務框架,既然是服務,必然存在服務提供者與服務調用者。 接下來,我們先編寫一個服務提供者。工程仍然使用上篇文章spring4入門中的工程。 我們在pom.xml中加入dubbo的依賴 <dependency> <groupId>com.alibaba</groupId> <ar ...
  • 數組指針(也稱行指針)定義 int (*p)[n];()優先順序高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。 如要將二維數組賦給一指針,應這樣賦值:int a[3][4];int (*p)[4]; // ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...