三大框架之hibernate入門

来源:http://www.cnblogs.com/xjqqblogs/archive/2016/09/25/5907321.html
-Advertisement-
Play Games

hibernate入門 1、orm hibernate是一個經典的開源的orm[數據訪問中間件]框架 ORM( Object Relation Mapping)對象關係映射 通過 對象模型 操作 資料庫關係模型 hibernate處於項目的持久層位置,因此又稱為持久層框架 2、hibernate核心 ...


hibernate入門   1、orm      hibernate是一個經典的開源的orm[數據訪問中間件]框架           ORM( Object Relation Mapping)對象關係映射      通過 對象模型 操作 資料庫關係模型 hibernate處於項目的持久層位置,因此又稱為持久層框架   2、hibernate核心組件            SessionFactory [整個資料庫的操作] 重量級組件      Session[對資料庫的一次業務操作] -- 輕量級組件   3、hibernate配置      配置SessionFactory   4、使用hibernate開發一個APP   在導好jar包後:      a.配置hibernate.cfg.xml:
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6 <session-factory>
 7 <!--Database connection settings -->
 8 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
 9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
10 <property name="connection.username">scott</property>
11 <property name="connection.password">tiger</property>
12 <!--SQL dialect 方言-->
13 <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
14 <!--Enable Hibernate's automatic session context management -->
15 <property name="current_session_context_class">thread</property>
16 <!--Echo all executed SQL to stdout -->
17 <property name="show_sql">true</property>
18 <mapping resource="com/it/bean/UserInfo.hbm.xml"/>
19 </session-factory>
20 </hibernate-configuration>

 

   SessionFactory  ---  關聯  xxx.hbm.xml UserInfo.hbm.xml的配置:
 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="com.it.bean">
 6 <class name="UserInfo" table="userinfo">
 7 <id name="user_id" column="user_id">
 8 <!-- 主鍵生成策略 -->
 9 <generator class="assigned"></generator>
10 </id>
11 <property name="user_name" column="user_name"></property>
12 <property name="user_sex" column="user_sex"></property>
13 <property name="user_birth" column="user_birth"></property>
14 <property name="user_addr" column="user_addr"></property>
15 <property name="user_pwd" column="user_pwd"></property> 
16 </class>
17 </hibernate-mapping>
View Code

 

  補充: 主鍵生成策略
  • Assigned:主鍵由外部程式生成,無需Hibernate干預。

  • identity:採用資料庫提供的主鍵生成機制,如MySql、DB2、SqlServer的自增主鍵。

  • sequence:使用資料庫的sequence機制。

  • hilo:通過hi/lo 演算法實現的主鍵生成機制,需要額外的資料庫表保存主鍵生成歷史狀態。

  • seqhilo:與hilo 類似,通過hi/lo 演算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用於支持Sequence的資料庫,如Oracle。

  • increment:主鍵按數值順序遞增。此方式的實現機製為在當前應用實例中維持一個變數,以保存著當前的最大值,之後每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是:如果當前有多個實例訪問同一個資料庫,那麼由於各個實例各自維護主鍵狀態,不同實例可能生成同樣的主鍵,從而造成主鍵重覆異常。因此,如果同一資料庫有多個實例訪問,此方式必須避免使用。

  • native:由Hibernate根據底層資料庫定義自行判斷採用identity、hilo、sequence其中一種作為主鍵生成方式。

  • foreign:使用外部表的欄位作為主鍵。

  • uuid.hex:由Hibernate基於128 位唯一值產生演算法,根據IP、當前時間、JVM啟動時間、內部自增量生成16 進位數值(編碼後以長度32 的字元串表示)作為主鍵,該方法提供了最好的資料庫插入性能和資料庫平臺適應性。

  • uuid.string:與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16),在某些資料庫中可能出現問題(如PostgreSQL)。
              b、創建sessionFactory SessionFactory sessionFactory=(SessionFactory) new Configuration().configure().buildSessionFactory();      c.創建Session Session session=sessionFactory .getCurrentSession();      d.創建Transaction //創建事務並開啟事務 Transaction tx = session.beginTransaction();          e.開啟事務      f.執行操作--業務操作      g.提交事務 tx.commit();        h.異常處理塊,事務回滾 在try catch異常處理後,tx.rollback; 完整代碼(basedao):
  1 package com.it.dao;
  2 import java.util.List;
  3 import org.hibernate.Query;
  4 import org.hibernate.SessionFactory;
  5 import org.hibernate.Transaction;
  6 import org.hibernate.cfg.Configuration;
  7 import org.hibernate.classic.Session;
  8 import com.it.dao.util.SessionFactoryUtils;
  9 /**
 10  * 基礎DAO
 11  * @author xj
 12  *
 13  */
 14 public class BaseDAO <T>{
 15      /**
 16      * 查詢集合--全部
 17      */
 18     public List<T> find(String hql){
 19         Session session =null;
 20         //事務
 21         Transaction tx = null;
 22         List<T> list =null;
 23         try {
 24             //這裡將創建SessionFactory寫成了方法(工具類)--創建SessionFactory並得到Session
 25             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
 26             //開啟事務
 27             tx=session.beginTransaction();
 28             //查詢Java bean UserInfo--對象這裡hql是查詢語句:eg:from UserInfo(UserInfo-->是java bean里的對象)
 29             Query query = session.createQuery(hql);
 30             list = query.list();
 31             //提交
 32             tx.commit();
 33         } catch (Exception e) {
 34             e.printStackTrace();
 35             //事務回滾
 36             tx.rollback();
 37         }
 38         return list;
 39     }
 40  
 41     /**
 42      * 查詢帶參數
 43      */
 44     public List<T> find(String hql,String ...params){
 45         Session session =null;
 46         //事務
 47         Transaction tx = null;
 48         List<T> list =null;
 49         try {
 50             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
 51             //開啟事務
 52             tx=session.beginTransaction();
 53             //查詢Java bean UserInfo--對象
 54             Query query = session.createQuery(hql);
 55             //給參數賦值
 56             for (int i = 0; i < params.length; i++) {
 57                 query.setString(i, params[i]);
 58             }
 59             list = query.list();
 60             //提交
 61             tx.commit();
 62         } catch (Exception e) {
 63             e.printStackTrace();
 64             //事務回滾
 65             tx.rollback();
 66         }
 67         return list;
 68     }
 69  
 70 }
 71     /**
 72      * 添加
 73      * @param obj
 74      */
 75     public void add(Object obj){
 76         Session session =null;
 77         Transaction tx = null;
 78         try {
 79             //
 80             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
 81             tx=session.beginTransaction();
 82             //操作
 83             session.save(obj);
 84             //提交
 85             tx.commit();
 86         } catch (Exception e) {
 87             // TODO: handle exception
 88             e.printStackTrace();
 89             //事務回滾
 90             tx.rollback();
 91             System.out.println("--我回滾啦---");
 92         }
 93     }
 94  
 95     /**
 96      * 按對象刪除
 97      */
 98     public void del(Object obj){
 99         Session session =null;
100         Transaction tx = null;
101         try {
102             //
103             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
104             tx=session.beginTransaction();
105             //操作
106             session.delete(obj);
107             //提交
108             tx.commit();
109         } catch (Exception e) {
110             // TODO: handle exception
111             e.printStackTrace();
112             //事務回滾
113             tx.rollback();
114             System.out.println("--我回滾啦---");
115         }
116     }
117     /**
118      * 按編號刪除
119      */
120     public void delete(Class<T> clz, String OID){
121         Session session =null;
122         Transaction tx = null;
123         //通過給的id來查詢該id的對象
124         Object o=get(clz,OID);
125         try {
126             //
127             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
128             tx=session.beginTransaction();
129             //操作
130             session.delete(o);
131             //提交
132             tx.commit();
133         } catch (Exception e) {
134             // TODO: handle exception
135             e.printStackTrace();
136             //事務回滾
137             tx.rollback();
138             System.out.println("--我回滾啦---");
139         }
140     }
141  
142     /**
143      * 修改
144      * @param obj
145      */
146     public void upd(Object obj){
147         Session session =null;
148         Transaction tx = null;
149         try {
150             //得到SessionFactory
151             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
152             //開啟事務
153             tx=session.beginTransaction();
154             //操作
155             session.update(obj);
156             //提交
157             tx.commit();
158         } catch (Exception e) {
159             // TODO: handle exception
160             e.printStackTrace();
161             //事務回滾
162             tx.rollback();
163             System.out.println("--我回滾啦---");
164         }
165     }
166  
167     /**
168      * 查詢
169      */
170     public T get(Class<T> clz, String OID){
171         Session session =null;
172         Transaction tx = null;
173         T t=null;
174         try {
175             //
176             session=SessionFactoryUtils.getSessionFactory().getCurrentSession();
177             tx=session.beginTransaction();
178             //操作
179             t = (T) session.get(getClass(), OID);
180             //提交
181             tx.commit();
182         } catch (Exception e) {
183             // TODO: handle exception
184             e.printStackTrace();
185             //事務回滾
186             tx.rollback();
187             System.out.println("--我回滾啦---");
188         }
189         return t;
190     }
191  
View Code

 

hibernate導的包:
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Session:在不同的瀏覽器之間傳值,像銀行之類的網站為了安全把用戶名密碼保存在session裡面。每一臺電腦訪問伺服器,都會是獨立的一套session,key值都一樣,但是內容都是不一樣的 以上所有內容,都跟cookies一樣 不一樣:1、Session的保存位置是保存在伺服器上2、Sessio ...
  • 一、深入.NET框架 1..NET框架具有兩個組件:CLR(公共語言運行時)和FCL(框架類庫),CLR是.NET框架的基礎 2.框架核心類庫: System.Collections.Generic:泛型操作 System.IO:IO流操作 System.Net:網路編程 System.Data:A ...
  • ASP.NET HTTP 處理程式是響應對 ASP.NET Web 應用程式的請求而運行的過程(通常稱為"終結點")。最常用的處理程式是處理 .aspx 文件的 ASP.NET 頁處理程式。用戶請求 .aspx 文件時,頁通過頁處理程式來處理請求。 ASP.NET 頁處理程式僅僅是一種類型的處理程式 ...
  • 硬碟和記憶體的作用是什麼 硬碟的作用毫無疑問我們大家都清楚,不就是用來存儲數據文件的麽?如照片、視頻、各種文檔或等等,肯定也有你喜歡的某位島國老師的動作片,這個時候無論我們電腦是否關機重啟它們永遠在那裡,不會無辜地消失掉。那記憶體是用來做什麼的呢?我是不能準確的描述出來,所以我抄襲了下麵描述記憶體作用的一 ...
  • 1、首先他們兩個介面都是為了實現對象的序列化,使之可以傳遞,所謂序列化就是將對象信息裝換成可以存儲的介質的過程。 2、Serializable是jdk所提供的序列化介面,該介面存在於io包下,可想用於輸入輸出,使用非常簡單,只要讓你的類實現此介面就ok了;可以使用transient關鍵字修飾你不想序 ...
  • 約定:句子以空格為詞語分割符號,以句號為結束符號。 實現思路: 用函數explode(separator,string,limit)對字元串進行分割,再對得到的數據最後一個成員分割切掉符號。用一個新的數組倒序接收轉為字元串,並補上句號。 代碼實現: 效果: ...
  • 1.簡單示例: SpringBoot中的的配置簡單屬性類支持ConfigurationProperties方式,看一個簡單的示例。 1 @ConfigurationProperties(prefix = "org.dragonfei.demo") 2 public class DemoPropert ...
  • python開發【第一篇】:目錄 python開發【第二篇】:python初體驗 python開發【第三篇】: python開發【第四篇】: python開發【第五篇】: python開發【第六篇】: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...