成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解說Hibernate的工作原理實例

開發 后端
原理是什么呢?hibernate可以理解為是一個中間件它負責把java程序的sql語句接收過來發送到數據庫,而數據庫返回來的信息hibernate接收之后直接生成一個對象傳給java。

大家可能對Hibernate 有大概了解,但Hibernate 原理到底是什么,不一定清楚,這篇文章主要通過一個實例說明Hibernate 原理。希望對大家的學習有所幫助。

我們知道如果用java連接數據庫我們首先想到的就是JDBC,那么Hibernate 原理是什么呢?hibernate可以理解為是一個中間件它負責把java程序的sql語句接收過來發送到數據庫,而數據庫返回來的信息hibernate接收之后直接生成一個對象傳給java。

在說Hibernate 原理之前,先說說Hibernate的文件吧。
假設一個 student 的學生表:
sql語句:

  1. create table student(id Number(10),name varchar2(20)) 

接下來呢.我們需要有兩個hibernate特有的文件。一個是以.cfg.xml結尾的文件.一個是以.hbm.xml結尾的文件。 這兩個文件做什么用的呢?

 .cfg.xml 的作用就是連接數據庫,文件內部其實就是一個由user,password,url,driver組成的一個連接庫的基本信息。

文件的內容是這樣的:

  1. xml version='1.0' encoding='UTF-8'?> 
  2.   PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
  4.  
  5. <hibernate-configuration> 
  6.  <session-factory> 
  7.   <property name="connection.username">111property> 
  8.   <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:risproperty> 
  9.   <property name="dialect">org.hibernate.dialect.Oracle9Dialectproperty> 
  10.   <property name="connection.password">111property> 
  11.                 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriverproperty> 
  12.  
  13.   <mapping resource="Student.hbm.xml"/> 
  14.         session-factory> 
  15. hibernate-configuration> 

這個文件的全稱應該是"你的應用名字.cfg.xml"。當前例子建立的項目名稱是one.cfg.xml 。


簡單分析一下這個文件:

包含的是程序里面的 configuration 的實例的信息。通過這個實例的方法configure我們可以從 mapping 里得到對應的表的信息和類的信息。

這個標簽是我們在程序里通過 configure 的方法 BuildSessionFactory 所得到的一個 SessionFactory 對象,這個對象可以理解為一個 statement ,我們對數據庫的所有操作都是通過它的一系列方法來實現的。

里面的那些 property 是一些連接需要的東西。其中dialect 這個是hibernate的方言屬性值,對于不同的數據庫,方言的值dialect是不同的,那么下面就列出在不同的數據庫中如何設置該dialect值(參見下表):   

RDBMS

方言

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

PostgreSQL

org.hibernate.dialect.PostgreSQLDialect

MySQL

org.hibernate.dialect.MySQLDialect

MySQL with InnoDB

org.hibernate.dialect.MySQLInnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracle (any version)

org.hibernate.dialect.OracleDialect

Oracle 9i/10g

org.hibernate.dialect.Oracle9Dialect

Sybase

org.hibernate.dialect.SybaseDialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server

org.hibernate.dialect.SQLServerDialect

SAP DB

org.hibernate.dialect.SAPDBDialect

Informix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

Ingres

org.hibernate.dialect.IngresDialect

Progress

org.hibernate.dialect.ProgressDialect

Mckoi SQL

org.hibernate.dialect.MckoiDialect

Interbase

org.hibernate.dialect.InterbaseDialect

Pointbase

org.hibernate.dialect.PointbaseDialect

FrontBase

org.hibernate.dialect.FrontbaseDialect

Firebird

org.hibernate.dialect.FirebirdDialect

跟住繼續講 Student.hbm.xml 這個文件。這個文件是對數據庫的表的映射文件,我們用這個文件指出哪個類對應著哪個表,而且還指出哪個類中的屬性對應著表中的哪個字段。
文件的內容是這樣的:

  1. xml version="1.0"?> 
  2.   PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  4.  
  5. <hibernate-mapping> 
  6.  <class name="src.Student" table="student"> 
  7.   <id name="id" column="id"> 
  8.    <generator class="increment"/> 
  9.   id> 
  10.   <property name="name" column="name"/> 
  11.  class> 
  12. hibernate-mapping> 

到此這個文件就結束了。特別說一下這個id 的問題。我們看到文件里面有個 ,這個是什么呢?這個是可以實現自動 id 增加,也就是說如果我們往數據庫中插入一個 name 那么就id自動加1 。

這個文件解釋一下了這個所包含的就是我們前一個文件里面說的mapping。我們在java類中configure得到的mapping就是從這個文件里面讀取出來的。類如果帶包的話一定要帶包名(推薦一切寫的類都要帶包).包名和類名要注意.包名小寫,類名的第一個大寫。我是怕出錯,這里提醒大家一下, 這個就是先指定了類對應的表。然后里面的那些就是指定表中的字段與類中的屬性的對應關系了。


到這里這兩個特殊的文件就介始完了。下面就開始講我們的 java 類了。主要有兩個:一個是Pojo類,一個是我們的Test類。

Pojo類其實就是簡單的一個javaBean。(Plain Old Java Objects, 簡單潔凈Java對象)。看下面的代碼:

  1. package src;  
  2.  
  3.  public class Student{  
  4.  
  5.     private int id;  
  6.     private String name;  
  7.  
  8.     public void setId(int id){  
  9.        this.id=id;  
  10.     }  
  11.  
  12.  
  13.     public void setName(String name){  
  14.        this.name=name;  
  15.     }  
  16.  
  17.     public int getId(){  
  18.      return id;  
  19.     }  
  20.  
  21.     public String getName(){  
  22.      return name;  
  23.     }  
  24.  }  

就是這么簡單的一個類。就是和數據庫的字段對應然后取值的。

下面是我們關鍵的Test類:

  1. package src;  
  2.  
  3. import org.hibernate.*;  
  4. import org.hibernate.cfg.*;  
  5.  
  6. public class Test{  
  7.    public static void main(String bb[]){  
  8.       try{  
  9.          SessionFactory sf=new Configuration().configure().BuildSessionFactory();  
  10.          Session s=sf.opension();  
  11.          Transaction ts=s.beginTransaction();  
  12.          for(int i=0;i<3;i++){  
  13.             Student st=new Student();  
  14.             st.setName("begin go "+ i);  
  15.             s.save(st);  
  16.         }  
  17.          ts.commit();  
  18.          s.close();  
  19.        }catch(Exception e){  
  20.          e.printStackTrace();  
  21.       }  
  22.    }  
  23. }  

這里的第一句 SessionFactory sf=new Configuration().configure().BuildSessionFactory(); 得到configuration的實例.這個開始要和最前面的哪個.cfg.xml對應著看了。

我們取得實例,然后通過configure()讀取mapping對應的.hbm.xml文件的信息。然后我們通過BuildSessionFactory得到SessionFactory對象,然后我們在通過opensession() 建立連接 .Session 就是指一個session被建立。這個需要有servlet的基礎理解,這里等于是一個connection被建立好。

下面通過session對象開啟事務(Transaction)這個相當于conn.setAutoCommit(false);先不遞交最后通過另外一個方法遞交。我們看到下面我們循環里把咱們寫好的Student實例化了。既然實例化了我們就能用里面的方法了。

每次都要session來save一下。一個對象set之后要保存,很好理解吧,保存在了session中。最后遞交commit();  這個方法實際上是實現了兩個作用

  1. conn.commit();    
  2.  conn.setAutoCommit(true);  

這樣才能把我們的數據放進數據庫中。  很奇怪沒有sql語句吧.最后提醒一下.想想hibernate的特性.我們對數據庫的操作就是對對象的操作.這就是OR-Mapping。呵呵,實例分析結束。

【編輯推薦】

  1. Hibernate入門學習寶典
  2. Hibernate屬性簡單分析
  3. Struts-Spring-Hibernate案例
  4. 簡述Hibernate配置連接池
  5. 對Hibernate中get()與load()不同點分析
責任編輯:仲衡 來源: 21jn
相關推薦

2009-06-17 09:17:41

Hibernate3

2012-05-17 10:16:00

HibernateJavamerge

2009-06-03 09:11:03

Hibernate工作原理體系結構

2009-09-23 17:05:52

Hibernate S

2009-06-05 11:01:23

struts mvcMVC工作原理

2009-06-03 09:16:03

Hibernate工作原理使用

2009-09-27 16:21:22

Hibernate C

2011-07-11 13:20:13

linuxuniq

2022-06-08 09:56:46

靜態鏈接Linux命令

2009-09-22 08:39:59

Hibernate F

2009-09-23 17:18:16

Hibernate S

2009-09-24 10:06:42

Hibernate實例

2009-06-30 10:33:00

JSP JavaBeaServlet

2010-07-14 15:51:30

Perl 字符匹配

2009-09-23 10:28:49

使用Hibernate

2009-09-23 15:12:41

Hibernate視圖

2009-09-22 10:09:21

Hibernate S

2011-05-23 10:27:09

網絡測試IP承載網

2009-09-28 13:39:01

Hibernate工作

2019-07-18 11:00:45

自動化運維測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区二区三区 | 69av网| 蜜桃视频成人 | 亚洲a视频 | 欧美激情国产日韩精品一区18 | 国产在线精品一区二区三区 | 欧美www在线 | 日韩午夜 | 午夜成人免费电影 | 午夜国产| 欧美久久一级特黄毛片 | 亚洲成人免费观看 | 午夜视频一区 | 久久精品国产一区二区电影 | 少妇诱惑av | 亚洲午夜一区二区 | av中文字幕网站 | 久久久妇女国产精品影视 | 国产免费一区二区 | 欧美video| 日韩在线观看精品 | 一级视频在线免费观看 | 国产精品欧美一区喷水 | 国产精品美女久久久久久久久久久 | 97色在线视频 | 亚洲欧洲视频 | 日韩成人在线观看 | 不卡在线视频 | 国产精品久久久久久久久久久新郎 | 国产在线精品一区二区 | 国产天天操 | 欧美午夜视频 | 视频在线一区二区 | www.国产精 | 99爱在线免费观看 | 久久国产成人 | 国产精品99久久久久久动医院 | 欧美精品二区 | 隔壁老王国产在线精品 | a视频在线观看 | 91视频一区二区 |