国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

解說Hibernate的工作原理實(shí)例

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

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

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

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

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

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

 .cfg.xml 的作用就是連接數(shù)據(jù)庫,文件內(nèi)部其實(shí)就是一個由user,password,url,driver組成的一個連接庫的基本信息。

文件的內(nèi)容是這樣的:

  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> 

這個文件的全稱應(yīng)該是"你的應(yīng)用名字.cfg.xml"。當(dāng)前例子建立的項(xiàng)目名稱是one.cfg.xml 。


簡單分析一下這個文件:

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

這個標(biāo)簽是我們在程序里通過 configure 的方法 BuildSessionFactory 所得到的一個 SessionFactory 對象,這個對象可以理解為一個 statement ,我們對數(shù)據(jù)庫的所有操作都是通過它的一系列方法來實(shí)現(xiàn)的。

里面的那些 property 是一些連接需要的東西。其中dialect 這個是hibernate的方言屬性值,對于不同的數(shù)據(jù)庫,方言的值dialect是不同的,那么下面就列出在不同的數(shù)據(jù)庫中如何設(shè)置該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

跟住繼續(xù)講 Student.hbm.xml 這個文件。這個文件是對數(shù)據(jù)庫的表的映射文件,我們用這個文件指出哪個類對應(yīng)著哪個表,而且還指出哪個類中的屬性對應(yīng)著表中的哪個字段。
文件的內(nèi)容是這樣的:

  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> 

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

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


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

Pojo類其實(shí)就是簡單的一個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.  }  

就是這么簡單的一個類。就是和數(shù)據(jù)庫的字段對應(yīng)然后取值的。

下面是我們關(guān)鍵的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的實(shí)例.這個開始要和最前面的哪個.cfg.xml對應(yīng)著看了。

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

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

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

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

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

【編輯推薦】

  1. Hibernate入門學(xué)習(xí)寶典
  2. Hibernate屬性簡單分析
  3. Struts-Spring-Hibernate案例
  4. 簡述Hibernate配置連接池
  5. 對Hibernate中g(shù)et()與load()不同點(diǎn)分析
責(zé)任編輯:仲衡 來源: 21jn
相關(guān)推薦

2009-06-17 09:17:41

Hibernate3

2012-05-17 10:16:00

HibernateJavamerge

2009-06-03 09:11:03

Hibernate工作原理體系結(jié)構(gòu)

2009-06-03 09:16:03

Hibernate工作原理使用

2009-09-27 16:21:22

Hibernate C

2009-09-23 17:05:52

Hibernate S

2009-06-05 11:01:23

struts mvcMVC工作原理

2022-06-08 09:56:46

靜態(tài)鏈接Linux命令

2010-07-14 15:51:30

Perl 字符匹配

2009-06-30 10:33:00

JSP JavaBeaServlet

2011-07-11 13:20:13

linuxuniq

2009-09-23 15:12:41

Hibernate視圖

2009-09-22 10:09:21

Hibernate S

2009-09-23 10:28:49

使用Hibernate

2009-09-22 08:39:59

Hibernate F

2009-09-24 10:06:42

Hibernate實(shí)例

2009-09-23 17:18:16

Hibernate S

2011-05-23 10:27:09

網(wǎng)絡(luò)測試IP承載網(wǎng)

2009-09-28 13:39:01

Hibernate工作

2019-07-18 11:00:45

自動化運(yùn)維測試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

精品久久久久一区二区国产| 国产精品影音先锋| 黑丝一区二区三区| 欧美国产中文字幕| sm久久捆绑调教精品一区| 亚洲美女偷拍久久| 可以免费在线看黄的网站| 日韩伦理一区二区三区av在线| 日韩在线免费视频| 久久久午夜视频| 成人精品一区二区三区免费| 精品国产免费视频| youjizz在线播放| 午夜亚洲福利| 精品国产电影一区二区| 国产一区二区高清不卡| 伊人影院在线播放| 国产99在线| 三级欧美在线一区| 欧美性黄网官网| 国产精品久久久久免费a∨大胸| 欧美日韩激情视频一区二区三区| 国产精品22p| 偷拍中文亚洲欧美动漫| 中文字幕伦理免费在线视频 | 欧美特级限制片免费在线观看| 免费看欧美一级片| 日韩精品国产精品| 亚洲精品国产成人| 日本最新在线视频| 欧美日韩精品福利| 在线成人直播| 国产精品露脸自拍| 97人人在线| 国产成人啪免费观看软件 | 国产精品久久久久久av福利软件| 黄色片一级视频| 国产福利片在线| 亚洲精品小说| 日韩免费高清av| 九九热精品在线播放| 97在线观看免费观看高清| 久草免费在线视频| 噜噜噜在线观看免费视频日韩| 久久精品成人一区二区三区| 国产手机视频在线观看| 黄色小网站在线观看| 日韩高清一区二区| 夜夜嗨av色综合久久久综合网| 亚洲精品99久久久久| 91精品国产综合久久香蕉最新版| 操你啦视频在线| 丝袜亚洲欧美日韩综合| 免费毛片aaaaaa| 欧美性生活久久| 黄色aa久久| 91精品国产一区| 亚洲国产一区二区精品专区| 性欧美18一19内谢| 国产精品午夜电影| 国产二区视频在线观看| 亚洲欧美一区二区三区情侣bbw | 国内精品在线播放| 欧美一区二区精美| 999国产精品一区| 99热在线观看免费| 色婷婷av一区二区三区之一色屋| 国产传媒欧美日韩成人精品大片| 91免费国产网站| 国产精品自拍视频在线| 亚洲黄网站在线观看| 欧美日韩激情视频8区| 台湾成人av| 不卡的电视剧免费网站有什么| 欧美日韩在线一| 亚洲三级在线看| 户外极限露出调教在线视频| 欧美va亚洲va在线观看蝴蝶网| 国精品产品一区| 国产精品丝袜视频| 中文字幕不卡三区| 青青草原av在线| 欧美成人午夜激情| xxxx视频在线| 欧美精三区欧美精三区| 99在线视频影院| 亚洲一区亚洲二区| 日韩精品在线观看一区| 成人黄色网址在线观看| 夜色福利资源站www国产在线视频 夜色资源站国产www在线视频 | 亚洲国产日日夜夜| 黑人巨大亚洲一区二区久| 国产伦精品一区二区三区精品视频| 国内成人自拍视频| 日韩精品视频无播放器在线看| 日韩有码视频在线| 美女国产精品| 中文字幕在线播放第一页| 欧美成人精品一区| 国产乱一区二区| 日本免费视频在线观看| 国产精品成人免费电影| 97精品久久久久中文字幕| 蜜桃成人365av| 国产综合动作在线观看| 午夜精品久久久久久| 哺乳挤奶一区二区三区免费看| 桥本有菜av在线| 日韩无一区二区| 亚洲国产黄色| 国产视频二区在线观看| 国产精品久久久久久久久久尿| 久久久久国产一区二区三区四区| 涩涩av在线| 中文字幕av日韩精品| 7777精品伊人久久久大香线蕉超级流畅 | 爽成人777777婷婷| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产日韩av一区二区| av免费在线一区| 亚洲综合免费观看高清完整版 | 成人在线播放av| 中国av一区二区三区| 97人人做人人爽香蕉精品| 午夜精品区一区二区三| 欧美日韩视频在线第一区 | 一本一道波多野毛片中文在线| 欧美激情国产精品| 97se亚洲国产综合自在线不卡 | 一区二区三区亚洲| 亚洲狼人在线| 黑人巨大国产9丨视频| 日韩精品最新网址| 欧美亚洲三区| 午夜毛片在线| 久久资源av| 精品国产乱码久久久久久蜜臀| 李宗瑞系列合集久久| 欧美影院久久久| 91丝袜美腿高跟国产极品老师 | 欧美视频一区| 情se视频网在线观看| 日本三级韩国三级久久| 成人在线电影网| 日本成人黄色片| 国产精品成人网| 久久久伦理片| 深夜视频一区二区| 日本成人激情视频| 麻豆精品视频在线| 久久精品天堂| 国产精品高清一区二区| 国产精品成人播放| 亚洲高清不卡在线观看| 在线日本制服中文欧美| 国产一区激情| 中文无字幕一区二区三区| 在线一区亚洲| 欧美成人免费电影| 日韩av一二三四区| 99国产超薄肉色丝袜交足的后果| 亚洲精品视频网上网址在线观看| 欧美日韩国产高清一区二区| 中文字幕日韩欧美一区二区三区| 亚洲国产欧美国产第一区| 一区二区三区入口| 国产精品久久久久99| 欧美综合一区二区| 性欧美videos另类喷潮| 伊人久久视频| 成人狠狠色综合| 国产精品网站视频| 欧美日韩免费不卡视频一区二区三区 | www日韩av| 在线亚洲+欧美+日本专区| 99综合在线| 日韩国产激情| 国产羞羞视频在线观看| 91在线播放视频| 国产视频自拍一区| 亚洲欧美中日韩| 性欧美暴力猛交另类hd| 欧美一区=区三区| 绯色av一区| 久久久一二三四| 91成人免费观看网站| 欧美精品视频www在线观看| 2024国产精品视频| 在线观看的日韩av| 精品福利在线| 男女av在线| 欧美国产亚洲一区| 国产九区一区在线| 欧美—级a级欧美特级ar全黄| 在线看不卡av| 99re这里只有精品首页| 国产字幕视频一区二区| 国产精选久久| youjizz在线播放| 一区二区三区在线资源|