亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

學習Hibernate in Action讀書筆記

2019-11-18 11:50:05
字體:
來源:轉載
供稿:網友

  讓我們還是以這個經久不衰的例子"Hello World"開始:)
  
  1.Message.java: 一個簡單的持久類
  package hello;
  
  public class Message {
  
  PRivate Long id;  //說明
  
  private String text;
  
   private Message nextMessage;
  
   private Message() {}
  
  public Message(String text) {
  
  this.text = text;
  
  }
  
  public Long getId() {
  
  return id;
  
  }
  
  private void setId(Long id) {
  
  this.id = id;
  
  }
  
  public String getText() {
  
  return text;
  
  }
  
  public void setText(String text) {
  
  this.text = text;
  
  }
  
  public Message getNextMessage() {
  
  return nextMessage;
  
  }
  
  public void setNextMessage(Message nextMessage) {
  
  this.nextMessage = nextMessage;
  
  }
  
  }
  
  說明: ID標識符 (identifier) ,它答應應用去訪問數據庫以一個唯一的標識,這個標識也就是持久類的主鍵值。假如一個Message對象有兩個實例,它們擁有同一個標識,那么代表他們訪問的是數據庫的同一個數據。在這里我們選擇了Long做這個標識的數據類型,但是這不是必須的。因為Hibernate答應這個identifier為任何的數據類型。
  
  2. 保存數據信息到數據庫:
  session session = getSessionFactory().openSession();
  
  Transaction tx = session.beginTransaction();
  
  Message message = new Message("Hello World");
  
  session.save(message);
  
  tx.commit();
  
  session.close();
  
  在這段代碼中,我們引用了Hibernate的Session和Transaction接口。這段代碼的執行,就似乎我們做了下面這段SQL所做的事:
  
  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  
  values (1, 'Hello World', null)
  
  注:這個例子中,我們假設數據中已經存在MESSAGES這張表了。
  
  3.從數據庫中讀出信息并打印它們
  Session newSession = getSessionFactory().openSession();
  
  Transaction newTransaction = newSession.beginTransaction();
  
  List messages =
  
  newSession.find("from Message as m order by m.text asc");
  
  System.out.println( messages.size() + " message(s) found:" );
  
  for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
  
  Message message = (Message) iter.next();
  
  System.out.println( message.getText() );
  
  }
  
  newTransaction.commit();
  
  newSession.close();
  
  這段代碼中,大家看到了“from Message as m order by m.text asc”,這是Hibernate自帶的面向對象查詢語言Hibernate Query Language (HQL).那么翻譯一下這句話,就是下面這個SQL了:
  
  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  
  from MESSAGES m
  
  order by m.MESSAGE_TEXT asc
  
  輸出結果:
  
  1 message(s) found:
  
  Hello World
  
  4.簡單的xml映射文件
  "-//Hibernate/Hibernate Mapping DTD//EN"
  
  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  
  name="hello.Message"
  
  table="MESSAGES">
  
  
  name="id"
  
  column="MESSAGE_ID">
  
  name="text"
  
  column="MESSAGE_TEXT"/>
  
  name="nextMessage"
  
  cascade="all"
  
  column="NEXT_MESSAGE_ID"/>
  
  這個映射文件告訴Hibernate,Message這個類是持久化的MESSAGES這張數據庫表,identifier屬性對應的是表中的MESSAGE_ID字段,text屬性對應的是MESSAGE_TEXT字段,nextMessage是一個多對一的關聯,對應的是NEXT_MESSAGE_ID字段。
  
  上面這個文件可以手工編寫,也可以借助第三方工具生成。
  
  5.更新一條信息
  下面讓我們修改一下剛才存到數據庫里面的第一條信息。
  
  Session session = getSessionFactory().openSession();
  
  Transaction tx = session.beginTransaction();
  
  // 1 is the generated id of the first message
  
  Message message =
  
  (Message) session.load( Message.class, new Long(1) );
  
  message.setText("Greetings Earthling");
  
  Message nextMessage = new Message("Take me to your leader (please)");
  
  message.setNextMessage( nextMessage );
  
  tx.commit();
  
  session.close();
  
  這段代碼等同以下三個SQL語句所要實現的東西:
  
  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  
  from MESSAGES m
  
  where m.MESSAGE_ID = 1
  
  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  
  values (2, 'Take me to your leader (please)', null)
  
  update MESSAGES
  
  set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2
  
  where MESSAGE_ID = 1
  
  再次運行“Hello World”,輸入信息如下:
  
  2 message(s) found:
  
  Greetings Earthling
  
  Take me to your leader (please)
  
  *補充,在Hibernate中最核心的五個接口:
  
  Session接口:這是Hibernate中一個主要的接口,Session接口的建立和消毀都是輕量級并且耗費資源很少的。這一點很重要,因為在我們的應用,我們每時每刻都在做著Session的create和distroy工作。它不是線程安全的,原則上它應該設計成一個時間只有一個Session才對。Session可以加載一個與一個工作流相關的對象,它可以監測著這個對象的變化,它被稱之為持久對象的治理器,當我們要對數據對象進行編輯操作時,就要調用它了。
  
  SessionFactory接口:我們請求一個Session實例,就是從SessionFactory中取得了。當然SessionFactory就不是個輕量級的東西了,它被多個應用的線程所共享。假如你通過Hibernate訪問多個數據庫,就要為每一個數據庫建立一個SessionFactory。在Hibernate的運行時,SessionFactory緩存了SQL段和其它的中介映射數據。它也保持one unit of work正在讀取的數據和將來可能被用到的數據。
  
  Configuration接口:Configuration用于指定一個應用所使用的映射文件的地址和Hibernate指定的屬性文件,然后建立一個SessionFactory。
  
  Transaction接口:
  
  Query and Criteria接口:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91免费观看| 国产伦精品一区二区三区精品视频| 亚洲精品久久久久久久久久久久久| 亚洲国产91色在线| 日韩在线精品一区| 亚洲精品suv精品一区二区| 色综合久久久888| 亚洲精品国产精品自产a区红杏吧| 77777少妇光屁股久久一区| 亚洲丝袜一区在线| 国产精品一区二区电影| 国产精品欧美一区二区| 91免费看国产| 国模gogo一区二区大胆私拍| 亚洲伊人一本大道中文字幕| 国产精品激情av电影在线观看| 欧美日韩国产一区在线| 精品日韩中文字幕| 91高清免费在线观看| 亚洲电影免费观看| 国产中文欧美精品| 欧美一区视频在线| 欧美日韩午夜剧场| 色久欧美在线视频观看| 国产精品 欧美在线| 日韩精品欧美国产精品忘忧草| 国产亚洲欧美视频| 久久亚洲春色中文字幕| 日韩美女毛茸茸| 中文字幕在线看视频国产欧美| 欧美激情一级二级| 国产婷婷色综合av蜜臀av| 亚洲视频在线免费看| 欧美日韩国产专区| 久久精品亚洲94久久精品| 日本成人黄色片| 中文字幕日本精品| 亚洲国产99精品国自产| 亚洲精品久久久久中文字幕欢迎你| 久久精品在线播放| 国产欧美日韩亚洲精品| 欧美亚洲另类激情另类| 8090理伦午夜在线电影| 91精品视频免费观看| 成人综合网网址| 欧美激情xxxx性bbbb| 亚洲精品久久久久| 欧美高清视频一区二区| 国产精品扒开腿做爽爽爽视频| 国产精品99久久久久久人| 国产精品第七影院| 精品中文字幕在线| 成人在线视频网站| 一区二区三区久久精品| 亚洲码在线观看| 欧美另类69精品久久久久9999| 成人精品一区二区三区| 国产精品自产拍在线观看中文| 中文国产成人精品久久一| 亚洲第一综合天堂另类专| 亚洲男子天堂网| 国产精品白嫩美女在线观看| 精品国产91久久久久久老师| 亚洲免费视频在线观看| 国产精品久久99久久| 不卡av在线网站| 国产精品美女www爽爽爽视频| 日韩精品中文字幕在线播放| 91精品久久久久久久久久入口| 亚洲韩国日本中文字幕| 亚洲电影在线观看| 亚洲jizzjizz日本少妇| 伊人伊成久久人综合网小说| 大桥未久av一区二区三区| 精品亚洲精品福利线在观看| 国产精品成人av性教育| 97成人精品视频在线观看| 日本三级韩国三级久久| 97不卡在线视频| 国产精品视频xxxx| 91久久国产婷婷一区二区| 久久久久久久久久亚洲| 欧美性xxxx极品hd欧美风情| 亚洲一区二区三区xxx视频| 欧美性猛交xxxx乱大交极品| 亚洲福利视频网站| 久久久免费观看| 狠狠久久亚洲欧美专区| 国产精品美女久久久久久免费| 欧美香蕉大胸在线视频观看| 91免费国产视频| 理论片在线不卡免费观看| 日韩有码片在线观看| 久久久免费高清电视剧观看| 亚洲成**性毛茸茸| 草民午夜欧美限制a级福利片| 日韩欧美极品在线观看| 自拍偷拍亚洲在线| 色悠久久久久综合先锋影音下载| 国产一区二区三区直播精品电影| 国产a∨精品一区二区三区不卡| 亚洲美女动态图120秒| 亚洲第一精品夜夜躁人人爽| 中日韩美女免费视频网站在线观看| 精品一区二区三区四区| 国产成人精品电影久久久| 国产精品丝袜白浆摸在线| 欧美激情xxxx| 亚洲国产黄色片| 国产精品久久久久久久久久久久| 中文日韩电影网站| 1769国内精品视频在线播放| 91成品人片a无限观看| 亚洲自拍高清视频网站| 亚洲a区在线视频| 欧美日韩一区二区在线播放| 91精品91久久久久久| 黑人极品videos精品欧美裸| 成人精品在线视频| 欧美疯狂做受xxxx高潮| 中文字幕亚洲综合久久| 成人av在线亚洲| 欧美激情2020午夜免费观看| 美女啪啪无遮挡免费久久网站| 国产亚洲欧美日韩美女| 国产日本欧美一区| 欧美巨乳在线观看| 国产成人一区二区三区小说| 国产精品视频不卡| 国产精品久久婷婷六月丁香| 久久在线免费观看视频| 日本久久久久久久| 欧美午夜片欧美片在线观看| 91av在线不卡| 国产视频久久久| 久久久精品久久久| 亚洲成人av资源网| 韩国三级日本三级少妇99| 欧美视频免费在线观看| 精品亚洲aⅴ在线观看| 亚洲欧洲视频在线| 亚洲国产精品专区久久| 亚洲欧洲免费视频| 久久人人爽亚洲精品天堂| 亚洲成人黄色网| 日韩精品亚洲精品| 日韩精品免费观看| 精品中文视频在线| 日本欧美爱爱爱| 91精品视频专区| 国产999精品久久久影片官网| 国产欧美久久久久久| 自拍偷拍亚洲在线| 九九热这里只有在线精品视| 亚洲国产欧美自拍| 精品久久中文字幕久久av| 亚洲欧美一区二区三区久久| 日本国产精品视频| www.亚洲男人天堂| 黑人精品xxx一区一二区| 欧美怡红院视频一区二区三区| 成人a免费视频| 亚洲999一在线观看www| 91精品国产91久久久久久不卡|