三大框架之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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...